728x90
반응형
In [2]:
import pandas as pd
In [3]:
"""
<다중회귀모델 (Multiple Regression)>
- 여러 개의 특성을 사용한 회귀 모델
- 특성이 많을 수록복잡도가 증가됨(훈련 시간이 오래걸림, 시스템 성능에 따라 빠를 수도 있음)
- 다중회귀모델 공식
y = a*x1 + b*x2 + c* x3 + ...+ y절편
"""
# 데이터 2차원의 리스트 또는 배열 형태로 만들기- 랜덤 나누기- 훈련
Out[3]:
'\n<다중회귀모델 (Multiple Regression)>\n - 여러 개의 특성을 사용한 회귀 모델\n - 특성이 많을 수록복잡도가 증가됨(훈련 시간이 오래걸림, 시스템 성능에 따라 빠를 수도 있음)\n - 다중회귀모델 공식\n y = a*x1 + b*x2 + c* x3 + ...+ y절편\n\n \n\n'
In [4]:
### 데이터 불러들이기
# 사용할 데이터 프레임 변수 : df
In [5]:
df= pd.read_csv("./data/03_농어의_길이_높이_두께_데이터.csv")
In [7]:
df.columns = ['길이', '높이', '두께']
In [11]:
df.info()
df.describe()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 56 entries, 0 to 55 Data columns (total 3 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 길이 56 non-null float64 1 높이 56 non-null float64 2 두께 56 non-null float64 dtypes: float64(3) memory usage: 1.4 KB
Out[11]:
길이 | 높이 | 두께 | |
---|---|---|---|
count | 56.000000 | 56.000000 | 56.000000 |
mean | 27.892857 | 7.862143 | 4.745536 |
std | 9.021668 | 2.878343 | 1.775006 |
min | 8.400000 | 2.110000 | 1.410000 |
25% | 21.825000 | 5.690000 | 3.520000 |
50% | 25.300000 | 6.920000 | 4.155000 |
75% | 36.625000 | 10.850000 | 6.450000 |
max | 44.000000 | 12.800000 | 8.140000 |
In [14]:
"""
<농어의 길이 , 두께, 높이 값을 이용해서 --> 무게 예측하기>
-독립변수 : 길이, 두께, 높이
-종속변수 : 무게
-2차원의 리스트 또는 배열 형태로 만들어야 합니다.
"""
perch_data = df.to_numpy()
# numpy_array = np.array(my_list)
perch_data.shape
Out[14]:
(56, 3)
In [25]:
perch_data[,:]
Out[25]:
array([8.4 , 2.11, 1.41])
In [16]:
""" 종속변수 생성하기 """
import numpy as np
#### 농어의 무게
perch_weight = np.array(
[5.9, 32.0, 40.0, 51.5, 70.0, 100.0, 78.0, 80.0, 85.0, 85.0,
110.0, 115.0, 125.0, 130.0, 120.0, 120.0, 130.0, 135.0, 110.0,
130.0, 150.0, 145.0, 150.0, 170.0, 225.0, 145.0, 188.0, 180.0,
197.0, 218.0, 300.0, 260.0, 265.0, 250.0, 250.0, 300.0, 320.0,
514.0, 556.0, 840.0, 685.0, 700.0, 700.0, 690.0, 900.0, 650.0,
820.0, 850.0, 900.0, 1015.0, 820.0, 1100.0, 1000.0, 1100.0,
1000.0, 1000.0]
)
perch_weight.shape
Out[16]:
(56,)
In [17]:
""" 훈련 및 테스트 데이터로 분류하기
-분류기준 : 테스트 데이터를 30%
"""
### 훈련 : 테스트 = 75 : 25로 구분
### 사용 변수 : train_input, train_target, test_input, test_target
from sklearn.model_selection import train_test_split
In [26]:
train_input, test_input, train_target, test_target=train_test_split(perch_data, perch_weight,
test_size=0.3, random_state=42,
)
print(f"{train_input.shape}, {train_target.shape},{test_input.shape},{test_target.shape}")
(39, 3), (39,),(17, 3),(17,)
In [31]:
### 모델 생성하기
### 모델 생성하기
# - 선형, 다항, 다중 회귀모델은 하나의 모델(클래스) 사용
# - 직선 , 곡선에 대한 구분은 독립변수의 갯수로 모델이 알아서 구분해 줍니다.
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr
Out[31]:
LinearRegression()In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
LinearRegression()
In [32]:
### 모델 훈련시키기
lr.fit(train_input, train_target)
Out[32]:
LinearRegression()In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
LinearRegression()
In [40]:
## 훈련 정확도 및 검증(테스트) 정확도 확인하기
train_r=lr.score(train_input, train_target)
test_r = lr.score(test_input, test_target)
train_r, test_r
Out[40]:
(0.9537065271284176, 0.8863420836347778)
In [34]:
""" 과적합 여부 판단하기
- 훈련과 검증(테스트) 결정게수의 결과로 볼때 과소적합은 발생하지 않았으며, 또한 0.07~0.08정도로 과대적합 또한 일어나지 않은 일반화된 모델로 볼 수 있음
- 다만 검증(테스트)정확도가 0.8개에서 0.9대로 올릴 수 없을 지 고민해 봅니다.
-특성공학을 적용하여 특성 늘리는 방법으로 집중도를 강화하는 방식을 사용해서 성능 향상이 되는지 확인
<특성을 생성하는 라이브러리>
- 사용 패키지 : sklearn.preprocessing
- 사용 클래스 : PolynomialFeatures(변환기라고 보통 칭합니다.)
- 사용함수 : fit(훈련 독립변수에서 생성할 특성의 패턴 찾기),
transform(찾은 패턴으로 특성 생성하기)
- 종속 변수는 사용되지 않습니다.
"""
In [52]:
### 테스트 데이터로 예측하기
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}")
test_pred = lr.predict(test_input)
test_pred
게수 : [ 9.5608352 68.50895493 38.06233231] 절편=-607.0822414406532 a=9.560835197814683 , b=68.50895492521362, c=-607.0822414406532
Out[52]:
array([-328.54944233, 48.99648009, 328.530777 , 168.01071374, 147.28466932, 790.89418753, 383.33837613, 247.89949679, 814.06695812, 123.2000108 , 981.8543067 , -37.63667416, 356.2229673 , 419.56345249, 48.15564696, 140.06819759, 46.70641917])
In [53]:
### 패키지 정의하기
from sklearn.preprocessing import PolynomialFeatures
In [55]:
### 클래스 생성하기
# - 특성을 생성시킬때 y 절편 값도 생성을 함께 시킵니다.
# - 특성만 있으면 되기 때문에 y 절편은 생성에서 제외 시키기 위해서
# ---> include_bias = False 로 설정 합니다
poly = PolynomialFeatures(include_bias=False)
poly
Out[55]:
PolynomialFeatures(include_bias=False)In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
PolynomialFeatures(include_bias=False)
In [56]:
### sample 데이터로 어ㄸ너 특성들이 만들어지는지 확인 먼저
temp_data = [[2,3,4]]
temp_data
Out[56]:
[[2, 3, 4]]
In [ ]:
### 평균절태오차(MAE) 확인하기
In [57]:
## 특성을 만들 패턴 찾기
poly.fit(temp_data)
Out[57]:
PolynomialFeatures(include_bias=False)In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
PolynomialFeatures(include_bias=False)
In [59]:
### 찾은 패턴으로 특성 생성하기
poly.transform(temp_data)
Out[59]:
array([[ 2., 3., 4., 4., 6., 8., 9., 12., 16.]])
실제 독립변수를 이용해서 특성 생성하기¶
In [109]:
# 성능에 영향을 미치는 매개변수 - 하이퍼파라메터
### 클래스 생성하기
# - degree=2 : 차원을 의미하며 2는 제곱증을 의미함
# : 3을 넣으면 2의 제곱, 3의 제곱을 수행
# : 기본값은 2 (생략하면 2의 제곱증이 적용됨)
ploy = PolynomialFeatures(degree=2, include_bias=False)
In [110]:
## 패턴 찾기
# - 훈련 독립변수 사용
poly.fit(train_input)
Out[110]:
PolynomialFeatures(include_bias=False)In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
PolynomialFeatures(include_bias=False)
In [111]:
### 특성 생성하기
## 훈련 독립변수에 특성 추가하기
train_poly = poly.transform(train_input)
### 테스트 독립변수에 특성 추가하기
test_poly = poly.transform(test_input)
train_poly.shape, test_poly.shape
Out[111]:
((39, 9), (17, 9))
In [112]:
### 사용된 패턴 확인하기
poly.get_feature_names_out()
Out[112]:
array(['x0', 'x1', 'x2', 'x0^2', 'x0 x1', 'x0 x2', 'x1^2', 'x1 x2', 'x2^2'], dtype=object)
In [113]:
# 모델 생성
lr = LinearRegression()
# 모델 훈련시키기
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
Out[113]:
(0.9898271546307028, 0.9713771600629805)
In [114]:
# 예측하기
test_pred = lr.predict(test_poly)
test_pred
Out[114]:
array([ 22.92877835, 31.10777487, 250.98436388, 111.59208216, 128.85787135, 779.24558158, 304.72417951, 176.31471164, 916.8961555 , 98.7200446 , 1180.23592257, 34.86148711, 288.45880297, 272.52503942, 85.71366627, 120.24574045, 59.93605383])
In [115]:
## 모델 평가하기 mae
from sklearn.metrics import mean_absolute_error
mae = mean_absolute_error(test_target, test_pred)
train_r2, test_r2, mae
Out[115]:
(0.9898271546307028, 0.9713771600629805, 30.21688959033357)
In [107]:
"""
해석
-특성 공학을 적용하지 않은 모델은 검증(테스트)정확도가 다소 낮았으며 오차가 50g정도 였으나
-특성공학을 적용해서 특성을 추가하여 훈련 집중도를높였을 때는
-> 훈련 및 검증(테스트) 정확도 모두 높아졌으며, 과적합이 발생하지 않는 일반화 모델로
-> 오차는 30g정도의 매우 우수한 모델로 판단됨
-> 이 모델을 사용하려면 독립변수의 특성 길이, 높이, 두께 3개의 특성을 사용해야 하려면 degree 2를 적용한 특성을 사용해야 함
갭이 작으면서 오차가 적은것을 더 선호
"""
Out[107]:
'\n해석\n-특성 공학을 적용하지 않은 모델은 검증(테스트)정확도가 다소 낮았으며 오차가 50g정도 였으나\n-특성공학을 적용해서 특성을 추가하여 훈련 집중도를높였을 때는 \n-> 훈련 및 검증(테스트) 정확도 모두 높아졌으며, 과적합이 발생하지 않는 일반화 모델로\n -> 오차는 30g정도의 매우 우수한 모델로 판단됨\n -> 이 모델을 사용하려면 독립변수의 특성 길이, 높이, 두께 3개의 특성을 사용해야 하려면 degree 2를 적용한 특성을 사용해야 함\n\n갭이 작으면서 오차가 적은것\n'
규제¶
In [116]:
"""
<규제>
- 과대 또는 과소 적합 중에 주로 과대적합이 발생 했을 때 사용됩니다.
- 훈련의 정확도가 다소 낮아지는 경향이 있으나, 검증(테스트) 정확도를 높이는 효과가 있음
- 훈련 모델을 일반화 하는데 주로 사용되는 방법임
- 규제 개념을 적용한 형상된 모델 : 릿지(Ridge)와 라쏘(lasso)가 있습니다.
<규제 순서>
1. 정규화(단위(스케일)를 표준화 시키는 방식)
2. 규제가 적용된 모젤 훈련 / 검증
"""
Out[116]:
' \n<규제>\n- 과대 또는 과소 적합 중에 주로 과대적합이 발생 했을 때 사용됩니다. \n- 훈련의 정확도가 다소 낮아지는 경향이 있으나, 검증(테스트) 정확도를 높이는 효과가 있음\n- 훈련 모델을 일반화 하는데 주로 사용되는 방법임\n- 규제 개념을 적용한 형상된 모델 : 릿지(Ridge)와 라쏘(lasso)가 있습니다.\n\n<규제 순서>\n1. 정규화(단위(스케일)를 표준화 시키는 방식)\n2. 규제가 적용된 모젤 훈련 / 검증\n'
훈련 및 테스트 독립변수 정규화하기¶
In [117]:
### 현재 사용되는 독립변수
train_poly.shape, test_poly.shape
Out[117]:
((39, 9), (17, 9))
In [118]:
""" 정규화를 위한 라이브러리 """
from sklearn.preprocessing import StandardScaler
In [119]:
"""
<정규화 순서>
1. 정규화 클래스 생성
1.fit() : 정규화 패턴 찾기
2.transform() : 찾은 패턴으로 정규화 데이터로 변환 (훈련 및 테스트 독립변수 변환)
"""
Out[119]:
'\n<정규화 순서>\n1. 정규화 클래스 생성\n1.fit() : 정규화 패턴 찾기\n2.transform() : 찾은 패턴으로 정규화 데이터로 변환 (훈련 및 테스트 독립변수 변환)\n\n'
In [120]:
""" 정규화 클래스 생성하기"""
ss = StandardScaler()
ss
Out[120]:
StandardScaler()In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
StandardScaler()
In [121]:
""" 정규화 패턴 찾기"""
ss.fit(train_poly)
Out[121]:
StandardScaler()In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
StandardScaler()
In [126]:
""" 찾은 패턴으로 훈련 및 테스트 독립변수 변환 생성하기"""
train_scaled = ss.transform(train_poly)
test_scaled = ss.transform(test_poly)
train_scaled.shape , test_scaled.shape
Out[126]:
((39, 9), (17, 9))
In [124]:
train_scaled
Out[124]:
array([[-1.33950837, -1.26813468, -1.14309977, -1.1763046 , -1.14308546, -1.10896682, -1.10842448, -1.07610233, -1.03444092], [ 0.79230245, 0.82048447, 1.02545355, 0.70987177, 0.72626939, 0.86669407, 0.72827059, 0.8616057 , 0.982992 ], [-0.46844589, -0.62628328, -0.72080254, -0.56436642, -0.64102903, -0.68755357, -0.69883931, -0.73527803, -0.76576431], [ 1.25075639, 1.27845412, 1.23660217, 1.28717194, 1.31561362, 1.29755826, 1.3254775 , 1.30617758, 1.26404722], [ 1.13614291, 1.45192747, 1.37356343, 1.13714986, 1.36245671, 1.32077292, 1.56995803, 1.52454747, 1.45438267], [ 1.59459685, 1.27845412, 1.33361639, 1.76002635, 1.53708181, 1.59305516, 1.3254775 , 1.37391426, 1.3982155 ], [-0.81228634, -0.90384064, -0.81211005, -0.83212735, -0.86948964, -0.83777825, -0.89281795, -0.86374427, -0.8289462 ], [-1.04151331, -1.09813079, -1.24011399, -0.99164451, -1.00859567, -1.0651788 , -1.01331593, -1.05683106, -1.08767934], [-0.81228634, -0.74077569, -0.81211005, -0.83212735, -0.80550582, -0.83777825, -0.78196871, -0.80848882, -0.8289462 ], [-0.58305937, -0.33137858, -0.69797566, -0.65741809, -0.55464468, -0.71561752, -0.46458562, -0.62106652, -0.74953007], [-0.18191217, -0.37301219, -0.34415907, -0.31512087, -0.41717846, -0.40536642, -0.49941506, -0.48750358, -0.47545668], [ 1.59459685, 1.47968321, 1.41351046, 1.76002635, 1.6914103 , 1.65516728, 1.61000626, 1.57343371, 1.51108732], [ 1.25075639, 1.20906478, 1.29937608, 1.28717194, 1.2661097 , 1.34295583, 1.23049541, 1.30177892, 1.35050001], [-0.58305937, -0.64710008, -0.64090847, -0.65741809, -0.68979039, -0.69085521, -0.71427892, -0.71282048, -0.70817665], [-0.92689983, -0.80669556, -0.93195115, -0.91378494, -0.86800453, -0.91959705, -0.82784795, -0.87234787, -0.90761095], [-0.18191217, -0.41464579, -0.34415907, -0.31512087, -0.43759883, -0.40536642, -0.53366642, -0.50489782, -0.47545668], [ 1.25075639, 1.43458014, 1.43633734, 1.28717194, 1.42699746, 1.44200507, 1.54505835, 1.55775618, 1.5437313 ], [ 0.4255393 , 0.61925538, 0.61456977, 0.29178492, 0.3984544 , 0.40050232, 0.48798116, 0.48984716, 0.47911641], [-0.29652566, -0.37301219, -0.45829345, -0.41766761, -0.46154636, -0.50482836, -0.49941506, -0.53539786, -0.56847446], [ 0.84960919, 0.91416008, 1.09393418, 0.77871102, 0.82007933, 0.94665569, 0.84473606, 0.9659912 , 1.07249969], [-1.76357827, -1.63589818, -1.67953138, -1.39482411, -1.33803811, -1.35407241, -1.28119072, -1.29101208, -1.28912099], [-0.7320569 , -0.79628716, -0.74933614, -0.77270722, -0.80151457, -0.78659249, -0.82070021, -0.80543948, -0.7858103 ], [-1.61458074, -1.53528364, -1.43414245, -1.3239719 , -1.28272366, -1.26069787, -1.23840662, -1.21677927, -1.184646 ], [ 0.90691594, 0.8066066 , 0.81430494, 0.84849977, 0.78276575, 0.79498655, 0.71126535, 0.72198082, 0.71695346], [ 0.67768897, 1.12579757, 1.63036579, 0.5750418 , 0.85120492, 1.17993729, 1.11863654, 1.46648316, 1.82829113], [-0.04437599, -0.22729457, -0.17295749, -0.18705139, -0.28934695, -0.26279742, -0.3749829 , -0.35057401, -0.32770319], [-0.64036611, -0.68179475, -0.69797566, -0.70251967, -0.72407186, -0.73480831, -0.73969044, -0.74655356, -0.74953007], [ 1.13614291, 1.00436622, 0.60315633, 1.13714986, 1.0511389 , 0.77754975, 0.95965395, 0.70558521, 0.46593158], [-0.92689983, -0.88649331, -0.78928317, -0.91378494, -0.89789252, -0.8654295 , -0.88144699, -0.8502644 , -0.81341399], [-0.69767286, -1.04955826, -0.74933614, -0.74667174, -0.89436537, -0.7753566 , -0.98437169, -0.89394372, -0.7858103 ], [-0.81228634, -0.94547425, -0.53818752, -0.83212735, -0.88582594, -0.72882409, -0.91969876, -0.78935782, -0.63097627], [ 1.70921033, 1.47274427, 1.51623141, 1.92524054, 1.76337663, 1.81343971, 1.59997012, 1.64356511, 1.65936733], [-0.7549796 , -0.50485193, -0.75504286, -0.7898743 , -0.69192525, -0.79640456, -0.60589456, -0.70586679, -0.78978659], [-1.1561268 , -0.90384064, -1.08032585, -1.06570604, -0.97419045, -1.03886884, -0.89281795, -0.95227856, -0.99830329], [ 0.90691594, 0.90028221, 0.75153103, 0.84849977, 0.84458377, 0.7529938 , 0.82729725, 0.73959884, 0.64075675], [-0.81228634, -0.74077569, -0.87488396, -0.83212735, -0.80550582, -0.86274691, -0.78196871, -0.83093635, -0.87075485], [-0.39967779, -0.58464967, -0.40122626, -0.50671237, -0.59810912, -0.51685872, -0.66752653, -0.59783411, -0.52251403], [ 1.47998336, 1.58029775, 1.0996409 , 1.59861019, 1.68936826, 1.34027324, 1.75733489, 1.41017231, 1.08002996], [ 0.62038222, 0.69905313, 0.82571838, 0.50905107, 0.55306753, 0.63779747, 0.58165253, 0.66288114, 0.73095 ]])
릿지(Ridge) 모델¶
In [127]:
### 모델 생성하기
from sklearn.linear_model import Ridge
ridge = Ridge()
ridge
Out[127]:
Ridge()In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
Ridge()
In [128]:
""" 모델 훈련시키기"""
ridge.fit(train_scaled, train_target)
Out[128]:
Ridge()In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
Ridge()
In [129]:
""" 훈련 및 검증(테스트) 정확도 확인하기"""
train_r2 = ridge.score(train_scaled, train_target)
test_r2= ridge.score(test_scaled, test_target)
train_r2, test_r2
Out[129]:
(0.9849041294689239, 0.9845173591615219)
In [130]:
"""예측하기"""
test_pred = ridge.predict(test_scaled)
In [131]:
""" 평가하기"""
mae = mean_absolute_error(test_target,test_pred)
train_r2, test_r2, mae
Out[131]:
(0.9849041294689239, 0.9845173591615219, 29.253911474018174)
In [132]:
"""
- 과적합 여부를 확인한 결과, 과소 적합은 발생하지 않았으며,
- 기존 특성공학을 적용한 우수한 모델보다는 훈련정확도는 0.005정도 낮아졌지만 검증 (테스트) 정확도는 0.013정도 높아 졌음
- 또한 평균 절대 오차 (MAE) 도 1g 낮아졌음
- 따라서 일반화 되고 ,오차가 적은 Ridge(릿지) 모델은 매우 우수한 모델로 판단됨
"""
Out[132]:
'\n- 과적합 여부를 확인한 결과, 과소 적합은 발생하지 않았으며, \n- 기존 특성공학을 적용한 우수한 모델보다는 훈련정확도는 0.005정도 낮아졌지만 검증 (테스트) 정확도는 0.013정도 높아 졌음\n- 또한 평균 절대 오차 (MAE) 도 1g 낮아졌음\n- 따라서 일반화 되고 ,오차가 적은 Ridge(릿지) 모델은 매우 우수한 모델로 판단됨\n'
라쏘 (Lasso) 모델¶
In [133]:
### 사용할 패키지
from sklearn.linear_model import Lasso
# 크랠스가 없어서 분류는 불가
In [134]:
### 모델 생성하기
#훈련하고 검증하고 예측하고 평가
lasso = Lasso()
lasso
Out[134]:
Lasso()In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
Lasso()
In [137]:
# 훈련
lasso.fit(train_scaled,train_target)
Out[137]:
Lasso()In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
Lasso()
In [139]:
# 훈련 및 검증 (테스트) 정확도 확인하기
train_r2 = lasso.score(train_scaled, train_target)
test_r2 = lasso.score(test_scaled, test_target)
train_r2, test_r2
Out[139]:
(0.9861305259897015, 0.98632202810554)
In [141]:
### 예측하기
test_pred = lasso.predict(test_scaled)
### 평가하기
mae = mean_absolute_error(test_target, test_pred)
train_r2, test_r2, mae
Out[141]:
(0.9861305259897015, 0.98632202810554, 26.878384450173357)
In [142]:
"""
- 0.0002 정도의 과소 적합이 있는 것으로 보임
- 오차 값도 3g 정도 작아 졌음
- 과소접합이 미세한 차이이기 때문에 릿지 모델과 비교 했을 때 나쁜 모델은 아니지만,
사용하기에는 미흡한 부분으로 적용됨
"""
Out[142]:
'\n- 0.0002 정도의 과소 적합이 있는 것으로 보임\n- 오차 값도 3g 정도 작아 졌음\n- 과소접합이 미세한 차이이기 때문에 릿지 모델과 비교 했을 때 나쁜 모델은 아니지만,\n 사용하기에는 미흡한 부분으로 적용됨\n\n'
하이퍼파라메터 튜닝하기 (규제적용)¶
In [150]:
""" 릿리(Ridge) 모델 규제 튜닝하기
-alpha :규제강도 값
-값의 범위 0.001 ~ 100 사이의 값
- 값이 작을 수록 훈련 정확도는 낮아지면서, 과적합에 도움을 주게됨
- 값이 커질 수록 훈련정확도는 높아짐, 과적합에는 도움이 되지 않을 수도 있음
- 기본값은 =1
"""
ridge= Ridge(alpha=0.1)
ridge.fit(train_scaled, train_target)
ridge.score(train_scaled ,train_target), ridge.score(test_scaled, test_target)
# 1= (0.9849041294689239, 0.9845173591615219)
# 0.1 = (0.9887392788057467, 0.9851828913418638)
# 0.11= (0.9882460873556949, 0.9869469397610339)
# 0.001=(0.9891665643761299, 0.9844479791505587)
Out[150]:
(0.9882780161390031, 0.9868237771849514)
In [152]:
lasso = Lasso(alpha=0.1)
lasso.fit(train_scaled, train_target)
lasso.score(train_scaled ,train_target), lasso.score(test_scaled, test_target)
C:\Users\user\anaconda3\Lib\site-packages\sklearn\linear_model\_coordinate_descent.py:628: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 2.443e+03, tolerance: 4.887e+02 model = cd_fast.enet_coordinate_descent(
Out[152]:
(0.9883448062768178, 0.9857016019582314)
In [ ]:
# 라쏘보다 릿지가 낫다
728x90
반응형
'파이썬' 카테고리의 다른 글
시계열_데이터_조작법 (2) | 2024.01.15 |
---|---|
시계열 분석01 (1) | 2024.01.15 |
머신러닝 기초 2 (3) | 2023.12.20 |
생선분류로 알아보는 머신러닝 (1) | 2023.12.20 |
머신러닝 기초 (3) | 2023.12.19 |