728x90
반응형
선형회귀란 ?
선형 회귀(Linear Regression)는 회귀 문제를 예측할 때 사용하는 알고리즘 중 하나이다.
'독립 변수가 커질 때 종속 변수가 크거나 작게 변하는' 관계를 모델링 하는 것이다. 선형회귀는 보통 하나 이상의 독립 변수를 사용하여 모델링한다. 이 때, 독립 변수가 하나면 '단순선형회귀(simple linear regression)'라고 한다.
단순선형회귀란?
이 식에서 모델이 기울기(w1,w)와 절편(w0,b)을 바꿔가면서 최적의 기울기, 절편을 찾는다.
이 때, '최적이 되는 기준'은 평균제곱오차(MSE)의 값이 최소가 될 때이다.
code
1 ) sklearn module
from sklearn.linear_model import LinearRegression
X = [[10.0], [8.0], [13.0], [9.0], [11.0], [14.0], [6.0], [4.0], [12.0], [7.0], [5.0]]
y = [8.04, 6.95, 7.58, 8.81, 8.33, 9.96, 7.24, 4.26, 10.84, 4.82, 5.68]
# 모델 생성 및 학습
model = LinearRegression()
model.fit(X, y)
# 기울기
print('기울기 : ', model.coef_)
# 절편
print('절편 : ', model.intercept_)
# x=0, y=1일 때 모델의 출력 결과 예측
y_pred = model.predict([[0], [1]])
print('예측값 : ', y_pred)
기울기 : [0.50009091]
절편 : 3.0000909090909094
예측값 : [3.00009091 3.50018182]
데이터와 평균제곱오차 값이 최소일 때의 직선을 그려보자.
import matplotlib.pyplot as plt
plt.plot(X, y, 'o')
plt.plot(X,model.predict(X))
plt.show()
cf ) 최소제곱법, 리지 회귀, 라소 회귀 방법이 있다.
2 ) tensorlow module
tensorflow module로 간단한 데이터를 학습하고, 반복 학습해보자 !
# data set 설정
x_data = [1,2,3]
y_data = [1,2,3]
# placeholder
x = tf.placeholder(dtype = tf.float32)
y = tf.placeholder(dtype = tf.float32)
# weight, bias
# 한 개의 값만 예측하기 때문에 random_normal(한개!)
# random_normal : 랜덤으로 변수 한 개를 지정해준다
W = tf.Variable(tf.random_normal([1]), name = 'weight')
b = tf.Variable(tf.random_normal([1]), name = 'bias')
# hypothesis
# 모델에 적용할 수식을 설정한다
# 단순선형회귀이므로 다음의 수식을 사용한다.
H = W * x + b
# cost function
# H에서 y값을 뺀 뒤, 그 값을 제곱하여 평균을 구하자
cost = tf.reduce_mean(tf.square(H-y))
# train node 생성
# GradientDescentOptimizer : 경사하강법을 이용해 좋은 w값으로 이동한다
# 하강 시, 0.01의 값을 곱하면서 !
# 좋은 w값은 어떻게 구할까 ? cost가 최소값일 때 좋은 w값이구나 !
optimizer = tf.train.GradientDescentOptimizer(learning_rate = 0.01)
train = optimizer.minimize(cost)
# runner session
# global_variables_initializer() : 학습 전에 항상 초기화를 해주자!
sess = tf.Session()
sess.run(tf.global_variables_initializer())
# learning
# 3000번 학습하자
for step in range(3000):
_,w_val,cost_val,b_val = sess.run([train,W,cost,b],
# 내가 학습시킬 데이터
feed_dict={
x : x_data,
y : y_data
})
# 학습이 잘 되는지 확인용으로 print를 해주었다.
if step % 300 == 0:
print("w값 : {}, b값 : {}, cost값{}".format(w_val, b_val, cost_val))
# prediction
# 200 값을 넣으면 어떤 결과가 출력될까?
print(sess.run(H, feed_dict={ x : 200 }))
[200.03963]
cf ) GradientDescentOptimizer
728x90
반응형
'AI > Experiment' 카테고리의 다른 글
05. 릿지 회귀, 라쏘 회귀 ( Ridge, Lasso ) (0) | 2020.05.15 |
---|---|
04. 다항 회귀( Polynomial Regression ) (0) | 2020.05.14 |
03. 다중선형회귀( Multiple Linear Regression ) (0) | 2020.05.13 |
01. 머신러닝 모델 평가 방법 (0) | 2020.05.10 |
00. 머신러닝 개요 (0) | 2020.05.10 |