Loading...

Python/머신러닝 / / 2022. 5. 18. 00:12

머신러닝 7강. 선형회귀

반응형

길이라는 특성 하나만으로 무게를 예측한다는 게 말이 안 된다는

지난 시간의 문제점을 해결하기 위해 선형 회귀를 사용해볼 것이다.

 

 

선형 회귀에서 선과 점의 오차율은 음수가 될 수도 있기 때문에

모든 손실(잔차) 값에는 제곱을 해준 뒤 더해서 MSE(평균 오차 제곱)를 구한다.

 

구한 mse가 좋은 건지 알 수 없다.

여러 가지 선을 비교를 해보지 않았기 때문이다.

비교하기 위해 사용하는 게 미분이다.

미분으로 기울기를 변경해가며 mse가 최소인 지점을 찾아야 한다.

 

이 값이 최소가 되는 회귀식을 찾는 것을 최소 제곱법이라고 하고

방법은 경사 하강법(미분)을 사용해야 한다.

 

이 선형 회귀 알고리즘이 최소 제곱법을 찾아주고

이때 내부적으로 경사 하강법 알고리즘을 사용하는 것이다.

 

from sklearn.linear_model import LinearRegression

# 객체 생성
lr = LinearRegression()

# 훈련
lr.fit(train_input, train_target)

# 예측
print(lr.predict([[50]]))

# 농어무게 = a(기울기) * 농어길이 + b(절편)
# y = 39.017 * x - 709.018 실제 50을 넣어보면 1241이 나온다

print(lr.coef_, lr.intercept_) # (기울기, 절편)

# 점으로 흩뿌릴 때 쓰는 그래프 (훈련 세트의 산점도)
plt.scatter(train_input, train_target)

# 선형 그래프 (15에서 50까지 1차 방정식 그래프)
plt.plot([15, 50], [15 * lr.coef_ + lr.intercept_, 50 * lr.coef_ + lr.intercept_])

# 50cm 농어 데이터
plt.scatter(50, 1241.8, marker="^")
plt.xlabel("length")
plt.ylabel("weight")
plt.show()

# 결정계수 확인 
# -> 훈련 데이터 결정계수는 잘나왔는데 테스트 데이터 결정계수가 너무 안나왔음 0.90은 나와야지 비슷해야해
# 2번 문제점 때문 => 특성이 길이 하나라서 그런거야!!
# 너무 훈련 세트에 맞춰서 만들어졌다 : 과대적합으로 본다
print(lr.score(train_input, train_target))
print(lr.score(test_input, test_target))

 

 

 

[출처]

 

혼자 공부하는 머신러닝 + 딥러닝

 

머신러닝+딥러닝 » 혼자 공부하는 책

혼자 공부하는 머신러닝 딥러닝, 무료 동영상 강의, 머신러닝+딥러닝 용어집을 다운로드 하세요. 포기하지 마세요! 독학으로 충분히 하실 수 있습니다. ‘때론 혼자, 때론 같이’ 하며 힘이 되겠

hongong.hanbit.co.kr

 

반응형