머신러닝 | 딥러닝

[ML(머신러닝)] KNN 회귀모델 -4 <회귀모델>

멈머이 2023. 12. 27. 21:54
728x90

<회귀모델의 종류>   


  - 선형회귀모델(직선)

  - 다항회귀모델(곡선)

  - 다중회귀모델(직선 여러 개)

  - 릿지

  - 라쏘             

         ==> 회귀모델만
  - 랜덤포레스트

  - 그레디언트부스트

  - 히스토그램그리디언트부스트

  - XGBoost(별도 라이브러리), 기타 등등...

         ==> 회귀 분류 동시에 사용가능

 


  - 주로 많이 사용되는 회귀모델 : 릿지, 히스토그램그레디언트부스트, XGBoost

 

<선형회귀모델(LR; Liner Regression Model)>

* 모델 라이브러리 불러들이기

from sklearn.linear_model import LinearRegression

 

 

* 모델생성하기

lr = LinearRegression()
lr

 

 

* 모델 훈련시키기

lr.fit(train_input, train_target)

 

 

* 훈련 정확도 및 테스트(검증) 정확도

train_r2 = lr.score(train_input, train_target)

test_r2 = lr.score(test_input, test_target)
print(f"훈련 : {train_r2} / 검증 : {test_r2}")

결과 : 훈련 : 0.9398463339976041 / 검증 : 0.8247503123313559

<해석>
 - 결정계수 확인 결과 [훈련> 테스트] 이기에 과소적합은 일어나지 않으나, 두 계수의 차이가 0.12로 과대적합이 의심됨

 

임의 데이터로 예측하기

* 데이터 : 50

lr.predict([[50]])

결과 : array([1241.83860323])

 => KNN에서는 1033g으 예측했었음 

 

 

* 추세선(예측선)을 그리기 위한 계수값 추출하기

lr.coef_, lr.intercept_

결과 : (array([39.01714496]), -709.0186449535477)

 - 직선의 방정식 : y = a * x + b
 - coaf_ : 기울기(계수) -> a
 - intercept_ : 절편 -> b

 

추세선 그리기

### 훈련데이터 산정도
plt.scatter(train_input, train_target)

### 예측값 산정도
plt.scatter(50, 1241.839, marker="^")

### 추세선
plt.plot([15, 50], [lr.coef_ * 15 + lr.intercept_,
                    lr.coef_ * 50 + lr.intercept_])

plt.grid()
plt.show()

 

<해석>
  - 임의 값 예측 시 KNN보다는 성능이 좋은 예측이 가능하며, 과적합이 발생하지 않는 일반화된 모델로 보이나,
    y절편의 값이 음수로 예측 시 음수의 데이터가 예측 될 가능성이 있는 모데로 보임
  - 종속변수 무게의 합은 0 이하로 나올 수 없기에 이상치를 예측할 수 있는 모델로 현재 사용하는 데이터를 예측하기에는 부적합한 모델로 여겨짐.

728x90