본문 바로가기

Programming/Machine Learning

Linear Model - Regression

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = pd.DataFrame([[2,20],[4,40],[8,80],[9,90]],
                   index=['학생1','학생2','학생3','학생4'],
                   columns=['시간','성적'])
data

 

1. 수학 공식을 이용한 해석적 모델

- LinearRegression

from sklearn.linear_model import LinearRegression
linear_model = LinearRegression()
linear_model.fit(data[['시간']] , data['성적']) # 문제는 2차원으로 넣어줘야한다.

# y = 10 * x + 0
print(linear_model.coef_) # 가중치
print(linear_model.intercept_) # 절편

linear_model.predict([[7]])

 

2. 경사하강법

- 가중치(w)변화에 따른 비용함수(cost)값의 변화 그래프

 

H(x)

def h(w,x): # 가설함수
    return w * x + 0

 

Cost function

def cost(data, target, weight): # MSE
    y_pre = h(weight, data) # 예측 값
    return ((y_pre - target) ** 2).mean() # cost 값
    
cost(data['시간'] , data['성적'], 10)

cost(data['시간'] , data['성적'], 12)

cost(data['시간'] , data['성적'], 20)

cost(data['시간'] , data['성적'], 8)

cost(data['시간'] , data['성적'], 25)

weight_arr = range(-10,31)

cost_list = []
for w in weight_arr:
    c = cost(data['시간'], data['성적'], w)
    cost_list.append(c)
cost_list

plt.plot(weight_arr, cost_list)
plt.show()

 

SGDRegressor 사용하기

from sklearn.linear_model import SGDRegressor

sgd_model = SGDRegressor(max_iter=5000, # 가중치 업데이트 반복 횟수(epoch)
                        eta0=0.1, # 학습률 (learning rate)
                        verbose=1) # 학습 과정을 확인 할 수 있다.
                        
sgd_model.fit(data[['시간']], data['성적'])

sgd_model.predict([[7]])

print(sgd_model.coef_)
print(sgd_model.intercept_)

'Programming > Machine Learning' 카테고리의 다른 글

손글씨 분류 실습  (0) 2020.02.17
보스턴주택 값 예측  (0) 2020.02.17
타이타닉 생존자 예측 분석  (0) 2020.02.17
버섯데이터 분류  (0) 2020.02.17
iris 품종분류  (0) 2020.02.17