일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- keras
- pythone
- tensorflow
- Deep Learning
- 딥러닝
- 해석
- SQL예제
- 훈련
- 예측
- 머신러닝
- python
- 데이터베이스
- 정확도
- sklearn
- 데이터 수집
- MariaDB
- 선형회기모델
- 알고리즘기초
- Database
- 파이썬
- 시각화
- pandas
- 크롤링(crawling)
- 데이터 분석
- 데이터
- HeidiSQL
- python기초
- 회귀모델
- 데이터전처리
- 데이터 가공
- Today
- Total
코딩헤딩
[ML(머신러닝)] KNN 회귀모델 -5 <다항회귀모델(곡선)> 본문
<다항회귀모델>
- 데이터의 분포가 선형이면서 곡선을 띄는 경우에 사용됨
- 곡선(포물선)의 방정식이 적용되어 있음
- y = (a * x^2) + (b * x) + c
- 독립변수는 2개가 사용됨 : x와 x^2 값
* 훈련 및 테스트데이터의 독립변수에 x^2 값 추가하기
# - 훈련독립변수
train_poly = np.column_stack((train_input**2, train_input))
# - 테스트 독립변수
test_poly = np.column_stack((test_input**2, test_input))
train_poly.shape, test_poly.shape
결과 : ((42, 2), (14, 2))
* 모델 생성하기
# - 선형, 다항, 다중회귀모델은 하나의 모델(클래스) 사용
lr = LinearRegression()
lr
- 직선, 곡선에 대한 구분은 독립변수의 갯수로 모델이 알아서 구분해 준다.
* 훈련시키기
lr.fit(train_poly, train_target)
- 훈련 및 테스트 검증하고, 과적합 여부 확인하기
- 정확도 확인하기
train_r2 = lr.score(train_poly, train_target)
test_r2 = lr.score(test_poly, test_target)
train_r2, test_r2
결과 : (0.9706807451768623, 0.9775935108325121)
- 훈련 < 검증 => 과소적합
* 임의값 50으로 예측하기
pred = lr.predict([[50**2, 50]])
pred
결과 : array([1573.98423528])
<추세선 그리기>
- 추세선을 그리기 위해서는 곡선의 방정식에 사용할 계수 a, b와 절편 c를 알아야 한다.
print(f"계수 : {lr.coef_} / 절편 : {lr.intercept_}")
a = lr.coef_[0]
b = lr.coef_[1]
c = lr.intercept_
print(f"a : {a} / b: {b} / c : {c}")
결과 :
계수 : [ 1.01433211 -21.55792498] / 절편 : 116.05021078278259
a : 1.0143321093767304 / b: -21.557924978837356 / c : 116.05021078278259
* 추세선 그리기
plt.scatter(train_input, train_target)
plt.scatter(50, pred[0], marker="^")
### 추세선
# - 추세선이 사용할 x축 값 지정(0~50까지의 순차적인 값 사용)
point = np.arange(0, 51)
plt.plot(point, a*point**2 + b*point + c)
plt.grid()
plt.show()
<해석>
- 종속변수의 값은 음수가 나오지 않지만 선형 회귀모델의 경우에는 음의 절편 값이 나타나는 모델이었으나, 다항회귀모델의 경우에는 이를 해소할 수 있었음.
단, 길이(x)가 10 이하의 독립변수는 사용하며 안됨
- 다항회귀모델의 훈련 및 테스트 결정계수의 결과 미세한 과소적합을 보이고 있으나, 사용가능한 모델로 판단됨.
- 선형회귀모델에 비하여 독립변수들이 전체적으로 추세선에 가깝게 위치하고 있기에 오차가 적은 모델이라고 판단됨.
<과소 / 과대 적합을 해소하기 위한 방법>
- 데이터 양(row 데이터, 행)을 늘릴 수 있는지 확인
- 분석모델이 좀 더 집중해서 훈련할 수 있도록 -> 특성(독립변수)을 추가하는 방법 확인
--> 특성을 추가(늘리는)하는 방법은 "특성공학"개념을 적용
--> 특성을 늘려서 사용하는 모델로 다중회귀모델이 있음
--> 특성을 늘린다는 의미는 훈련의 복잡도를 증가시킨다고 표현하며, 복잡도가 증가되면 훈련의 집중력이 강해지게 됨
- 복잡도를 늘기는 방법으로는 규제 방법이 있음
--> 규제를 하는 하이퍼파라미터 속성을 이용하는 방식으로 릿지와 라쏘 회귀모델 방식이 있음
- 이외 다른 회귀모델을 사용하여 비교
-- 특성 => 컬럼, 필드, 퓨처 모두 같은 의미
-- 데이터 처리 분야에서는 컬럼 또는 필드
머신러닝에서는 특성
딥러닝에서는 퓨처라고 한다.
'머신러닝 | 딥러닝' 카테고리의 다른 글
[ML(머신러닝)] 다중회귀모델(Multiple Regression) 2 (1) | 2023.12.30 |
---|---|
[ML(머신러닝)] 다중회귀모델(Multiple Regression) (0) | 2023.12.29 |
[ML(머신러닝)] KNN 회귀모델 -4 <회귀모델> (1) | 2023.12.27 |
[ML(머신러닝)] KNN 회귀모델 -3 <하이퍼파라미터 튜닝> (0) | 2023.12.26 |
[ML(머신러닝)] KNN 회귀모델 -2 <절대평균오차(MAE)> (0) | 2023.12.24 |