๋ฐ์ํ
๋ค์ค ํ๊ท(Characteristic Engineering and Regulation)
๋ค์ค ํ๊ท
์ฌ๋ฌ๊ฐ์ ํน์ฑ์ ์ฌ์ฉํ ์ ํ ํ๊ท(Linear Regression)๋ฅผ ๋ค์ค ํ๊ท(Multiple Regression)์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
- 1๊ฐ์ ํน์ฑ์ ์ฌ์ฉํ์๋, ์ ํ ํ๊ท ๋ชจ๋ธ์ด ํ์ต ํ๋๊ฒ์ ์ง์ ์ ๋๋ค. 2๊ฐ์ ํน์ฑ์ ์ฌ์ฉํ๋ฉด ์ ํ ํ๊ท๋ ํ๋ฉด์ ํ์ตํฉ๋๋ค.
- ์ผ์ชฝ ๊ทธ๋ฆผ์ด 1๊ฐ์ ํน์ฑ์ ์ฌ์ฉํ ์ ํ ํ๊ท ๋ชจ๋ธ์ด ํ์ต ํ๋ ๋ชจ๋ธ, ์ค๋ฅธ์ชฝ ๊ทธ๋ฆผ์ด 2๊ฐ์ ํน์ฑ์ ์ฌ์ฉํ ์ ํ ํ๊ท ๋ชจ๋ธ์ ๋๋ค.
- ์ค๋ฅธ์ชฝ ๊ทธ๋ฆผ์ฒ๋ผ ํน์ฑ์ด 2๊ฐ๋ฉด Target๊ฐ๊ณผ ํจ๊ป 3์ฐจ์ ๊ณต๊ฐ์ ํ์ฑํ๊ณ ์ ํ ํ๊ท ๋ฐฉ์ ์์ ํ๋ฉด์ด ๋ฉ๋๋ค.
Target = a x ํน์ฑ1 + b x ํน์ฑ2 + ์ ํธ
- ๊ทธ๋ฌ๋ฉด ํน์ฑ์ด 3๊ฐ์ผ ๊ฒฝ์ฐ์๋? ์ฐ๋ฆฌ๋ 3์ฐจ์ ๊ณต๊ฐ์ ๊ทธ๋ฆฌ๊ฑฐ๋ ์์ํ ์ ์์ต๋๋ค. ๊ทธ๋ ์ง๋ง, ํน์ฑ์ด ๋ง์ ๊ณ ์ฐจ์์์๋ ์ ํํ๊ท๊ฐ ๋งค์ฐ ๋ณต์กํ ๋ชจ๋ธ์ ํํํ ์ ์์ต๋๋ค.
- ํ๋ฒ 3๊ฐ์ ํน์ฑ์ ๊ฐ๊ฐ ์ ๊ณฑํด์ ์ถ๊ฐํ๊ณ , ๊ฐ ํน์ฑ์ ๊ณฑํด์ ์๋ก์ด ํน์ฑ์ ๋ง๋ค๊ฒ ์ต๋๋ค. ์ฆ, ๋์ด ๊ธธ์ด x ๋์ด ๊ธธ์ด ๋ฅผ ์๋ก์ด ํน์ฑ์ผ๋ก ๋ง๋๋ ๊ฒ๋๋ค. ์ด๋ ๊ฒ ๊ธฐ์กด์ ํน์ฑ์ ์ฌ์ฉํด์ ์๋ก์ด ํน์ฑ์ ๋ฝ์๋ด๋ ์์ ์ ํน์ฑ๊ณตํ(Feature Engineering)์ด๋ผ๊ณ ํฉ๋๋ค.
๋ฐ์ดํฐ ์ค๋น
- ์ด์ ๊ณผ ๋ฌ๋ฆฌ ๋์ด์ ํน์ฑ์ด 3๊ฐ๊ฐ ๋์๊ธฐ ๋๋ฌธ์, ์ผ์ผ์ด ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํด์ ๋ถ์ด๋๊ฑด ๋ฒ๊ฑฐ๋กญ์ต๋๋ค. ํ์ง๋ง, Pandas๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋จํฉ๋๋ค.
- Pandas๋ ์ ์๋ ค์ง ๋ฐ์ดํฐ ๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ค ํ๋์ด๋ฉฐ, ๋ฐ์ดํฐํ๋ ์์ ํ๋ค์ค์ ํต์ฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค.
- Numpy ๋ฐฐ์ด๊ณผ ๋ค์ฐจ์ ๋ฐฐ์ด์ ๋ค๋ฃฐ์ ์์ง๋ง, ๋ ๋ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐํ๋ ์์ Numpy ๋ฐฐ์ด๋ก ์ฝ๊ฒ ๋ด๊ฟ์ ์์ต๋๋ค. ํ๋ฒ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ ๋ณด๊ฒ ์ต๋๋ค.
# Pandas๋ก ๋ฐ์ดํฐ ์ค๋น. csv ํ์ผ๋ก ๋ฐ์์ pandas dataframe -> numpy ๋ฐฐ์ด๋ก ๋ณํ
import pandas as pd
df = pd.read_csv('https://bit.ly/perch_csv_data')
perch_full = df.to_numpy()
print(perch_full[:5]) # perch_full ๋ฐ์ดํฐ๊ฐ ๋๋ฌด ๋ง์์ 5๊ฐ๋ง ๋ถ๋ฌ์์ต๋๋ค. perch_full๋ก ํ๋ฉด ๋ค ๋ณผ์ ์์ต๋๋ค.
[[ 8.4 2.11 1.41]
[13.7 3.53 2. ]
[15. 3.82 2.43]
[16.2 4.59 2.63]
[17.4 4.59 2.94]]
- Target ๋ฐ์ดํฐ๋ ์ด์ ๊ณผ ๋์ผํ ๋ฐฉ์์ผ๋ก ๊ฐ์ ธ์ค๊ณ , perch_full, perch_weight๋ฅผ Training_set์ Test_set๋ก ๋๋๋๋ค.
- ์ด ๋ฐ์ดํฐ๋ค์ ์ฌ์ฉํด์ ์๋ก์ด ํน์ฑ์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
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])
# Scikit-learn ํ๋ จ์ธํธ๋ 2์ฐจ์ ๋ฐฐ์ด์ด์ฌ์ผ ํจ์ผ๋ก, Numpy์ reshape method๋ฅผ ์ฌ์ฉํด์ 2์ฐจ์์ผ๋ก ๋ด๊ฟ์ค
# perch_full & perch_weight๋ฅผ ํ๋ จ & ํ
์คํธ ์ธํธ๋ก ๋๋๋ค.
from sklearn.model_selection import train_test_split
train_input, test_input, train_target, test_target = train_test_split(perch_full, perch_weight, random_state=42)
Scikit-learn์ ๋ณํ๊ธฐ
Scikit-learn์ ํน์ฑ์ ๋ง๋ค๊ฑฐ๋ ์ ์ฒ๋ฆฌ ํ๊ธฐ ์ํ์ฌ ๋ค์ํ ํด๋์ค๋ฅผ ์ ๊ณตํ๋๋ฐ, ์ด๋ฐ ํด๋์ค๋ฅผ ๋ณํ๊ธฐ (Transformer)๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
๋ณํ๊ธฐ Class๋ fit(), transform() Method๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ถ๊ฐ๋ก LinearRegression ์์๋ ์ถ์ ๊ธฐ, Transformer์์๋ ๋ณํ๊ธฐ ๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
- ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ๋ณํ๊ธฐ๋ PolynomialFeature Class์ ๋๋ค. ํ๋ฒ ์ฌ์ฉํด ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ํด๋์ค๋ sklearn.preprocessing ํจํค์ง์ ํฌํจ๋์ด ์์ต๋๋ค.
- ๊ทธ๋ฆฌ๊ณ PolynomialFeatures Class๊ฐ ํ๋๊ฑด? ๋ณ๊ฑฐ ์์ด์. ํ๋๊ฒ ํน์ฑ ๋ช๊ฐ์ธ์ง, 2 x 3์ ํด์ ์ด๋ค ์กฐํฉ์ผ๋ก ๋ง๋๋์ง ํ์ ํ๋ ์ ๋์ ๋๋ค.
from sklearn.preprocessing import PolynomialFeatures
# PolynomialFeatures(๋ณํ๊ธฐ) - degree๋ผ๋ ๋งค๊ฐ๋ณ์: ๊ธฐ๋ณธ๊ฐ์ด 2(์ ๊ณฑํญ์ ๋ง๋ค์ด์ฃผ๋ ํ์)
# degree = 2 (3์ด๋ฉด 3์ ๊ณฑ(์ ๊ณฑํญ์ด 3)์ผ๋ก ํ๋ค.)
poly = PolynomialFeatures()
poly.fit([[2,3]])
# 1(bias), 2, 3, 2**2, 2*3, 3**2
print(poly.transform([[2,3]])) # 2,3 ์ด๋ผ๋ ๊ฐ์์ sample data
# 2,3:์๋ ์๋ ํน์ฑ ๊ทธ๋๋ก. 2-4, 3-9, 2*3-6. 1์ ์ ํธ์ ์ํ ํน์ฑ44
[[1. 2. 3. 4. 6. 9.]]
- fit() Method๋ ์๋กญ๊ฒ ๋ง๋ค ํน์ฑ ์กฐํฉ์ ์ฐพ๊ณ , Transform() Method๋ ์ค์ ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐํํฉ๋๋ค.
- ์ฌ๊ธฐ์๋ 2๊ฐ์ ํน์ฑ(์์)๋ฅผ ๊ฐ์ง ์ํ [2,3]์ด ํน์ฑ์ ๊ฐ์ง ์ํ [1, 2, 3, 4, 6, 9]๋ก ๋ด๋์์ต๋๋ค.
- PolynomialFeature ํด๋์ค๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ ํน์ฑ์ ์ ๊ณฑํ ํญ์ ์ถ๊ฐํฉ๋๋ค. ๊ด๋ จ ์์ ์๋์ ์ฒจ๋ถ ํ๊ฒ ์ต๋๋ค.
๋ฌด๊ฒ = a x ๊ธธ์ด + b x ๋์ด + c x ๋๊ป + d x 1
- ๊ด๋ จ ์์ ๋ณด๋ฉด, ํน์ฑ์ (๊ธธ์ด, ๋์ด, ๋๊ป, 1)์ด ๋ฉ๋๋ค. ๊ทผ๋ฐ 1์ ๋ฌด์์ผ๊น์? 1์, ์ ํ ๋ฐฉ์ ์์ ์ ํธ์ ํญ์ ๊ฐ์ด 1์ธ ํน์ฑ๊ณผ ๊ณฑํด์ง๋ ๊ณ์ ๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
- ๊ทผ๋ฐ, Scikit-learn์ ์ ํ๋ชจ๋ธ์ ์๋์ผ๋ก ์ ํธ์ ์ถ๊ฐํจ์ผ๋ก ๊ตณ์ด ์ด๋ ๊ฒ ํน์ฑ์ ๋ง๋ค ํ์๊ฐ ์์ผ๋ฏ๋ก, include_bias=False๋ก ์ง์ ํ์ฌ ๋ค์ ํน์ฑ์ ๋ฐํํ๊ฒ ์ต๋๋ค. ๊ฒฐ๊ณผ๋ ์ ํธ์ ์ํ ํญ์ด ์ ๊ฑฐ๋๊ณ , ํน์ฑ์ ์ ๊ณฑ๊ณผ ํน์ฑ๋ผ๋ฆฌ ๊ณฑํ ํญ๋ง ์ถ๊ฐ๋์์ต๋๋ค.
# include_bias=False๋ก ์ง์ ํ์ฌ ๋ค์ ํน์ฑ์ ๋ณํ
poly = PolynomialFeatures(include_bias=False)
poly.fit([[2, 3]])
print(poly.transform([[2, 3]]))
[[2. 3. 4. 6. 9.]]
- ํ๋ฒ ์ด ๋ฐฉ์์ผ๋ก train_input์ ์ ์ฉ์์ผ ๋ณด๊ฒ ์ต๋๋ค. train_input์ ๋ณํํ ๋ฐ์ดํฐ๋ฅผ train_polu์ ์ ์ฅํ๊ณ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
poly = PolynomialFeatures(include_bias=False)
poly.fit(train_input) # fit(ํ๋ จ)
train_poly = poly.transform(train_input) #train_poly(numpy ๋ฐฐ์ด)
print(train_poly.shape)
(42, 9)
- PolynomialFeatures ํด๋์ค๋ 9๊ฐ์ ํน์ฑ์ด ์ด๋ป๊ฒ ๋ง๋ค์ด์ก๋์ง ํ์ธํ ์ ์๊ฒ ํด์ค๋๋ค.
- get_feature_names_out() Method ๋ฅผ ์ฌ์ฉํ๋ฉด 9๊ฐ์ ํน์ฑ์ด ๊ฐ๊ฐ ์ด๋ค ์กฐํฉ์ผ๋ก ๋ง๋ค์ด ์ก๋์ง ์ ์ ์์ต๋๋ค.
poly.get_feature_names_out()
array(['x0', 'x1', 'x2', 'x0^2', 'x0 x1', 'x0 x2', 'x1^2', 'x1 x2', 'x2^2'], dtype=object)
- ‘x0’์ ์ฒซ๋ฒ์งธ ํน์ฑ์ ์๋ฏธํ๊ณ
- ‘x0^2’๋ ์ฒซ๋ฒ์งธ ํน์ฑ์ ์ ๊ณฑ,
- ‘x0 xl’์ ์ฒซ๋ฒ์งธ ํน์ฑ๊ณผ ๋๋ฒ์งธ ํน์ฑ์ ๊ณฑ์ ๋ํ๋ด๋ ์์ ๋๋ค.
- ์ด์ Test_set๋ฅผ ๋ฐํํ๊ณ ๋ณํ๋ ํน์ฑ์ ์ด์ฉํ์ฌ ๋ค์ค ํ๊ท ๋ชจ๋ธ์ ํ๋ จ์ํค๊ฒ ์ต๋๋ค.
# training_set์ ์ฌ์ฉํ๊ฑธ test_set์ ์ฌ์ฉํ๋ค.
test_poly = poly.transform(test_input)
๋ค์ค ํ๊ท ๋ชจ๋ธ ํ๋ จํ๊ธฐ
๋ค์ค ํ๊ท ๋ชจ๋ธ์ ํ๋ จํ๋๊ฒ์ ์ ํ ํ๊ท ๋ชจ๋ธ์ ํ๋ จํ๋ ๋ฐฉ์๊ณผ ๊ฐ์ต๋๋ค. ๋ค๋ง, ์ฌ๋ ค๊ฐ์ ํน์ฑ์ ์ด์ฉํด์ ์ ํํ๊ท๋ฅผ ์ํํ๋๊ฒ ๋ฟ์ ๋๋ค. ํ๋ฒ ํ๋ จ์์ผ ๋ณด๊ฒ ์ต๋๋ค.
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(train_poly, train_target)
print(lr.score(train_poly, train_target))
0.9903183436982125
- 1๊ฐ์ ํน์ฑ์ ์ฌ์ฉํ ์ ํํ๊ท ๋ชจ๋ธ๋ณด๋ค ๋์ ์ ์๊ฐ ๋์์ต๋๋ค. ์ด๊ฒ์ ํน์ฑ์ด ๋์ด๋๋ฉด ์ ํํ๊ท๋ ์ข์ ์ ํ๋๋ฅผ ๊ฐ์ ธ์จ๋ค๋๊ฒ์ ๋ณผ์ ์์ต๋๋ค. Test_set ์ ์๋ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
print(lr.score(test_poly, test_target)) # ๊ณผ์์ ํฉ ๋ฌธ์ ํด๊ฒฐ
0.9714559911594159
- Test_set์ ๋ํ ์ ์๋ 1๊ฐ์ ํน์ฑ์ ์ฌ์ฉํ ์ ํํ๊ท ๋ณด๋ค ์ ์๊ฐ ๋์์ง์ง๋ ์์์ง๋ง, ๋์ด์ ๊ธธ์ด๋ง ์ฌ์ฉํ์ ๋ ์๋ ๊ณผ์์ ํฉ ๋ฌธ์ ๋ ํด๊ฒฐ๋์์ต๋๋ค.
- ๋ง์ฝ ์ฌ๊ธฐ์ ํน์ฑ์ ๋ ๋ง์ด ์ถ๊ฐํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? 3์ ๊ณฑ, 4์ ๊ณฑ, 5์ ๊ณฑ ํญ์ ๋ฃ๋๊ฑฐ์ฃ .
PolynomialFeature ํด๋์ค์ degree ๋งค๊ฐ๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝํ์ฌ ํ์ํ ์ต๋ ์ฐจ์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. 5์ ๊ณฑ ๊น์ง ํน์ฑ์ ์ถ๊ฐํด์ ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
poly = PolynomialFeatures(degree=5, include_bias=False) # 5์ ๊ณฑ๊น์ง ํน์ฑ์ ๋ง๋ค์ด์ ์ถ๋ ฅ
poly.fit(train_input)
train_poly = poly.transform(train_input)
test_poly = poly.transform(test_input)
print(train_poly.shape)
(42, 55) # ๋ฐ์ดํฐ์ ์ 42๊ฐ, ๋ง๋ค์ด์ง ํน์ฑ์ ๊ฐ์๊ฐ 55๊ฐ
- train_poly ๋ฐฐ์ด์ ์ด์ ๊ฐ์๊ฐ ํน์ฑ์ ๊ฐ์์ ๋๋ค. ์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ ํ ํ๊ท ๋ชจ๋ธ์ ๋ค์ ํ๋ จ์์ผ ๋ณด๊ฒ ์ต๋๋ค.
lr.fit(train_poly, train_target)
print(lr.score(train_poly, train_target))
0.999999999999769
- ์ ํ๋๊ฐ 99%์ด์์ ๋๋ค. ์๋ฒฝํ ์ ์์ธ๋ฐ, Test_set ์ ์๋ ํ๋ฒ ๋ณด๊ฒ ์ต๋๋ค.
# ์์๊ฐ ๋จ๋ ์ด์ : training_set์ ๋๋ฌด ๊ณผ๋ ์ ํฉ ๋์ด์.
print(lr.score(test_poly, test_target))
-144.40490595353674
- ํ ... ๋งค์ฐ ํฐ ์์๊ฐ์ด ๋์์ต๋๋ค. ์ด๊ฒ์ Training_set์ ๋๋ฌด ๊ณผ๋์ ํฉ์ด ๋์ด์ Test_set์ ์์๋ ๋งค์ฐ ๋ฎ์ ๊ฐ์ ๋ง๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ท์ & ํ์คํ
- ์์ ๊ธ์์ ๋ณด์ด๋ฏ์ด, ๊ณผ๋์ ํฉ์ด ๋ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ด ๊ณผ๋ํ๊ฒ ํ์ตํ์ง ๋ชปํ๋๋ก ๋ง๋๊ฒ์ ๊ท์ ๋ผ๊ณ ํฉ๋๋ค.
์ฆ, ๋ชจ๋ธ์ด ํ๋ จ ์ธํธ์ ๊ณผ๋์ ํฉ๋์ง ์๋๋ก ๋ง๋๋ ๊ฒ ์ ๋๋ค. ์ ํ ํ๊ท ๋ชจ๋ธ์ ๊ฒฝ์ฐ ํน์ฑ์ ๊ณฑํด์ง๋ ๊ณ์(๊ธฐ์ธ๊ธฐ)์ ํฌ๊ธฐ๋ฅผ ์๊ฒ ๋ง๋๋ ๊ฒ์ ๋๋ค.
- ๊ทธ๋ฆผ์ ๋ณด์๋ฉด, ์ผ์ชฝ์ ๊ท์ ๋ฅผ ์ค์ ํ๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ํ์ตํ ๋ชจ๋ธ์ด๊ณ , ์ค๋ฅธ์ชฝ์ ๊ท์ ๋ฅผ ์ ์ฉํด์ ํ์ต์ํจ ๋ชจ๋ธ์ ๋๋ค.
- ๊ทธ๋ฌ๋ฉด, 55๊ฐ์ ํน์ฑ์ผ๋ก ํ๋ จํ ์ ํํ๊ท ๋ชจ๋ธ์ ๊ณ์๋ฅผ ๊ท์ ํ์ฌ ํ๋ จ ์ธํธ์ ์ ์๋ฅผ ๋ฎ์ถ๊ณ ๋์ ํ ์คํธ ์ ์๋ฅผ ๋์ฌ๋ณด๊ฒ ์ต๋๋ค.
- ๊ทผ๋ฐ, ๊ท์ ๋ฅผ ์ ์ฉํ๊ธฐ ์ ์ ์ ๊ทํ๋ฅผ ํด์ผํฉ๋๋ค. ํน์ฑ์ ์ค์ผ์ผ์ด ์ ๊ทํ๊ฐ ๋์ง ์์ผ๋ฉด? ๊ณฑํด์ง๋ ๊ณ์๊ฐ๋ ์ฐจ์ด๊ฐ ๋์ด ๋๋ฌธ์, ๊ท์ ๋ฅผ ์ ์ฉํ๋ฉด, ๋๊ฐ์ด ์ ์ด๊ฐ ๋์ง ์์์๋ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ์ด๋ฒ์๋ Scikit-learn์์ ์ ๊ณตํ๋ StandardScaler ํด๋์ค๋ฅผ ์ฌ์ฉํด์ ๋ณํํด ๋ณด๊ฒ ์ต๋๋ค.
from sklearn.preprocessing import StandardScaler
ss = StandardScaler() # ๊ฐ์ฒด ์ด๊ธฐํ
ss.fit(train_poly) # ๋ชจ๋ธ ํ๋ จ
train_scaled = ss.transform(train_poly)
test_scaled = ss.transform(test_poly)
- ์ด ์ฝ๋๋ StandardScaler ํด๋์ค์ ๊ฐ์ฒด ss๋ฅผ ์ด๊ธฐํ ํ ํ, PolynomialFeature ํด๋์ค๋ก ๋ง๋ train_poly ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ ํ๋ จํฉ๋๋ค.
- Training_set๋ก ํ์ตํ ๋ณํ๊ธฐ๋ฅผ ์ฌ์ฉํด์ Test_set๋ ๋ณํ ํด์ผ ํฉ๋๋ค.
- ์ฌ๊ธฐ์ ์ด์ ์ ํํ๊ท ๋ชจ๋ธ์ ๊ท์ ๋ฅผ ์ถ๊ฐํ ๋ชจ๋ธ์ ๋ํ์ฌ ์ค๋ช ์ ํด๋ณด๊ฒ ์ต๋๋ค. ๋ฆฟ์ง(ridge) & ๋ผ์(Lasso)2๊ฐ๊ฐ ์๋๋ฐ, ๋ฆฟ์ง(ridge) ๋ถํฐ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
Ridge(๋ฆฟ์ง) ํ๊ท
Ridge(๋ฆฟ์ง) ํ๊ท๋ ๊ณ์๋ฅผ ์ ๊ณฑํ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๊ท์ ๋ฅผ ์ ์ฉํฉ๋๋ค.
- L2 ๊ท์ , ๋ค๋ฅธ class์ L2๊ท์ ๊ฐ ์ ์ฉ๋ฌ์๋? ์ ํํ๊ท์์๋ ๋ฆฟ์ง ํ๊ท ๋ผ๊ณ ํฉ๋๋ค.
- ๋ฆฟ์ง๋ sklearn.linear_model ํจํค์ง ์์ ์์ผ๋ฉฐ, ํธ๋ฆฌํ๊ฒ์ ํ๋ จ & ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ๊ฐ๋ค๋ ๊ฒ์ ๋๋ค.
- ๋ชจ๋ธ ๊ฐ์ฒด์์ fit() method๋ก ํ๋ จํ๊ณ , score() method๋ก ํ๊ฐํฉ๋๋ค.
- ์์ ์ค๋นํ train_scaled ๋ฐ์ดํฐ๋ก ๋ฆฟ์ง ๋ชจ๋ธ์ ํ๋ จํด๋ณด๊ฒ ์ต๋๋ค.
from sklearn.linear_model import Ridge
#alpha=1(1์ด๋ฉด ๊ฐ๋ ์, 0์ด๋ฉด ๊ฐ๋ ์ฝํจ), ์ฌ์ ์ ์ฐ๋ฆฌ๊ฐ ์ง์ ํด์ผ ๋๋ ๊ฐ์ - ์ด๋ฌํ ๊ฐ์ hyperparameter๋ผ๊ณ ๋ถ๋ฅธ๋ค.
ridge = Ridge()
ridge.fit(train_scaled, train_target)
print(ridge.score(train_scaled, train_target))
0.9896101671037343
- ์ ํํ๊ท ์์ ๊ฑฐ์ด 99% ์ ํ๋๊ฐ ๋์จ๋ฐ๋ฉด, ์ ์๊ฐ ์กฐ๊ธ ๋ฎ์์ก์ต๋๋ค. ํ๋ฒ Test_set ์ ์๋ฅผ ํ์ธํ๊ฒ ์ต๋๋ค.
print(ridge.score(test_scaled, test_target))
0.9790693977615388
- ์ ์ ์ ํํ๊ท ๋ชจ๋ธ ์์ ์ ์๊ฐ ์์๊ฐ ๋์์ง๋ง, ์ง๊ธ์ ์ ์์ผ๋ก ๋์์์ต๋๋ค.
- ๋ฆฟ์ง(Ridge)๋ ๊ทธ๋ ๊ณ ๋ผ์(Lasso)๋ ๊ทธ๋ ์ง๋ง, ๊ท์ ์ ์์ ์์๋ก ์กฐ์ ํ ์ ์์ต๋๋ค. ๋ชจ๋ธ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋, alpha ๋งค๊ฐ ๋ณ์๋ก ๊ท์ ์ ๊ฐ๋๋ฅผ ์กฐ์ ํฉ๋๋ค.
- ๋ง์ฝ alpha ๊ฐ์ด ํฌ๋ฉด ๊ท์ ๊ฐ๋๊ฐ ์ธ์ง๋ฏ๋ก ๊ณ์ ๊ฐ์ ๋ ์ค์ด๊ณ ๊ณผ์์ ํฉ ๋๋๋ก ์ ๋ํฉ๋๋ค.
- alpha ๊ฐ์ด ์์ผ๋ฉด ๊ณ์๋ฅผ ์ค์ด๋ ์ญํ ์ด ์ค์ด๋ค๊ณ ์ ํํ๊ท ๋ชจ๋ธ๊ณผ ์ ์ฌํด์ง๋ฏ๋ก, ๊ณผ๋์ ํฉ(Overfitting)๋ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค.
- ๊ทธ๋ฌ๋ฉด ์ด๋ป๊ฒ ํด์ผ ์ ์ํ alpha ๊ฐ์ ์ฐพ์ ์ ์์๊น์?
์ ์ ํ ๊ท์ ๊ฐ๋ ์ฐพ๊ธฐ
์ ์ ํ alpha ๊ฐ์ ์ฐพ๋ ํ๊ฐ์ง ๋ฐฉ๋ฒ์, alpha ๊ฐ์ ๋ํ R^2์ ๊ทธ๋ํ๋ฅผ ๋ง๋ค์ด๋ณด๋ ๊ฒ์ ๋๋ค.
- Matplotlib ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ import ํ๊ณ , alpha ๊ฐ์ ๋ด๊ฟ๋ ๋ง๋ค, score() Method์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ list๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
import matplotlib.pyplot as plt
train_score = []
test_score = []
- alpha ๊ฐ์ 0.001 ๋ถํฐ 100๊น์ง 10๋ฐฐ์ฉ ๋๋ ค๊ฐ๋ฉฐ ๋ฆฟ์ง ํ๊ท ๋ชจ๋ธ์ ํ๋ จํ๊ณ , Training_set & Test_set ์ ์๋ฅผ list์ ์ ์ฅํฉ๋๋ค.
- ๊ทธ๋ฆฌ๊ณ train_score ์ test_score ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํด์ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆฝ๋๋ค.
- ์ด ๊ทธ๋ํ๋ x์ถ์ log scale๋ก ๋ด๊ฟ์ ๊ทธ๋ฆฌ๊ฒ ์ต๋๋ค.
alpha_list = [0.001, 0.01, 0.1, 1, 10, 100] #๋ณดํต์ 7์ ๋ฐฐ์๋ก hyperparameter ๋ฒ์ ์ง์ ๋ฐ ํ๋ จ
for alpha in alpha_list:
# alpha_list ์์ ์๋ ๊ฐ๋ค๋ก ํ๋์ฉ for๋ฌธ์ ๋๋ ค๊ฐ๋ฉด์, ๋ชจ๋ธ์ ํ๋ จํฉ๋๋ค.
ridge = Ridge(alpha=alpha)
# ๋ฆฟ์ง ๋ชจ๋ธ์ ํ๋ จํฉ๋๋ค.
ridge.fit(train_scaled, train_target)
# ํ๋ จ ์ ์์ ํ
์คํธ ์ ์๋ฅผ ์ ์ฅํฉ๋๋ค.
train_score.append(ridge.score(train_scaled, train_target))
test_score.append(ridge.score(test_scaled, test_target))
plt.plot(np.log10(alpha_list), train_score) #log10 - log scale๋ก ๋ด๊ฟ
plt.plot(np.log10(alpha_list), test_score)
plt.xlabel('alpha')
plt.ylabel('R^2')
plt.show()
# alpha ๊ฐ์ด ์์ง๋ฉด ๊ท์ ๊ฐ ์์ ธ์, training_set score๊ฐ ๋ฎ์์ง, alpha๊ฐ์ด ์ฝํด์ง๋ฉด ๋ฐ๋
# ์ผ์ชฝ์ ๊ณผ๋์ ํฉ, ์ค๋ฅธ์ชฝ์ ๊ณผ์์ ํฉ
- ๊ทธ๋ํ์ alpha ๊ฐ์ 0.001๋ถ 100๊น์ง 10๋ฐฐ์ฉ ๋๋ ธ๊ธฐ ๋๋ฌธ์, ๊ทธ๋ํ๋ฅผ ๋ฐ๋ก ๊ทธ๋ ค๋ฒ๋ฆฌ๋ฉด ๊ทธ๋ํ์ ์ผ์ชฝ์ด ๋๋ฌด ์ด์ดํด ์ง๋ฏ๋ก alpha_list์ ์๋ 6๊ฐ์ ๊ฐ์ ๋์ผํ ๊ฐ๊ฒฉ์ผ๋ก ๋ํ๋ด๊ธฐ ๋๋ฌธ์, log ํจ์๋ฅผ ์ง์๋ก ํํํด์ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ ค๋ณด๊ฒ ์ต๋๋ค.
- 0.001์ -3, 0.01์ -2, 100์ 2. ์ด๋ ๊ฒ ๋๋ ํ์์ ๋๋ค.
- ์์ ํ๋์ ๊ทธ๋ํ๊ฐ Training_set ๊ทธ๋ํ, ์๋ ๋ ธ๋์ ๊ทธ๋ํ๊ฐ Test_set ๊ทธ๋ํ ์ ๋๋ค.
- ๊ทธ๋ํ์ ์ผ์ชฝ์ ๋ณด๋ฉด Training_set, Test_set์ ์ ์ ์ฐจ์ด๊ฐ ํฝ๋๋ค. ์ด ๋ชจ์ต์ ๊ณผ๋์ ํฉ์ ์ ํ์ ์ธ ๋ถ๋ถ์ ๋๋ค.
- ์ค๋ฅธ์ชฝ์ ๋๋ค ์ ์๊ฐ ๋ฎ์์ง๋ ๊ณผ์์ ํฉ์ ๋ชจ์ต์ ๋ณด์ ๋๋ค.
- ๋ ๊ทธ๋ํ๊ฐ ๊ฐ์ฅ ๊ฐ๊น๊ณ , ํ ์คํธ ์ ์๊ฐ ๊ฐ์ฅ ๋์ -1, ์ฆ 10์ -1์น. 0.1 ์ ๋๋ค. alpha ๊ฐ์ 0.1๋ก ํด์ ์ต์ข ๋ชจ๋ธ์ ํ๋ จ์์ผ ๋ณด๊ฒ ์ต๋๋ค.
ridge = Ridge(alpha=0.1)
ridge.fit(train_scaled, train_target)
print(ridge.score(train_scaled, train_target))
print(ridge.score(test_scaled, test_target))
0.9903815817570366
0.9827976465386955
- ์ด ๋ชจ๋ธ์ Training_set ์ ์์ Test_set ์ ์๊ฐ ๋น์ทํ๊ฒ ๋๊ณ ๊ณผ๋์ ํฉ, ๊ณผ์์ ํฉ ์ฌ์ด์์ ๊ท ํ์ ๋ง์ถ๊ณ ์์ต๋๋ค.
- ์ด๋ฒ์ ๋ผ์(Lasso) ๋ชจ๋ธ์ ํ๋ฒ ๋ณด๊ฒ ์ต๋๋ค.
๋ผ์(Lasso) ํ๊ท
๋ผ์(Lasso) ํ๊ท๋ ํ๋ จํ๋๊ฒ์ ๋ฆฟ์ง(Ridge)์ ๋ฐฉ์์ด ๋น์ทํฉ๋๋ค. Ridge๋ฅผ Lasso๋ก ๋ด๊พธ๋๊ฒ์ด ๋ค์ ๋๋ค.
๋ค๋ง, ๋ผ์ ํ๊ท์ ํน์ง์ ๊ฐ์ค์ฐจ์ ์ ๋๊ฐ์ ์ ๊ณฑ์ ์ฃผ์ด์ ๊ท์ ๋ฅผ ์ฃผ๋ ๋ฐฉ์์ ๋๋ค.
from sklearn.linear_model import Lasso
lasso = Lasso()
lasso.fit(train_scaled, train_target)
print(lasso.score(train_scaled, train_target))
print(lasso.score(test_scaled, test_target))
0.989789897208096
0.9800593698421884
- Train, Test_set์ ์ ์๋ ๋ฆฟ์ง ํ๊ท๋งํผ ์ข์ต๋๋ค. ๋ผ์๋ ๋์ผํ๊ฒ alpha ๋งค๊ฐ๋ณ์๋ก ๊ท์ ์ ๊ฐ๋๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค.
import matplotlib.pyplot as plt
train_score = []
test_score = []
alpha_list = [0.001, 0.01, 0.1, 1, 10, 100] #๋ณดํต์ 7์ ๋ฐฐ์๋ก hyperparameter ๋ฒ์ ์ง์ ๋ฐ ํ๋ จ
for alpha in alpha_list:
# alpha_list ์์ ์๋ ๊ฐ๋ค๋ก ํ๋์ฉ for๋ฌธ์ ๋๋ ค๊ฐ๋ฉด์, ๋ชจ๋ธ์ ํ๋ จํฉ๋๋ค.
lasso = Lasso(alpha=alpha, max_iter=10000)
# ๋ผ์ ๋ชจ๋ธ์ ํ๋ จํฉ๋๋ค.
lasso.fit(train_scaled, train_target)
# ํ๋ จ ์ ์์ ํ
์คํธ ์ ์๋ฅผ ์ ์ฅํฉ๋๋ค.
train_score.append(lasso.score(train_scaled, train_target))
test_score.append(lasso.score(test_scaled, test_target))
plt.plot(np.log10(alpha_list), train_score) #log10 - log scale๋ก ๋ด๊ฟ
plt.plot(np.log10(alpha_list), test_score)
plt.xlabel('alpha')
plt.ylabel('R^2')
plt.show()
- ์ด ๊ทธ๋ํ์ ํน์ง๋ ์ผ์ชฝ์ ๊ณผ๋์ ํฉ, ์ค๋ฅธ์ชฝ์ ๊ณผ์์ ํฉ์ ๋ณด์ฌ์ค๋๋ค.
- ๊ทธ๋ฆฌ๊ณ , ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ์๋ก ํ๋ จ ์ธํธ, ํ ์คํธ ์ธํธ์ ์ ์๊ฐ ์ขํ์ง๊ณ ์์ต๋๋ค. ์ด ์ง์ ์ด ์๋ง ๊ณผ์์ ํฉ๋๋ ๋ชจ๋ธ์ธ๊ฑฐ ๊ฐ์ต๋๋ค.
- ๋ผ์ ๋ชจ๋ธ์์ ์ต์ ์ alpha ๊ฐ์ 1, ์ฆ 10์ 1์น=10์ ๋๋ค. ์ด ๊ฐ์ผ๋ก ๋ค์ ๋ชจ๋ธ์ ํ๋ จํด ๋ณด๊ฒ ์ต๋๋ค.
lasso = Lasso(alpha=10)
lasso.fit(train_scaled, train_target)
print(lasso.score(train_scaled, train_target))
print(lasso.score(test_scaled, test_target))
0.9888067471131867
0.9824470598706695
- ๋ผ์ ๋ชจ๋ธ๋ ๊ณผ๋์ ํฉ์ ์ ์ต์ ํ๊ณ ํ ์คํธ ์ธํธ์ ์ฑ๋ฅ์ ํฌ๊ฒ ๋์ธ๊ฒ์ ์์ ์์ต๋๋ค.
- ๊ทผ๋ฐ, ๋ผ์ ๋ชจ๋ธ์ ๊ณ์๊ฐ์ ์์ 0์ผ๋ก ๋ง๋ค ์ ์๋๊ฒ์ ์๊ณ ๊ณ์ ๊ฐ์? ๋ผ์ ๋ชจ๋ธ์ ๊ณ์๋ coef_ ์์ฑ์ ์ ์ฅ๋์ด ์์ต๋๋ค.
- ํ๋ฒ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
print(np.sum(lasso.coef_ == 0))
40
- ์ด๊ฒ์ ๋ณด๋ฉด์ ์ ์ ์๋๊ฒ์, 55๊ฐ์ ํน์ฑ์ ๋ชจ๋ธ์ ์ฃผ์ ํ์ง๋ง ๋ผ์ ๋ชจ๋ธ์ด ์ฌ์ฉํ ํน์ฑ์ 15๊ฐ ๋ฟ์ด๋ผ๋๊ฒ์ ์์ ์์ต๋๋ค.
- ์ด๋ฌํ ํน์ง ๋๋ฌธ์ ๋ผ์(Lasso) ๋ชจ๋ธ์ ์ ์ฉํ ํน์ฑ์ ๊ณจ๋ผ๋ด๋ ์ฉ๋๋ก๋ ์ฌ์ฉ๊ฐ๋ฅํฉ๋๋ค.
Keywords
- ๋ค์ค ํ๊ท(Multiple Regression)๋ ์ฌ๋ฌ ๊ฐ์ ํน์ฑ์ ์ฌ์ฉํ๋ ํ๊ท ๋ชจ๋ธ์ ๋๋ค. ํน์ฑ์ด ๋ง์ผ๋ฉด ์ ํ ๋ชจ๋ธ์ ๊ฐ๋ ฅํ ์ฑ๋ฅ์ ๋ฐํํฉ๋๋ค.
- ํน์ฑ ๊ณตํ ์ ์ฃผ์ด์ง ํน์ฑ์ ์กฐํฉํ์ฌ ์๋ก์ดํน์ฑ์ ๋ง๋๋ ์ผ๋ จ์ ์์ ๊ณผ์ ์ ๋๋ค.
- ๋ฆฟ์ง(Ridge)๋ ๊ท์ ๊ฐ ์๋ ์ ํ ํ๊ท ๋ชจ๋ธ ์ค ํ๋์ด๋ฉฐ ์ ํ ๋ชจ๋์ ๊ณ์๋ฅผ ์๊ฒ ๋ง๋ค์ด ๊ณผ๋์ ํฉ์ ์ํ์๊ฒ๋๋ค. ๋ฆฟ์ง๋๋น๊ต์ ํจ๊ณผ๊ฐ์ข์๋๋ฆฌ ์ฌ์ฉํ๋๊ท์ ๋ฐฉ๋ฒ์ ๋๋ค.
- ๋ผ์(Lasso)๋ ๋ ๋ค๋ฅธ ๊ท์ ๊ฐ ์๋ ์ ํ ํ๊ท ๋ชจ๋ธ์ ๋๋ค. ๋ฆฟ์ง์ ๋ฌ๋ฆฌ ๊ณ์ ๊ฐ์ ์์ 0์ผ๋ก ๋ง๋ค ์ ๋์์ต๋๋ค.
- ํ์ดํผํ๋ผ๋ฏธํฐ(Hyper-Parameter)๋ ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ด ํ์ตํ์ง ์๋ ํ๋ผ๋ฏธํฐ์ ๋๋ค. ์ด๋ฐ ํ๋ผ๋ฏธํฐ๋ ์ฌ๋ ์ด ์ฌ์ ์ ์ง์ ํด์ผ ํฉ๋๋ค. ๋ํ์ ์ผ๋ก ๋ฆฟ์ง์ ๋ผ์์ ๊ท์ ๊ฐ๋ alpha ํ๋ผ๋ฏธํฐ์ ๋๋ค.
ํต์ฌ ํจํค์ง์ ํจ์
pandas
- read_csv()๋ csv ํ์ผ์ ๋ก์ปฌ ์ปดํจํฐ๋ ์ธํฐ๋ท์์ ์ฝ์ด ํ๋ค์ค ๋ฐ์ดํฐํ๋ ์์ผ๋ก ๋ณํํ ๋ ํจ์์ ๋๋ค. ์ด ํจ์๋ ๋งค์ฐ ๋ง์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ทธ์ค์ ์ง์ฃผ ์ฌ์ฉํ๋ ๋งค๊ฐ๋ณ์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- sep๋ csv ํ์ผ์ ๊ตฌ๋ถ์๋ฅผ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ‘์ฝค๋ง(,)’์ ๋๋ค.
- header์ ๋ฐ์ดํฐํ๋ ์์ ์ด ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ csv ํ์ผ์ ํ ๋ฒํธ๋ฅผ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ฒซ ๋ฒ์งธ ํ์ ์ด ์ด๋ฆ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
- skiprows๋ ํ์ผ์์ ์ฝ๊ธฐ ์ ์ ๊ฑด๋๋ ํ์ ๊ฐ์๋ฅผ ์ง์ ํฉ๋๋ค.
- nrows๋ ํ์ผ์์ ์ฝ์ ํ์ ๊ฐ์๋ฅผ ์ง์ ํฉ๋๋ค.
scikit-learn
- PolynomialFeatures๋ ์ฃผ์ด์ง ํน์ฑ์ ์กฐํฉํ์ฌ ์๋ก์ด ํน์ฑ์ ๋ง๋ญ๋๋ค. degree๋ ์ต๊ณ ์ฐจ์๋ฅผ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 2์ ๋๋ค.
- interaction_only๊ฐ True์ด๋ฉด ๊ฑฐ๋ญ์ ๊ณฑ ํญ์ ์ ์ธ๋๊ณ ํน์ฑ ๊ฐ์ ๊ณฑ์ ํญ๋ง ์ถ๊ฐ๋ฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ False์ ๋๋ค.
- include_bias๊ฐ False์ด๋ฉด ์ ํธ์ ์ํ ํน์ฑ์ ์ถ๊ฐํ์ง ์์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ์ True์ ๋๋ค.
- Ridge๋ ๊ท์ ๊ฐ ์๋ ํ๊ท ์๊ณ ๋ฆฌ์ฆ์ธ ๋ฆฟ์ง ํ๊ท ๋ชจ๋ธ์ ํ๋ จํฉ๋๋ค.
- alpha ๋งค๊ฐ๋ณ์๋ก๊ท์ ์ ๊ฐ๋๋ฅผ์กฐ์ ํฉ๋๋ค. alpha ๊ฐ์ด ํด์๋ก ๊ท์ ๊ฐ ์ธ์ง๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 1์ ๋๋ค.
- solver ๋งค๊ฐ๋ณ์์ ์ต์ ์ ๋ชจ๋ธ์ ์ฐพ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ์ง์ ํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ‘auto’์ด๋ฉฐ ๋ฐ์ดํฐ์ ๋ฐ๋ผ ์๋์ผ๋ก ์ ํ๋ฉ๋๋ค.
- scikit-learn 0.17 ๋ฒ์ ์ ์ถ๊ธฐ๋ ‘sag’๋ ํ๋ฅ ์ ํ๊ท ๊ฒฝ์ฌ ํ๊ฐ๋ฒ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํน์ฑ๊ณผ ์ํ ์๊ฐ ๋ง์ ๋์ ์ฑ๋ฅ์ด ๋น ๋ฅด๊ณ ์ข์ต๋๋ค.
- scikit-learn 0.19 ๋ฒ์ ์๋ ‘sag’์ ๊ฐ์ ๋ฒ์ ์ธ ‘saga’๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- random_state๋ solver๊ฐ ‘sag’๋ ‘saga’์ผ ๋ ๋ ํ์ด ๋์ ์๋๊ฐ์ ์ง์ ํ ์ ์์ต๋๋ค.
- Lasso๋ ๊ท์ ๊ฐ ์๋ ํ๊ท ์๊ณ ๋ฆฌ์ฆ์ธ ๋ผ์ ํ๊ท ๋ชจ๋์ ํ๋ จํฉ๋๋ค. ์ด ํด๋์ค๋ ์ต์ ์ ๋ชจ๋ธ์ ์ฐพ๊ธฐ ์ํด ์ขํ์ถ์ ๋ฐ๋ผ ์ต์ ํ๋ฅผ ์ํํด๊ฐ๋ ์ขํ ํ๊ฐ๋ฒ coordinate descent์ ์์ฉํฉ๋๋ค.
- alpha์ random_state ๋งค๊ฐ๋ณ์๋ Ridge ํด๋์ค์ ๋์ผํฉ๋๋ค.
- max_iter๋ ์๊ณ ๋ฆฌ์ฆ์ ์ํ ๋ฐ๋ณต ํ์๋ฅผ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 1000์ ๋๋ค.
๋ฐ์ํ
'๐น๏ธ ํผ๊ณต๋จธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํผ๊ณต๋จธ์ ] Stochastic Gradient Descent (ํ๋ฅ ์ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ) (0) | 2023.11.05 |
---|---|
[ํผ๊ณต๋จธ์ ] Logistic Regression (๋ก์ง์คํฑ ํ๊ท) (0) | 2023.09.25 |
[ํผ๊ณต๋จธ์ ] Linear Regression (0) | 2023.09.23 |
[ํผ๊ณต๋จธ์ ] K-์ต๊ทผ์ ์ด์ ํ๊ท (0) | 2023.09.22 |
[ํผ๊ณต๋จธ์ ] ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ [๋ฐ์ดํฐ ๋ค๋ฃจ๊ธฐ] (0) | 2023.09.18 |