๐ฟ 'ํ๋'๋ ํ์ด์คํฌ๋ฆฝํธ ๋์ ๊ธฐ์ ์ค์๋ง์ ๋๋ค.
์ง๋ ๊ฒ์๊ธ์์ ์ฐ์ฌ๋๋ ๊ธ์ ๋๋ค. : https://itadventure.tistory.com/555
ํ๋!(14) - ๋ฆฟ์ง ๋ฆฌ๊ทธ๋ ์ ์ผ๋ก ์ ํ๋๊ฐ ๋์์ง๋ค๊ตฌ?
โป 'ํ๋'๋ ํ์ด์คํฌ๋ฆฝํธ ๋์ ๊ธฐ์ ์ค๋ง์ ๋๋ค. ์ง๋ ๊ฒ์๊ธ์ ์ฐ์ฌ๋๋ ๊ธ์ ๋๋ค : https://itadventure.tistory.com/554 ํ๋!(13) - ์? ์ธ๊ณต์ง๋ฅ ์ ์ค์จ์ด?! - ํ๊ท ๊ฐ๊ฒฉ ์ถ๊ฐ 'ํ๋'๋ ํ์ด์คํฌ๋ฆฝํธ ๋์
itadventure.tistory.com
์ ๋ชฉ์ 4์ฐจ ๋ฐฉ์ ์์ด์ง๋ง ์ค์ 4์ฐจ ๋ฐฉ์ ์์ ๊ณ์ฐํ ์ผ์ ์์ผ๋ ๊ฒ๋จน์ง ๋ง์๊ธฐ ๋ฐ๋๋๋ค :)
์ง๋ ์๊ฐ์๋ ์ฐจ์๋ฅผ ์ด์ฉํ์ฌ ๋จธ์ ๋ฌ๋ ๊ฒฐ๊ณผ๊ฐ ์ข ๋ ์๋ณธ์ ๊ทผ์ ํ๋๋ก ํ์์ง์.
ํ์ง๋ง ํ๋ จ๋ฐ์ดํฐ์ ํนํ๋๋ค ๋ณด๋ ์ ์ ํ
์คํธ๋ฐ์ดํฐ๋ฅผ ์์ธกํ ๋ ๊ฑฐ๋ฆฌ๊ฐ ๋จผ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด
๋ฆฟ์ง ๋ฆฌ๊ทธ๋ ์
(Ridge Regression) ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณผ์ ํฉ์ด๋ผ ๋ถ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
์ด๋ฒ ์๊ฐ์๋ ๋ฆฟ์ง ๋ฆฌ๊ทธ๋ ์
๊ณผ ๋น์ทํ ๊ณผ์ ํฉ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ผ์ ๋ฆฌ๊ทธ๋ ์
(Lasso Regression)์ ์ ์ฉํด๋ณผํ
๋ฐ์.
์ฌ์ค ์ด๋ค๊ฒ ๋ ๋์์ง ์์ง ๊ฐ์ ์ ์ต๋๋ค. ํ์ง๋ง ์์๋ฌ์ ๋์ ๊ฑด ์๊ธฐ ๋๋ฌธ์ ๋์ ํด ๋ณด๊ธฐ๋ก ํ์ต๋๋ค :)
์ฐจ์๋ฅผ ๋ ๋ง์ด ์ค๋ณผ๊น?
์ง๋๋ฒ์๋ ์ฐ๋์ ์ ๊ณฑ, ์์ ์ ๊ณฑ, ํ๊ท ๊ฐ์ ์ ๊ณฑ ๋ฑ์ ์ถ๊ฐ ๋ฐ์ดํฐ๋ก ๋ฃ์ด ์ ํ๋๊ฐ ๋ง์ด ๋์์ก์์ง์.
์ด๋ฒ์๋ ์ฐ๋์ ์ธ์ ๊ณฑ, ์ฐ๋์ ๋ค์ ๊ณฑ๊ณผ ๊ฐ์ ๊ฐ๋ ์ ๊ณตํ๋๋ก ํด๋ด
์๋ค.
์์ธ๋ฌ ์ฐ๋์ ์์ ๊ณฑํ ์์น๋ ๋ฃ๊ณ , ํ๊ท ๊ฐ์ ์ผ์ ์ ๊ณฑ์ ๊ณฑํ ์์น๋ ๋ฃ๊ณ ..
์ด๊ฑธ ์ธ์ ๋ค ๋ฃ์ง....?๊ฐ์๊ธฐ ๊ท์ฐจ๋์ฆ์ด ์๊ฒจ์ ๊ทธ๋ง ๊ธ์ ์ฐ๋ ต๋๋ค.
๊ทธ๋ฌ๋ฉด ์ฌ๋ฌ๋ถ ์๋
ํ- ( ์ด๋ด... )
.. ๐ ..๐ ..๐
ํ ํ .. ์๋ ์ด๋ฐ ๊ท์ฐฎ์ ์ผ์ ํ์ง ๋ง์๋ ๊ฒ๋๋ค.
๊ทธ๋ผ ์ด๋ป๊ฒ ํ๋๊ตฌ์?
๋ฐ๋ก ๋จธ์ ๋ฌ๋์๊ฒ ๋งก๊ธฐ๋ฉด ๋๋ ๊ฒ๋๋ค:)
์ด๋ฌํ ๊ฐ๊ฐ์ ์๋ณธ๋ฐ์ดํฐ์ ์ ๊ณฑ, ์ธ์ ๊ณฑ, ๋ค์ ๊ณฑ, ์ฐ๋ x ์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ผ์ผํ ํ๋์ฉ ์ถ๊ฐํ๋ ๊ฑด ๊ฝค๋ ๊ท์ฐฎ์ ์ผ์
๋๋ค.
์ง๋๋ฒ ์ ๊ณฑ์๋ง ์ถ๊ฐํ๋๋ฐ ์ฝ๋๊ฐ ์ด๋งํผ์ด์๋๋ฐ,
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐํ๋ จ_๋ํ์ด = np.column_stack((
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐํ๋ จ_๋ํ์ด ,
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐํ๋ จ_๋ํ์ด[:,0] ** 2,
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐํ๋ จ_๋ํ์ด[:,1] ** 2,
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐํ๋ จ_๋ํ์ด[:,2] ** 2,
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐํ๋ จ_๋ํ์ด[:,3] ** 2,
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐํ๋ จ_๋ํ์ด[:,4] ** 2,
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐํ๋ จ_๋ํ์ด[:,5] ** 2
))
๋ค์ ๊ณฑ๊น์ง, ๊ฒ๋ค๊ฐ ๊ฐ๊ฐ์ ํญ๋ชฉ์ ์กฐํฉํด์ ๊ณฑํ๋ค๊ณ ์น ๋,
์ดํด ๊ทธ ์์ด ๋ฌด์๋ฌด์ํ๊ฒ ์ง์. ์๊ฐํ๊ธฐ๋ ๋ณต์กํ๊ตฌ์.
์ธ์ดํท๋ฐ์๋ ์ด๋ฐ ๋ฌด์ํ ์ผ์ ๋ฐฉ์งํ๊ธฐ ์ํ ๊ธฐ๋ฅ์ด ๋ง๋ จ๋์ด ์๋๋ฐ์.
๋ฐ๋ก PolynomialFeatures ( ํด๋ฆฌ๋
ธ๋ฏธ์ผ ํผ์ณ ), ๋คํญํน์ฑ ๋ชจ๋์
๋๋ค.์ด ๊ธ์์๋ ๊ฐ๋จํ 'ํด๋ฆฌ'๋ผ๋ ์ ์นญ(?)์ ์ฃผ์ด ๋ถ๋ฅด๋๋ก ํ๊ฒ ์ต๋๋ค.'ํด๋ฆฌ'๋ชจ๋ ์ฌ์ฉ๋ฒ์ 3๋จ๊ณ๋ก ์๋์ ๊ฐ์๋ฐ์
1) ํด๋ฆฌ ๋ชจ๋์ ๋ถ๋ฌ์ ๋คํญ์ ๋ชจ๋ธ์ ๋ง๋ญ๋๋ค.
from sklearn.preprocessing import PolynomialFeatures
ํด๋ฆฌ = PolynomialFeatures(degree=4, include_bias=False)
2) ํ๋ จ์ฉ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด ํ์ ๋ง๊ฒ ํ๋ จ์ํต๋๋ค.
ํด๋ฆฌ.fit(ํ๋ จ์ฉ๋ฐ์ดํฐ)
3) ํ๋ จ๋ ๋คํญ์ ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ผ๋ฉด ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ๋์ต๋๋ค.
ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต = ํด๋ฆฌ.transform(ํ๋ จ์ฉ๋ฐ์ดํฐ)
ํ
์คํธ๋ฐ์ดํฐ_๊ฐ๊ณต = ํด๋ฆฌ.transform(ํ
์คํธ๋ฐ์ดํฐ)
๊ทธ๋ฌ๋ฉด ์ด๋ฌ๋ ํ๋ จ์ฉ ๋ฐ์ดํฐ๊ฐ,
[1420297200.0 2015 1 4 1.3012962962962962]
์ด๋ฐ 'ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต'์ผ๋ก ๋ฐ๋๋๋ค!!
์๋ 6๊ฐ์ ์๋ฃ๊ฐ 120๊ฐ๊ฐ ๋๊ฒ ๋์๊ตฐ์!
[1.42029720e+09 2.01500000e+03 1.00000000e+00 4.00000000e+00 1.30129630e+00
2.01724414e+18 2.86189886e+12 1.42029720e+09 5.68118880e+09 1.84822749e+09
4.06022500e+06 2.01500000e+03 8.06000000e+03 2.62211204e+03 1.00000000e+00
4.00000000e+00 1.30129630e+00 1.60000000e+01 5.20518519e+00 1.69337205e+00
2.86508620e+27 4.06474693e+21 2.01724414e+18 8.06897655e+18 2.62503232e+18
5.76672620e+15 2.86189886e+12 1.14475954e+13 3.72417838e+12 1.42029720e+09
5.68118880e+09 1.84822749e+09 2.27247552e+10 7.39290994e+09 2.40509158e+09
8.18135338e+09 4.06022500e+06 1.62409000e+07 5.28355575e+06 2.01500000e+03
8.06000000e+03 2.62211204e+03 3.22400000e+04 1.04884481e+04 3.41214468e+03
1.00000000e+00 4.00000000e+00 1.30129630e+00 1.60000000e+01 5.20518519e+00
1.69337205e+00 6.40000000e+01 2.08207407e+01 6.77348820e+00 2.20357878e+00
4.06927391e+36 5.77314869e+30 2.86508620e+27 1.14603448e+28 3.72832606e+27
8.19046507e+24 4.06474693e+21 1.62589877e+22 5.28944013e+21 2.01724414e+18
8.06897655e+18 2.62503232e+18 3.22759062e+19 1.05001293e+19 3.41594484e+18
1.16199533e+19 5.76672620e+15 2.30669048e+16 7.50421944e+15 2.86189886e+12
1.14475954e+13 3.72417838e+12 4.57903817e+13 1.48967135e+13 4.84625954e+12
1.42029720e+09 5.68118880e+09 1.84822749e+09 2.27247552e+10 7.39290994e+09
2.40509158e+09 9.08990208e+10 2.95716398e+10 9.62036633e+09 3.12973677e+09
1.64854271e+13 8.18135338e+09 3.27254135e+10 1.06463648e+10 4.06022500e+06
1.62409000e+07 5.28355575e+06 6.49636000e+07 2.11342230e+07 6.87547153e+06
2.01500000e+03 8.06000000e+03 2.62211204e+03 3.22400000e+04 1.04884481e+04
3.41214468e+03 1.28960000e+05 4.19537926e+04 1.36485787e+04 4.44021124e+03
1.00000000e+00 4.00000000e+00 1.30129630e+00 1.60000000e+01 5.20518519e+00
1.69337205e+00 6.40000000e+01 2.08207407e+01 6.77348820e+00 2.20357878e+00
2.56000000e+02 8.32829630e+01 2.70939528e+01 8.81431511e+00 2.86750890e+00]
์ ์ซ์๋ค์ ์ ์ฒด๋์ ์๋ ๋ช ๋ น์ ์ด์ฉํด ํน์ฑ ๋ชฉ๋ก์ ์ถ๋ ฅํ๋ฉด ์ ์ ์๋๋ฐ์.
print(ํด๋ฆฌ.get_feature_names_out())
๊ทธ ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ์ต๋๋ค.
['x0' 'x1' 'x2' 'x3' 'x4'
'x0^2' 'x0 x1' 'x0 x2' 'x0 x3' 'x0 x4'
'x1^2' 'x1 x2' 'x1 x3' 'x1 x4' 'x2^2'
'x2 x3' 'x2 x4' 'x3^2' 'x3 x4' 'x4^2'
'x0^3' 'x0^2 x1' 'x0^2 x2' 'x0^2 x3' 'x0^2 x4'
'x0 x1^2' 'x0 x1 x2' 'x0 x1 x3' 'x0 x1 x4' 'x0 x2^2'
'x0 x2 x3' 'x0 x2 x4' 'x0 x3^2' 'x0 x3 x4' 'x0 x4^2'
'x1^3' 'x1^2 x2' 'x1^2 x3' 'x1^2 x4' 'x1 x2^2'
'x1 x2 x3' 'x1 x2 x4' 'x1 x3^2' 'x1 x3 x4' 'x1 x4^2'
'x2^3' 'x2^2 x3' 'x2^2 x4' 'x2 x3^2' 'x2 x3 x4'
'x2 x4^2' 'x3^3' 'x3^2 x4' 'x3 x4^2' 'x4^3'
'x0^4' 'x0^3 x1' 'x0^3 x2' 'x0^3 x3' 'x0^3 x4'
'x0^2 x1^2' 'x0^2 x1 x2' 'x0^2 x1 x3' 'x0^2 x1 x4' 'x0^2 x2^2'
'x0^2 x2 x3' 'x0^2 x2 x4' 'x0^2 x3^2' 'x0^2 x3 x4' 'x0^2 x4^2'
'x0 x1^3' 'x0 x1^2 x2' 'x0 x1^2 x3' 'x0 x1^2 x4' 'x0 x1 x2^2'
'x0 x1 x2 x3' 'x0 x1 x2 x4' 'x0 x1 x3^2' 'x0 x1 x3 x4' 'x0 x1 x4^2'
'x0 x2^3' 'x0 x2^2 x3' 'x0 x2^2 x4' 'x0 x2 x3^2' 'x0 x2 x3 x4'
'x0 x2 x4^2' 'x0 x3^3' 'x0 x3^2 x4' 'x0 x3 x4^2' 'x0 x4^3'
'x1^4' 'x1^3 x2' 'x1^3 x3' 'x1^3 x4' 'x1^2 x2^2'
'x1^2 x2 x3' 'x1^2 x2 x4' 'x1^2 x3^2' 'x1^2 x3 x4' 'x1^2 x4^2'
'x1 x2^3' 'x1 x2^2 x3' 'x1 x2^2 x4' 'x1 x2 x3^2' 'x1 x2 x3 x4'
'x1 x2 x4^2' 'x1 x3^3' 'x1 x3^2 x4' 'x1 x3 x4^2' 'x1 x4^3'
'x2^4' 'x2^3 x3' 'x2^3 x4' 'x2^2 x3^2' 'x2^2 x3 x4'
'x2^2 x4^2' 'x2 x3^3' 'x2 x3^2 x4' 'x2 x3 x4^2' 'x2 x4^3'
'x3^4' 'x3^3 x4' 'x3^2 x4^2' 'x3 x4^3' 'x4^4']
x0, x1, x2, .. ๋ฑ์ ๊ฐ๊ฐ ์ฒซ๋ฒ์งธ, ๋๋ฒ์งธ, ์ธ๋ฒ์งธ ๋ฐ์ดํฐ์ด๊ณ
'x1^2'์ ๋๋ฒ์งธ ๋ฐ์ดํฐ์ ์ ๊ณฑ์ด๊ณ ,
'x0^2 x1 x4' ๋ ์ฒซ๋ฒ์งธ ๋ฐ์ดํฐ์ ์ ๊ณฑ, ๋๋ฒ์งธ ๋ฐ์ดํฐ, 5๋ฒ์งธ ๋ฐ์ดํฐ๋ฅผ ๊ณฑํ๊ฒ๋๋ค.
๊ฐ๋จํ ๋งํด ์ ๊ณฑ์ด๋ ๊ณฑํ๊ธฐํ ์ ์๋ ๊ฒฝ์ฐ์ ์๊ฐ ๋ชจ๋ ๋์ด๋์๋ค๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
๋ง์์ง ์ฐจ์๋ก ๋จธ์ ๋ฌ๋์!
์ด๋ ๊ฒ ๋ง์์ง ๋ฐ์ดํฐ๋ก ๋จธ์ ๋ฌ๋ํ๋ฉด ๊ฒฐ๊ณผ๊ฐ ์ข ๋ ๋์์ง๊น์?
๋์์ง๋๋ผ๊ตฌ์ :)
์ฃผ์ํ ์ ์ ์ด๋ ๊ฒ ๋คํญ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฟ๋ฆฐ ๋ค์์ ์ค์ผ์ผ๋ฌ๋ฅผ ์ ์ฉํด์ผ์ง,
๊ทธ ์์๊ฐ ๋ฐ๋๋ฉด ๋จธ์ ๋ฌ๋์ด ์๋๋ก๋ฉ๋ค๋ก ๊ฐ๋ฒ๋ฆฝ๋๋ค :)
์ด ํ ์ค์ผ์ผ๋ฌ ์ ์ฉ ๋จ๊ณ๊ฐ ์ด์ด์ง๋๋ค.
from sklearn.preprocessing import StandardScaler
์ค์ผ์ผ๋ฌ = StandardScaler()
์ค์ผ์ผ๋ฌ.fit(ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต)
ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต = ์ค์ผ์ผ๋ฌ.transform(ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต)
ํ
์คํธ๋ฐ์ดํฐ_๊ฐ๊ณต = ์ค์ผ์ผ๋ฌ.transform(ํ
์คํธ๋ฐ์ดํฐ_๊ฐ๊ณต)
์ด๋ฒ์๋ ๋ผ์ ๋ชจ๋ธ์ ์ ์ฉํด ๋ณด๋ ค๊ณ ํ๋๋ฐ์.
๊ธฐ์์ด๋ฉด ๋ฆฟ์ง ๋ชจ๋ธ๊ณผ ๋น๊ตํด๋ณด๊ธฐ ์ํด ๋ฆฟ์ง ๋ชจ๋ธ๊ณผ ๋ผ์ ๋ชจ๋ธ์ ๋์์ ํ๋ จ์์ผ ๋ณด์์ต๋๋ค.
๊ทธ๋๋ ๋๋๊ตฌ์? ์ปดํจํฐ๊ฐ ๋ฒํ
จ์ฃผ๊ธฐ๋ง ํ๋ค๋ฉด์ผ ๋ฌธ์ ๋ ๊ฒ ์์ง์ :)
#=====================================
# ๋ฆฟ์ง๋ชจ๋ธ
from sklearn.linear_model import Ridge
๋ฆฟ์ง๋ชจ๋ธ = Ridge(alpha=10)
๋ฆฟ์ง๋ชจ๋ธ.fit(ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต, ํ๋ จ์ฉ๋ชฉํ)
# ์ข
๋ฅ๊ฐ ๋ชฉํ๊ฐ ์๋ ์ด์ ์ ํ๋๋ ์ธก์ ๋ถ๊ฐ
print("๋ฆฟ์ง ํ๋ จ์ฉ๋ชจ๋ธ ์ ํ๋")
print(๋ฆฟ์ง๋ชจ๋ธ.score(ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต, ํ๋ จ์ฉ๋ชฉํ))
print("๋ฆฟ์ง ํ
์คํธ๋ชจ๋ธ ์ ํ๋")
print(๋ฆฟ์ง๋ชจ๋ธ.score(ํ
์คํธ๋ฐ์ดํฐ_๊ฐ๊ณต, ํ
์คํธ๋ชฉํ))
ํ๋ จ์ฉ๋ชฉํ์์ธก_๋ฆฟ์ง = ๋ฆฟ์ง๋ชจ๋ธ.predict(ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต)
ํ
์คํธ๋ชฉํ์์ธก_๋ฆฟ์ง = ๋ฆฟ์ง๋ชจ๋ธ.predict(ํ
์คํธ๋ฐ์ดํฐ_๊ฐ๊ณต)
#=====================================
# ๋ผ์๋ชจ๋ธ
from sklearn.linear_model import Lasso
๋ผ์๋ชจ๋ธ = Lasso(alpha=10)
๋ผ์๋ชจ๋ธ.fit(ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต, ํ๋ จ์ฉ๋ชฉํ)
# ์ข
๋ฅ๊ฐ ๋ชฉํ๊ฐ ์๋ ์ด์ ์ ํ๋๋ ์ธก์ ๋ถ๊ฐ
print("๋ผ์ ํ๋ จ์ฉ๋ชจ๋ธ ์ ํ๋")
print(๋ผ์๋ชจ๋ธ.score(ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต, ํ๋ จ์ฉ๋ชฉํ))
print("๋ผ์ ํ
์คํธ๋ชจ๋ธ ์ ํ๋")
print(๋ผ์๋ชจ๋ธ.score(ํ
์คํธ๋ฐ์ดํฐ_๊ฐ๊ณต, ํ
์คํธ๋ชฉํ))
ํ๋ จ์ฉ๋ชฉํ์์ธก_๋ผ์ = ๋ผ์๋ชจ๋ธ.predict(ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต)
ํ
์คํธ๋ชฉํ์์ธก_๋ผ์ = ๋ผ์๋ชจ๋ธ.predict(ํ
์คํธ๋ฐ์ดํฐ_๊ฐ๊ณต)
์ ๊ทธ๋ฐ๋ฐ ์ํ๊ฐ์ ๋ณด๋ ์ง๋๋ฒ์๋ 0.1์ด์๋๋ฐ, ์ด๋ฒ์๋ 10 ์ด๊ตฐ์?
์ง๋ ๊ฒ์๊ธ ์ํ๊ฐ ์ ์ฉ
๋ฆฟ์ง๋ชจ๋ธ = Ridge(alpha=์ํ๊ฐ)
์ด๋ฒ ๊ฒ์๊ธ ์ํ๊ฐ ์ ์ฉ
๋ฆฟ์ง๋ชจ๋ธ = Ridge(alpha=10)
:
๋ผ์๋ชจ๋ธ = Lasso(alpha=10)
์ด๋ ํญ์ด ๋ง์์๋ก ๋์ฑ ๋ฐ์ดํฐ์ ๊ณผ์ ํฉ์ด ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ง์ผ ์ด๋ ๊ฒ ํญ์ด ๋ง์๋ฐ ์ํ๊ฐ 0.1 ์ ๋๋ฅผ ์ฃผ๊ฒ ๋๋ฉด. 2๊ฐ์ ์๊ณ ๋ฆฌ์ฆ ๋ชจ๋ ์ด๋ ๊ฒ ๋๋ฒ๋ฆฌ๋๋ผ๊ตฌ์.
(ํ์:์๋ณธ, ๋
น์:๋ฆฟ์ง, ๋นจ๊ฐ:๋ผ์)
ํญ์ด ๋ง์์๋ก ์ํ๊ฐ์ ๋ ๋๊ฒ ์ค์ผ ํ๋๋ฐ, ๋ณธ ์์ค์์ ์์๋ธ ์ต์ ์ ๊ฐ์ด 10์
๋๋ค.
์ต์ข ์์ค
์ด์ ํ๋์ ๊ทธ๋ํ์ ์๋ณธ, ๋ฆฟ์ง, ๋ผ์ ๊ทธ๋ํ๋ฅผ ํจ๊ป ๊ทธ๋ฆด์ผ๋ง ๋จ์๊ตฐ์.
๊ทธ๋ํ์ชฝ ์์ค๋ ๋ณ๋ก ๋ณ๋๋ ๋ถ๋ถ์ด ์์ด ( ์์๋ง ๋ณ๋ )
์ถ๊ฐ ์ค๋ช
์์ด ์ ์ฒด ์์ค๋ก ๋งค๋ญ์ ์ง์ต๋๋ค.
<html>
<head>
<title>๋คํญํ๊ท + ๋ผ์ ๋ฆฌ๊ทธ๋ ์
</title>
<link rel="stylesheet"
href="https://pyscript.net/alpha/pyscript.css" />
<script defer
src="https://pyscript.net/alpha/pyscript.js"></script>
<py-env>
- pandas
- matplotlib
- seaborn
- scikit-learn
- paths:
- ./NANUMMYEONGJO.TTF
- ./NANUMMYEONGJOBOLD.TTF
- ./common.py
</py-env>
</head>
<body>
<link rel="stylesheet" href="pytable.css"/>
<py-script>
import pandas as pd
from pyodide.http import open_url
from common import *
import numpy as np
from datetime import datetime
# ๊ฒฝ๊ณ ๋ฌธ๊ตฌ ์ ๊ฑฐ
import warnings
warnings.filterwarnings( 'ignore' )
import gc
# ํ๋ค์ค์์ csv ๋ฅผ ๋ฐ์ดํฐ ํ๋ ์์ผ๋ก ์ฝ์ด์ด
๋งค์ถ๋ฐ์ดํฐ = pd.read_csv(open_url(
"http://dreamplan7.cafe24.com/pyscript/csv/avocado.csv"
))
# 3๊ฐ ํ๋๋ง ์ถ๋ ค์ ๋ฐ์ดํฐ ํ๋ ์์ ๋ค์ ๋ง๋ฌ
๋งค์ถ๋ฐ์ดํฐ = ๋งค์ถ๋ฐ์ดํฐ[[
'Date',
'Total Volume',
'AveragePrice'
]]
# ์๋ฌธ ์ ๋ชฉ์ ํ๊ธ๋ก ๋ณ๊ฒฝ
๋งค์ถ๋ฐ์ดํฐ.columns = [
'๋ ์ง',
'๋งค์ถ๋',
'ํ๊ท ๊ฐ๊ฒฉ'
]
์ฃผ๊ฐ๋งค์ถ_๋งค์ถ๋=๋งค์ถ๋ฐ์ดํฐ.fillna(0) \
.groupby('๋ ์ง', as_index=False)[['๋งค์ถ๋']].sum() \
.sort_values(by='๋ ์ง', ascending=True)
์ฃผ๊ฐ๋งค์ถ_ํ๊ท ๊ฐ=๋งค์ถ๋ฐ์ดํฐ.fillna(0) \
.groupby('๋ ์ง', as_index=False)[['ํ๊ท ๊ฐ๊ฒฉ']].mean() \
.sort_values(by='๋ ์ง', ascending=True)
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ=pd.merge(์ฃผ๊ฐ๋งค์ถ_๋งค์ถ๋, ์ฃผ๊ฐ๋งค์ถ_ํ๊ท ๊ฐ, on='๋ ์ง')
# ๋ ์ง(์๊ฐ๊ฐ) ์ถ๊ฐ
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ.insert(1, '๋ ์ง(์๊ฐ๊ฐ)',
'',
True)
for i in ์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ['๋ ์ง'].index:
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ['๋ ์ง(์๊ฐ๊ฐ)'].loc[i]=time.mktime(
datetime.strptime(
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ['๋ ์ง'].loc[i],
'%Y-%m-%d'
).timetuple()
)
# 10000์ผ๋ก ๋๋ ๋งค์ถ๋ ํ๋ ์ถ๊ฐ
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ.insert(3, '๋งค์ถ๋(๋ง)',
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ['๋งค์ถ๋']/10000,
True)
# ํ๋ จํ์ต์ฉ์ผ๋ก ๋ ์ง๋ฅผ ์ฐ๋, ์, ์ผ๋ก ๋๋๋ค
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ.insert(4, '์ฐ๋', '', True)
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ.insert(5, '์', '', True)
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ.insert(6, '์ผ', '', True)
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ.insert(7, '์ฃผ', '', True)
for i in ์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ['๋ ์ง'].index:
์์=str(์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ['๋ ์ง'].loc[i]).split('-')
์ฐ๋=int(์์[0])
์=int(์์[1])
์ผ=int(์์[2])
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ['์ฐ๋'].loc[i]=์ฐ๋
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ['์'].loc[i]=์
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ['์ผ'].loc[i]=์ผ
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ['์ฃผ'].loc[i]=str(
datetime(์ฐ๋, ์, ์ผ).isocalendar()[1]
)
createElementDiv(
document,
Element,
'output2'
).write(์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ)
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐํ๋ จ_๋ํ์ด = ์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ[['๋ ์ง(์๊ฐ๊ฐ)', '์ฐ๋', '์', '์ผ', 'ํ๊ท ๊ฐ๊ฒฉ']].to_numpy()
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ๋ชฉํ_๋ํ์ด = ์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ['๋งค์ถ๋(๋ง)'].to_numpy()
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ๋ ์ง_๋ํ์ด = ์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ['๋ ์ง'].to_numpy()
from sklearn.model_selection import train_test_split
ํ๋ จ์ฉ๋ฐ์ดํฐ, ํ
์คํธ๋ฐ์ดํฐ, ํ๋ จ์ฉ๋ชฉํ, ํ
์คํธ๋ชฉํ = \
train_test_split(
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐํ๋ จ_๋ํ์ด,
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ๋ชฉํ_๋ํ์ด,
random_state=100,
shuffle=False)
from sklearn.preprocessing import PolynomialFeatures
ํด๋ฆฌ = PolynomialFeatures(degree=4, include_bias=False) # ์ ํธ ์์ฑ์ ์ ๊ฑฐ
ํด๋ฆฌ.fit(ํ๋ จ์ฉ๋ฐ์ดํฐ) # ํน์ฑ์ ๋คํญ์ผ๋ก ์๋์ผ๋ก ๋ถ๋ฆผ
#print(ํด๋ฆฌ.get_feature_names_out())
ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต = ํด๋ฆฌ.transform(ํ๋ จ์ฉ๋ฐ์ดํฐ) # ํ์ต์ ์ถ๊ฐ๋ ํ๋ผ๋ฏธํฐ์ ๋ง๊ฒ ๋คํญ ๋ณํ
ํ
์คํธ๋ฐ์ดํฐ_๊ฐ๊ณต = ํด๋ฆฌ.transform(ํ
์คํธ๋ฐ์ดํฐ) # ํ
์คํธ ์ธํธ๋ ๋คํญ ๋ณํ, fitํ๋ ํ๋ จ poly ๋ฅผ ์ฌ์ฉ.
#print(ํ๋ จ์ฉ๋ฐ์ดํฐ[0]);
#print(ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต[0]);
#=====================================
from sklearn.preprocessing import StandardScaler
์ค์ผ์ผ๋ฌ = StandardScaler()
์ค์ผ์ผ๋ฌ.fit(ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต)
ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต = ์ค์ผ์ผ๋ฌ.transform(ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต)
ํ
์คํธ๋ฐ์ดํฐ_๊ฐ๊ณต = ์ค์ผ์ผ๋ฌ.transform(ํ
์คํธ๋ฐ์ดํฐ_๊ฐ๊ณต)
#=====================================
# ๋ฆฟ์ง๋ชจ๋ธ
from sklearn.linear_model import Ridge
๋ฆฟ์ง๋ชจ๋ธ = Ridge(alpha=10)
๋ฆฟ์ง๋ชจ๋ธ.fit(ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต, ํ๋ จ์ฉ๋ชฉํ)
# ์ข
๋ฅ๊ฐ ๋ชฉํ๊ฐ ์๋ ์ด์ ์ ํ๋๋ ์ธก์ ๋ถ๊ฐ
print("๋ฆฟ์ง ํ๋ จ์ฉ๋ชจ๋ธ ์ ํ๋")
print(๋ฆฟ์ง๋ชจ๋ธ.score(ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต, ํ๋ จ์ฉ๋ชฉํ))
print("๋ฆฟ์ง ํ
์คํธ๋ชจ๋ธ ์ ํ๋")
print(๋ฆฟ์ง๋ชจ๋ธ.score(ํ
์คํธ๋ฐ์ดํฐ_๊ฐ๊ณต, ํ
์คํธ๋ชฉํ))
ํ๋ จ์ฉ๋ชฉํ์์ธก_๋ฆฟ์ง = ๋ฆฟ์ง๋ชจ๋ธ.predict(ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต)
ํ
์คํธ๋ชฉํ์์ธก_๋ฆฟ์ง = ๋ฆฟ์ง๋ชจ๋ธ.predict(ํ
์คํธ๋ฐ์ดํฐ_๊ฐ๊ณต)
#=====================================
# ๋ผ์๋ชจ๋ธ
from sklearn.linear_model import Lasso
๋ผ์๋ชจ๋ธ = Lasso(alpha=10)
๋ผ์๋ชจ๋ธ.fit(ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต, ํ๋ จ์ฉ๋ชฉํ)
# ์ข
๋ฅ๊ฐ ๋ชฉํ๊ฐ ์๋ ์ด์ ์ ํ๋๋ ์ธก์ ๋ถ๊ฐ
print("๋ผ์ ํ๋ จ์ฉ๋ชจ๋ธ ์ ํ๋")
print(๋ผ์๋ชจ๋ธ.score(ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต, ํ๋ จ์ฉ๋ชฉํ))
print("๋ผ์ ํ
์คํธ๋ชจ๋ธ ์ ํ๋")
print(๋ผ์๋ชจ๋ธ.score(ํ
์คํธ๋ฐ์ดํฐ_๊ฐ๊ณต, ํ
์คํธ๋ชฉํ))
ํ๋ จ์ฉ๋ชฉํ์์ธก_๋ผ์ = ๋ผ์๋ชจ๋ธ.predict(ํ๋ จ์ฉ๋ฐ์ดํฐ_๊ฐ๊ณต)
ํ
์คํธ๋ชฉํ์์ธก_๋ผ์ = ๋ผ์๋ชจ๋ธ.predict(ํ
์คํธ๋ฐ์ดํฐ_๊ฐ๊ณต)
#=====================================
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import matplotlib as mat
# ๊ธฐ์ค ํฐํธ ๋ณ๊ฒฝ : legend ์ ํ๊ธ์ ์ ์ฉํ๋ ค๋ฉด ํ์
fm.fontManager.addfont('./NANUMMYEONGJO.TTF') # ํฐํธ๋ช
: NanumMyeongjo
mat.rc('font', family='NanumMyeongjo')
###################
# ํฐํธ ๋ชฉ๋ก ์ถ๋ ฅ ( ํฐํธ ์ถ๊ฐ ํ ์ ํํ ์ด๋ฆ์ ํ์ธํ๋ ค๋ฉด ํ์
#font_list = [font.name for font in fm.fontManager.ttflist]
#for f in font_list:
# print(f)
###################
# ๊ฐ๋ณ ํฐํธ ์ ์ฉ
NanumMyengjo = fm.FontProperties(
fname='./NANUMMYEONGJO.TTF'
)
NanumMyengjoBold = fm.FontProperties(
fname='./NANUMMYEONGJOBOLD.TTF'
)
# ๊ทธ๋ํ
fig = plt.figure(
figsize=(15, 7)
)
plt.xticks(
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐํ๋ จ_๋ํ์ด[:, 0],
์ฃผ๊ฐ๋งค์ถ๋ฐ์ดํฐ๋ ์ง_๋ํ์ด,
rotation=90, fontsize=8)
plt.title('์ฃผ๊ฐ ์๋ณด์นด๋ ๋งค์ถ๋(๋ฆฟ์ง,๋ผ์)',
fontproperties=NanumMyengjoBold,
fontsize=32
);
line_alpha=0.5
# ์๋ณธ
plt.plot(
ํ๋ จ์ฉ๋ฐ์ดํฐ[:,0],
ํ๋ จ์ฉ๋ชฉํ,
#marker='o',
color='gray',
label='์๋ณธ',
alpha=line_alpha
)
plt.plot(
ํ
์คํธ๋ฐ์ดํฐ[:, 0],
ํ
์คํธ๋ชฉํ,
#marker='o',
color='gray',
alpha=line_alpha
)
# ๋ฆฟ์ง
plt.plot(
ํ๋ จ์ฉ๋ฐ์ดํฐ[:,0],
ํ๋ จ์ฉ๋ชฉํ์์ธก_๋ฆฟ์ง,
marker='d',
color='blue',
label='ํ๋ จํจํด(๋ฆฟ์ง)',
alpha=line_alpha
)
# ๋ผ์
plt.plot(
ํ๋ จ์ฉ๋ฐ์ดํฐ[:,0],
ํ๋ จ์ฉ๋ชฉํ์์ธก_๋ผ์,
marker='d',
color='red',
label='ํ๋ จํจํด(๋ผ์)',
alpha=line_alpha
)
# ๋ฆฟ์ง ์์ธก
plt.plot(
ํ
์คํธ๋ฐ์ดํฐ[:, 0],
ํ
์คํธ๋ชฉํ์์ธก_๋ฆฟ์ง,
marker='*',
color='green',
label='์์ธกํจํด(๋ฆฟ์ง)',
alpha=line_alpha
)
# ๋ผ์ ์์ธก
plt.plot(
ํ
์คํธ๋ฐ์ดํฐ[:, 0],
ํ
์คํธ๋ชฉํ์์ธก_๋ผ์,
marker='*',
color='red',
label='์์ธกํจํด(๋ผ์)',
alpha=line_alpha
)
plt.xlabel('๋ ์ง', fontsize=16)
plt.ylabel('๋งค์ถ๋(๋จ์:๋ง)', fontsize=12)
plt.legend(
shadow=True
)
ax = plt.gca()
# ์ถ๋ง ๊ทธ๋ฆฌ๋
ax.xaxis.grid(True)
# ๋ฐฐ๊ฒฝ์, ๋ง์ง ์กฐ์
ax.set_facecolor('#e8e7d2')
ax.margins(x=0.01, y=0.02)
# ์ฃผ์ ์ด์ํ ์ฌ๋ฐฑ ์์ ๊ธฐ
fig.tight_layout()
fig
</py-script>
</body>
</html>
์ ํ๋๋ ์ง๋๋ฒ๋ณด๋ค ์ฝ๊ฐ ๋ ์ข์์ก์ต๋๋ค.
๋ฆฟ์ง๋ณด๋ค ๋ผ์๊ฐ ๋ ์ ํ๋๊ฐ ๋์๋ฐ์. ๋ญ ์ด๊ฑด ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค๊ณ ํ๋๋ผ๊ตฌ์.
๋ฆฟ์ง ํ๋ จ์ฉ๋ชจ๋ธ ์ ํ๋
0.7248403810426859
๋ฆฟ์ง ํ
์คํธ๋ชจ๋ธ ์ ํ๋
0.7511139286301507
๋ผ์ ํ๋ จ์ฉ๋ชจ๋ธ ์ ํ๋
0.7256643900380024
๋ผ์ ํ
์คํธ๋ชจ๋ธ ์ ํ๋
0.7615459788185178
๊ทธ๋ํ์์ ์ด๋ค๊ฒ ๋ฆฟ์ง๊ณ ์ด๋ค๊ฒ ๋ผ์์ธ์ง๋ ์ผ์ชฝ์ ํ์๋๋ ๋ฒ๋ก๋ฅผ ํ์ธํด ์ฃผ์ธ์ :)
๋ณธ ์์ ์ ์คํ๊ฒฐ๊ณผ๋ ํฌ๋ ์ด์ ํํ์ด์ง์์๋ ํ์ธํ์ค ์ ์์ต๋๋ค.
http://dreamplan7.cafe24.com/pyscript/py10-6.html
๋ง๋ฌด~๋ฆฌ
์ค๋์ ๋ฐ์ดํฐ์ ์ฐจ์๋ฅผ 4์ฐจ ๋ฐฉ์ ์๊น์ง ์ ์ฉํ ์ ์๊ฒ,
๊ทธ๊ฒ๋ ์๋์ด ์๋ ์๋์ผ๋ก ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์์ต๋๋ค.
์์ธ๋ฌ ๊ณผ์ ํฉ ๋ฐฉ์ง์ฉ ๋ฆฟ์ง ๋ฆฌ๊ทธ๋ ์
๊ณผ ๋ผ์ ๋ฆฌ๊ทธ๋ ์
์ ๋์์ ๋จธ์ ๋ฌ๋ํ๊ณ ,
๋์์ ๊ทธ๋ํ์ ํ๊ธฐํ๋ ๋ถ๋ถ์ ์ดํด๋ณด์๋๋ฐ์.
์ง๊ธ๊น์ง๋ ์ํ๊ฐ์ ์์๋ด๊ธฐ ์ํด ๊ณ์ ํ์ด์ง๋ฅผ ์๋ก ๊ณ ์นจํ๊ณ ์๋ก ๊ณ ์นจํ๋ ๋ฐฉ๋ฒ์ ์จ์์ต๋๋ค๋ง,
๋ค์ ๊ฒ์๊ธ์์๋ ํ์ด์คํฌ๋ฆฝํธ์ ํน์ฅ์ ์ ์ด๋ฆฌ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์์ผ๋ ํฌ๋ ์ด๊ฐ ํฐ ์๋ฆฌ๋ฅผ ์น๋ ๊ฑฐ๊ฒ ์ง์ :)
์๋ฌด์ชผ๋ก ํ์ํ์ ๋ถ๊ป ๋์์ด ๋์
จ์์ง์ :)
๋ฐฉ๋ฌธํด์ฃผ์๋ ๋ชจ๋ ๋ถ๋ค๊ป ๋ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ ์ตํ์
จ๋ค๋ฉด ๊ณต๊ฐ ํ๋ฐฉ, ๋๊ธ์ ๊ตฟ์ก!
๊ฐ์ฌํฉ๋๋ค~
๋ค์ ๊ฒ์๊ธ : https://itadventure.tistory.com/558
ํ๋(16) - ํ์ด์คํฌ๋ฆฝํธ์ ํน์ข์~์ ์ผ๋ก ๋จธ์ ๋ฌ๋!
๐ณ 'ํ๋'๋ ํฌ๋ ์ด๊ฐ ๋์ ํ๊ณ ์๋ ํ์ด์คํฌ๋ฆฝํธ ๋์ ๊ธฐ์ ์ค์๋ง์ ๋๋ค. ์ง๋ ๊ฒ์๊ธ์์ ์ฐ์ฌ๋๋ ๊ธ์ ๋๋ค. : https://itadventure.tistory.com/557 ํ๋!(15) - ๋ผ์ํ๊ท์ 4์ฐจ๋ฐฉ์ ์๊น์ง ๐ฟ 'ํ๋'๋
itadventure.tistory.com