sklearn.cross_validation.cross_val_score์์ ๋ฐํ ๋ ํ๊ท ์ ๊ณฑ ์ค์ฐจ๋ ํญ์ ์์์ ๋๋ค. ์ผ๋ถ ํ์ดํผ ํ๋ผ๋ฏธํฐ๊ฐ ์ฃผ์ด์ง๋ฉด์ด ํจ์์ ์ถ๋ ฅ์ ์ต๋ํ์ ์ฌ์ฉํ ์ ์๋๋ก ์ค๊ณ๋ ๊ฒฐ์ ์ด์ง๋ง cross_val_score๋ฅผ ์ง์ ์ฌ์ฉํ ๋๋ ๋งค์ฐ ํผ๋ ์ค๋ฝ์ต๋๋ค. ์ ์ด๋ ๋๋ ์ ๊ณฑ์ ํ๊ท ์ด ์ด๋ป๊ฒ ์์๊ฐ ๋ ์ ์๋์ง ์ค์ค๋ก์๊ฒ ๋ฌผ์๊ณ cross_val_score๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ์ง ์๊ฑฐ๋ ์ ๊ณต๋ ๋ฉํธ๋ฆญ์ ์ฌ์ฉํ์ง ์๋๋ค๊ณ ์๊ฐํ์ต๋๋ค. sklearn ์์ค ์ฝ๋๋ฅผ ํํค์น ํ์์ผ ํ์งํ์ด ๋ค์งํ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค.
์ด ๋์์ scorer.py์ make_scorer์ ์ธ๊ธ๋์ด ์์ง๋ง cross_val_score์๋ ์ธ๊ธ๋์ด ์์ง ์์ผ๋ฉฐ ๊ทธ๋ ๊ฒ๋์ด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋น์ ์
greater_is_better : boolean, default=True
Whether score_func is a score function (default), meaning high is good,
or a loss function, meaning low is good. In the latter case, the scorer
object will sign-flip the outcome of the score_func.
http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html์์
? (์ฐธ๊ณ ๋ก)
cross_val_score ๋ฌธ์์์ ๋ ๋ช ํํด์ง ์ ์๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
์ ๊ณ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค
์ฌ์ค ์ฐ๋ฆฌ๋ Scorer ๋ฆฌํฉํ ๋ง์ ํ ๋ ๊ทธ ๋ฌธ์ ๋ฅผ ๊ฐ๊ณผํ์ต๋๋ค. ๋ค์์ ๋งค์ฐ ๋ฐ ์ง๊ด์ ์ ๋๋ค.
>>> import numpy as np
>>> from sklearn.datasets import load_boston
>>> from sklearn.linear_model import RidgeCV
>>> from sklearn.cross_validation import cross_val_score
>>> boston = load_boston()
>>> np.mean(cross_val_score(RidgeCV(), boston.data, boston.target, scoring='mean_squared_error'))
-154.53681864311497
/ cc @larsmans
BTW ๋ฌธ์ ๋ฌธ์ ๋ผ๋ ๋ฐ ๋์ํ์ง ์์ต๋๋ค. cross_val_score
๋ ์ ์ ์ด๋ฆ๊ณผ ์ผ์นํ๋ ๋ถํธ๊ฐ์๋ ๊ฐ์ ๋ฐํํด์ผํฉ๋๋ค. ์ด์์ ์ผ๋ก๋ GridSearchCV(*params).fit(X, y).best_score_
๋ ์ผ๊ด์ฑ์ด ์์ด์ผํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด API๊ฐ ๋งค์ฐ ํผ๋ ์ค๋ฝ์ต๋๋ค.
๋๋ ๋ํ ๋ถํธ๋ฅผ ๋ฐ๊พธ์ง ์๊ณ ์ค์ MSE๋ฅผ ๋ฐํํ๋ ๋ณ๊ฒฝ์ด ๋ ๋์ ์ต์ ์ด ๋ ๊ฒ์ด๋ผ๋ ๋ฐ ๋์ํฉ๋๋ค.
๋์ ์ ๊ฐ์ฒด๋ greater_is_better
ํ๋๊ทธ๋ฅผ ์ ์ฅํ ์ ์์ผ๋ฉฐ ๋์ ์๊ฐ ์ฌ์ฉ๋ ๋๋ง๋ค ํ์ํ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ๋ถํธ๋ฅผ ๋ค์ง์ ์ ์์ต๋๋ค (์ : GridSearchCV
.
์ฌ๊ธฐ์ ์ฌ์ฉ์ฑ ๋ฌธ์ ๊ฐ ์๋ค๋ ๋ฐ ๋์ํ์ง๋ง @ogrisel ์ ์๋ฃจ์ ์ ์์ ํ ๋์ํ์ง๋ ์์ต๋๋ค.
์ ์ ์ด๋ฆ๊ณผ ์ผ์นํ๋ ๋ถํธ๊ฐ์๋ ๊ฐ์ ๋ฐํํฉ๋๋ค.
์ฅ๊ธฐ์ ์ผ๋ก ๋ณด๋ฉด ์ ๋ขฐํ ์์๋ ํดํน์ด๊ธฐ ๋๋ฌธ์
๋๋ค. ๋๊ตฐ๊ฐ mse
์ ๊ฐ์ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ์ ์ง์ ์ฑ์ ์๋ฅผ ์ ์ํ๋ฉด ์ด๋ป๊ฒ๋ฉ๋๊น? ์ด๋ฆ ์ง์ ํจํด์ ๋ฐ๋ฅด์ง๋ง ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ ๋ฐ์ฝ๋ ์ดํฐ๋ก ๋์ ์๋ฅผ ๊ฐ์ผ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
๋์ ์ ๊ฐ์ฒด๋ greater_is_better ํ๋๊ทธ๋ฅผ ์ ์ฅํ ์ ์์ผ๋ฉฐ ๋์ ์๊ฐ ์ฌ์ฉ๋ ๋๋ง๋ค ํ์ํ ๊ฒฝ์ฐ์ ํ์๋ฅผ ๋ค์ง์ ์ ์์ต๋๋ค (์ : GridSearchCV).
์ด๊ฒ์ ๋์ ์๊ฐ 0.13๊ณผ 0.14 ๋ฆด๋ฆฌ์ค ์ฌ์ด์ ๊ฐ๋ฐ ๊ณผ์ ์์ ์๋ ํ ์ผ์ด๋ฉฐ ์ ์๋ฅผ ํจ์ฌ ๋ ์ด๋ ต๊ฒ ๋ง๋ค์์ต๋๋ค. ๋ํ ์ค์ฝ์ด๋ฌ ์ฝ๋์์ greater_is_better
์์ฑ์ด ์ฌ๋ผ์ง๊ณ ๊ทธ๋ฆฌ๋ ๊ฒ์ ์ฝ๋ ์ค๊ฐ์ ๋ค์ ๋ํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ ๋ฐ๋ฅด๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค์์ต๋๋ค. ์ด์์ ์ผ๋ก๋ ๊ฐ๋จํ ํจ์๋ก ํ ์์๋ ์ผ์ํ๊ธฐ ์ํด์๋ ํน๋ณํ Scorer
ํด๋์ค๊ฐ ํ์ํ์ต๋๋ค.
์ ์๋ฅผ ์ต์ ํํ๋ ค๋ฉด _ ์ต๋ํ _ํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฌ์ฉ์ ํธ์๋ฅผ ์ํด ์ ์์ _display_ ๋ง ๋ณ๊ฒฝํ๊ณ ๊ธฐ๋ณธ ์ ๊ณต ์ด๋ฆ์ ๊ธฐ๋ฐ์ผ๋ก ํด๋ฆฌ์คํฑ์ ์ฌ์ฉํ ์์๋ ๋งค๊ฐ ๋ณ์ score_is_loss
โ ["auto", True, False]
๋ฅผ ๋์
ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ธฐ์ฐจ์์ ๋ด๋ ค์ผํ๊ธฐ ๋๋ฌธ์ ์๋๋ฌ ์๋ตํ์ต๋๋ค. "๋์คํ๋ ์ด"๊ฐ ์๋ฏธํ๋ ๊ฒ์ ์ค์ ๋ก cross_val_score
์ ๋ฐํ ๊ฐ์
๋๋ค. ๋์ ์๋ ๋จ์ํ๊ณ ๊ท ์ผํด์ผํ๋ฉฐ ์๊ณ ๋ฆฌ์ฆ์ ํญ์ ์ต๋ํ๋์ด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด๋ก ์ธํด ๊ธฐ๋ณธ ์ ๊ณต ๋ฐ ์ฌ์ฉ์ ์ง์ ์ฑ์ ์๊ฐ์ ๋น๋์นญ์ด ๋ฐ์ํฉ๋๋ค.
ํ @GaelVaroquaux.
๋๋ score_is_loss ์๋ฃจ์ ์ด๋ ๊ทธ ํจ๊ณผ๋ฅผ ์ข์ํฉ๋๋ค. ์ ์ ์ด๋ฆ๊ณผ ์ผ์นํ๋ ๋ถํธ ๋ณ๊ฒฝ์ ์ ์งํ๊ธฐ ์ด๋ ค์ด ๊ฒ ๊ฐ์ต๋๋ค @larsmans๊ฐ ์ธ๊ธํ๋ฏ์ด ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค.
๊ฒฐ๋ก ์ ๋ฌด์์ด๋ฉฐ ์ด๋ค ํด๊ฒฐ์ฑ ์ ์ฐพ์์ผํฉ๋๊น? :)
@tdomhan @jaquesgrobler @larsmans ์ด๊ฒ์ด r2
์๋ ์ ์ฉ๋๋์ง ์๊ณ ์์ต๋๊น? ๋๋ ๊ฒ์ผ๋ก ๋ํ ๋ฉ๋๊น r2
์ ์์ ์ํด ๋ฐํ GridSearchCV
๋์ ๋ํ ๋๋ถ๋ถ ๋ถ์ ์ ์ธ ElasticNet
, Lasso
๋ฐ Ridge
.
Rยฒ๋ ์์ ๋๋ ์์ ์ผ ์ ์์ผ๋ฉฐ ์์๋ ๋ชจ๋ธ์ ์ฑ๋ฅ์ด ๋งค์ฐ ๋ฎ์์ ์๋ฏธํฉ๋๋ค.
IIRC, @GaelVaroquaux ๋ greater_is_better=False
๋ ์์๋ฅผ ๋ฐํํ๋ ์ง์ง์์์ต๋๋ค.
r2
๋ ์ ์ ํจ์ (ํฌ๋ฉด ํด์๋ก ์ข์)์ด๋ฏ๋ก ๋ชจ๋ธ์ด ์ข์ผ๋ฉด ์์ ์ฌ์ผํ์ง๋ง ์ค์ ๋ก ์์ ์ผ ์์๋ ๋ช ์๋๋ ์ฑ๋ฅ ์ธก์ ํญ๋ชฉ ์ค ํ๋์ด๋ฉฐ ์ด๋ 0๋ณด๋ค ๋ ๋์ฉ๋๋ค.
์ด ๋ฌธ์ ์ ๋ํ ํฉ์๋ ๋ฌด์์
๋๊น? ์ ์๊ฐ์๋ cross_val_score
๋ ๋ชจ๋ธ ์ ํ ๋๊ตฌ๊ฐ ์๋๋ผ ํ๊ฐ ๋๊ตฌ์
๋๋ค. ๋ฐ๋ผ์ ์๋ ๊ฐ์ ๋ฐํํด์ผํฉ๋๋ค.
PR # 2759์์ ์์ ํ ์ ์์ต๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก ์ธํด ์ฝ๊ฒ ์์ ํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ํธ๋ฆญ์ ์ฌ์ธ์ ๋ค์ง์ง ์๊ณ ๋์ ๊ทธ๋ฆฌ๋ ๊ฒ์์ ์ํ ํ ๋ ๋์ ์์ greater_is_better
์์ฑ์ ์ก์ธ์คํ๋ ๊ฒ์
๋๋ค.
์ด ๋ฌธ์ ์ ๋ํ ํฉ์๋ ๋ฌด์์ ๋๊น? ์ ์๊ฐ์๋ cross_val_score๋
๋ชจ๋ธ ์ ํ ๋๊ตฌ๊ฐ ์๋ ํ๊ฐ ๋๊ตฌ์ ๋๋ค. ๋ฐ๋ผ์ ๋ฐํ๋์ด์ผํฉ๋๋ค.
์๋ ๊ฐ.
ํน๋ณํ ๊ฒฝ์ฐ๋ ๋ค์ํ ๋์์ด ์ํํธ์จ์ด ๋ฌธ์ ์ ์์ธ์ ๋๋ค.
๋ชฉ๋ก์์ "mse"์ ์ด๋ฆ์ "negated_mse"๋ก ๋ณ๊ฒฝํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํ์ฉ ๊ฐ๋ฅํ ์ ์ ๋ฌธ์์ด.
๋๊ตฐ๊ฐ mse์ ๊ฐ์ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ์ ์ง์ ์ฑ์ ์๋ฅผ ์ ์ํ๋ฉด ์ด๋ป๊ฒ๋ฉ๋๊น? ์ด๋ฆ ์ง์ ํจํด์ ๋ฐ๋ฅด์ง๋ง ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ ๋ฐ์ฝ๋ ์ดํฐ๋ก ๋์ ์๋ฅผ ๊ฐ์ผ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
@ogrisel ์ด ์๋ ๋ฉํธ๋ฆญ๊ณผ ์ผ์นํ๊ธฐ ์ํด ์ด๋ฆ ์ผ์น๋ฅผ ์ฌ์ฉํ๋๋ก ์ ์ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. @ogrisel์ด ์๋ชป๋๋ฉด ์ ๋ฅผ ์์ ํ์ญ์์ค.
ํ์ฉ๋๋ ์ ์ ๋ฌธ์์ด ๋ชฉ๋ก์์ "mse"์ ์ด๋ฆ์ "negated_mse"๋ก ๋ณ๊ฒฝํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
scikit-learn์ ๋ด๋ถ๋ฅผ ๋ชจ๋ฅธ๋ค๋ฉด ์์ ํ ์ง๊ด์ ์ด์ง ์์ต๋๋ค. ์ด๋ ๊ฒ ์์คํ ์ ๊ตฌ๋ถ๋ ค ์ผํ๋ค๋ฉด ๋์์ธ ๋ฌธ์ ๊ฐ ์๋ค๋ ์ ํธ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
scikit-learn์ ๋ด๋ถ๋ฅผ ๋ชจ๋ฅธ๋ค๋ฉด ์์ ํ ์ง๊ด์ ์ด์ง ์์ต๋๋ค.
์ด๋ ๊ฒ ์์คํ ์ ๊ตฌ๋ถ๋ ค ์ผํ๋ค๋ฉด
๋์์ธ ๋ฌธ์ .
๋์ํ์ง ์์ต๋๋ค. ์ธ๊ฐ์ ๋ง์ ์ฌ์ ์ง์๊ณผ
๋ฌธ๋งฅ. ๊ทธ๊ฒ๋ค์ ๋ชจ๋ ์ฒด๊ณ์ ์
๋๋ค. ์ด๊ฒ์ ์ํํธ์จ์ด์ ํฌํจ ์ํค๋ ค๊ณ
ํน๋ณํ ๊ฒฝ์ฐ์ ๊ฐ์ ์ผํ ๋ชฉ๋ก์ ์ ๊ณตํฉ๋๋ค. ๋ฟ๋ง ์๋๋ผ
์ ์งํ๊ธฐ ์ด๋ ค์ด ์ํํธ์จ์ด์ด์ง๋ง
์ด๋ฌํ ์์ธ๋ ๋๋ผ์ด ๋์์ ์ผ์ผํค๊ณ ๋ฒ๊ทธ๋ฅผ ์์ฑํฉ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋.
์ด๋ค ํน๋ณํ ๊ฒฝ์ฐ๋ฅผ ์ผ๋์๋๊ณ ์์ต๋๊น?
๋ช
ํํ๊ฒ ๋งํ๋ฉด GridSearchCV
๊ฐ์ฒด์ ์ ์ฅ๋ ๊ต์ฐจ ๊ฒ์ฆ ์ ์๊ฐ _also_ ์๋ ๊ฐ์ด์ด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค (๋ถํธ ๋ฐ์ ์ด ์๋).
AFAIK, ๊ทธ๋ฆฌ๋ ๊ฒ์ ๊ตฌํ์ ์ข ๋ ๊ฐ๋จํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ๊ธฐํธ ๋ค์ง๊ธฐ๊ฐ ๋์ ๋์์ง๋ง ์ฌ์ฉ์ฑ์ ์ํฅ์ ๋ฏธ์น์ง๋ ์์์ต๋๋ค.
์ด๋ค ํน๋ณํ ๊ฒฝ์ฐ๋ฅผ ์ผ๋์๋๊ณ ์์ต๋๊น?
๊ธ์์, ์ผ๋ถ ๋ฉํธ๋ฆญ์ ๊ฒฝ์ฐ ๋ ํฐ ๊ฒ์ด ๋ ์ข์ ๋ฐ๋ฉด ๋ค๋ฅธ ๋ฉํธ๋ฆญ์ ๊ฒฝ์ฐ
๊ทธ ๋ฐ๋์
๋๋ค.
AFAIK, ๊ทธ๋ฆฌ๋ ๊ฒ์์ ์ํด ์ฌ์ธ ๋ค์ง๊ธฐ ๋์
๊ตฌํ์ด ์กฐ๊ธ ๋ ๊ฐ๋จํ์ง๋ง ์ํฅ์์ฃผ์ง ์์์ผํฉ๋๋ค.
์ ์ฉ์ฑ.
๊ทธ๋ฆฌ๋ ๊ฒ์์ด ์๋๋ผ ๊ด์ฌ์ฌ ๊ตฌ๋ถ : ์ ์
๊ทธ๋ค์ ๋ํด ์๋ฌด๊ฒ๋ ๋ชจ๋ฅด๊ณ ์ฌ์ฉํ ์ ์์ด์ผํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด
๊ทธ๋ค์ ํน์ด์ฑ์ ๋ค๋ฃจ๋ ๊ฒ์ ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค๋ก ํผ์ง ๊ฒ์
๋๋ค. ์๋ค
์ด๋ฏธ ๋ง์ ์ ์ ์ฝ๋.
๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์ฌ์ฉ์ ์ฝ๋์ ๋ํ ๋ฌธ์ ๋ฅผ ๋ค์ ๋ฏธ๋ฃจ๊ณ ์์ต๋๋ค. ์๋ฌด๋ "๋ถ์ ๋ MSE"๋ฅผ ๊ทธ๋ฆฌ๋ ๊ฒ์ ์ํ์ง ์์ผ๋ฏ๋ก ์ฌ์ฉ์๋ ์ฝ๋์์ ๊ธฐํธ๋ฅผ ๋ค์ ๋ค์ง์ด ์ผํฉ๋๋ค. ํนํ ๋ค์ค ๋ฉํธ๋ฆญ ๊ต์ฐจ ๊ฒ์ฆ ๋ณด๊ณ ์ (PR # 2759)์ ๊ฒฝ์ฐ ๊ฐ ๋ฉํธ๋ฆญ์ ๊ฐ๋ณ์ ์ผ๋ก ์ฒ๋ฆฌํด์ผํ๋ฏ๋ก ์ด๋ ๋ถํธํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์ฝ๋์ ์ง๊ด์ ์ธ ๊ฒฐ๊ณผ๋ผ๋ ๋ ๊ฐ์ง ์ฅ์ ์ ๋ชจ๋ ์ป์ ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค.
๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์ฌ์ฉ์ ์ฝ๋์ ๋ํ ๋ฌธ์ ๋ฅผ ๋ค์ ๋ฏธ๋ฃจ๊ณ ์์ต๋๋ค. ์๋ฌด๋ ์ํ์ง ์๋๋ค
"๋ถ์ ๋ MSE"๋ฅผ ํ๋กํ ํ์ฌ ์ฌ์ฉ์๊ฐ ์์ ์
์ํธ.
ํ์คํ ์ธ์์ ๋์ ์๋๋๋ค. ๋
ผ๋ฌธ์ ์ฝ์ ๋ ๋๋
ํ๋ ์ ํ
์ด์
์ ๋ณด๋ฉด ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๊ทธ๋ํ๊ฐ
์ ํ์ด, ๋๋ ์๊ฐ๊ณผ ์ ์ ์ ๋์ญํญ์
๋ ํฐ ๊ฒ์ด ๋ ์ข์์ง ์๋์ง ๊ทธ๋ฆผ.
ํนํ ๋ค์ค ๋ฉํธ๋ฆญ ๊ต์ฐจ ๊ฒ์ฆ์ ๊ฒฝ์ฐ ๋ถํธํฉ๋๋ค.
๋ณด๊ณ ์ (PR # 2759), ๊ฐ ์ธก์ ํญ๋ชฉ์ ๊ฐ๋ณ์ ์ผ๋ก ์ฒ๋ฆฌํด์ผํฉ๋๋ค.
์. ํญ์ ํฐ ๊ฒ์ด ๋ ์ข๋ค๋ ๊ฒ์ ๋ฐ์๋ค์ด๋ฉด
๊ฒฐ๊ณผ ํด์์ ํฌํจํ์ฌ ๋ชจ๋ ๊ฒ์ด ๋ ์ฝ์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋ ๊ฐ์ง ์ฅ์ ์ ๋ชจ๋ ๊ฐ์ง ์ ์์์ง ๊ถ๊ธํฉ๋๋ค. ์ผ๋ฐ ์ฝ๋์
์ง๊ด์ ์ธ ๊ฒฐ๊ณผ.
์ํ์ ์ ์ง ๊ด๋ฆฌ ์๋๋ฅผ ๋ฆ์ถ๋ ๋งค์ฐ ๋ณต์กํ ์ฝ๋๋ฅผ ๊ฐ๋ ๊ฒ์
๋๋ค.
๋ฐ ๊ฐ๋ฐ. Scikit-learn์ ๋ฌด๊ฒ๋ฅผ ๋๋ฆฌ๊ณ ์์ต๋๋ค.
ํญ์ ๋ ํฐ ๊ฒ์ด ๋ ์ข๋ค๋ ๊ฒ์ ๋ฐ์๋ค์ด๋ฉด
๊ทธ๊ฒ์ด ๊ทธ๋ ๊ฐ ๋งํ ๊ฒ์ ๋๋ค :)
๋ ์ง์งํ๊ฒ, ์ด๊ฒ์ด ์ฌ๋๋ค์ ํผ๋์ค๋ฝ๊ฒํ๋ ํ ๊ฐ์ง ์ด์ ๋ cross_val_score
์ ์ถ๋ ฅ์ด ๋ฉํธ๋ฆญ๊ณผ ์ผ์นํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทํ์ ๋
ผ๋ฆฌ๋ฅผ ๋ฐ๋ฅด๋ ๊ฒฝ์ฐ sklearn.metrics์ ๋ชจ๋ ๋ฉํธ๋ฆญ์ "ํฐ ๊ฒ์ด ๋ ์ข์"์ ๋ฐ๋ผ์ผํฉ๋๋ค.
๊ทธ๊ฒ์ด ๊ทธ๋ ๊ฐ ๋งํ ๊ฒ์ ๋๋ค :)
์ ํ์ด!
๋ ์ง์งํ๊ฒ, ์ด๊ฒ์ด ์ฌ๋๋ค์ ํผ๋์ค๋ฝ๊ฒํ๋ ํ ๊ฐ์ง ์ด์ ๋
cross_val_score์ ์ถ๋ ฅ์ด ๋ฉํธ๋ฆญ๊ณผ ์ผ์นํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ
๋ ผ๋ฆฌ๋ฅผ ๋ฐ๋ฅด๊ณ sklearn.metrics์ ๋ชจ๋ ๋ฉํธ๋ฆญ์ "๋ ํฐ
๋ ๋์".
๋์ํฉ๋๋ค. ๊ทธ๋์ ์ด๋ฆ์ ๋ฐ๊พธ๋ ๊ฒ์ด ๋ง์์ ๋ญ๋๋ค.
์ฌ๋๋ค์ ๋์.
๋ ์ง์งํ๊ฒ, ์ด๊ฒ์ด ์ฌ๋๋ค์ ํผ๋์ค๋ฝ๊ฒํ๋ ํ ๊ฐ์ง ์ด์ ๋ cross_val_score์ ์ถ๋ ฅ์ด ๋ฉํธ๋ฆญ๊ณผ ์ผ์นํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์ฐจ๋ก๋ก scoring
์ค์ ๋ณด๋ค ๋ ์ ๋น์ค๋ฝ๊ฒ ๋ณด์ด๊ฒํฉ๋๋ค.
์ ํ ํ๊ท๋ฅผ ์๋ ํ ๋ ์ค๋ 0.16.1์์ ์ด๊ฒ์ ๋ฌผ ๋ ธ์ต๋๋ค. ์ ์์ ๋ถํธ๋ ๋ถ๋ฅ ์์ ๋ํด ๋ ์ด์ ๋ฐ์ ๋์ง ์์ง๋ง ์ ํ ํ๊ท์์๋ ์ฌ์ ํ ๋ฐ์ ๋ฉ๋๋ค. ํผ๋์ ๋ํ๊ธฐ ์ํด LinearRegression.score ()๋ ๋ฐ์ ๋์ง ์์ ์ ์ ๋ฒ์ ์ ๋ฐํํฉ๋๋ค.
๋๋ ๊ทธ๊ฒ์ ๋ชจ๋ ์ผ๊ด๋๊ฒ ๋ง๋ค๊ณ ์ ํ ๋ชจ๋ธ์ ๋ํด์๋ ๋ถํธ ๋ฐ์ ๋์ง ์์ ์ ์๋ฅผ ๋ฐํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์:
from sklearn import linear_model
from sklearn.naive_bayes import GaussianNB
from sklearn import cross_validation
from sklearn import datasets
iris = datasets.load_iris()
nb = GaussianNB()
scores = cross_validation.cross_val_score(nb, iris.data, iris.target)
print("NB score:\t %0.3f" % scores.mean() )
iris_reg_data = iris.data[:,:3]
iris_reg_target = iris.data[:,3]
lr = linear_model.LinearRegression()
scores = cross_validation.cross_val_score(lr, iris_reg_data, iris_reg_target)
print("LR score:\t %0.3f" % scores.mean() )
lrf = lr.fit(iris_reg_data, iris_reg_target)
score = lrf.score(iris_reg_data, iris_reg_target)
print("LR.score():\t %0.3f" % score )
์ด๊ฒ์ ๋ค์์ ์ ๊ณตํฉ๋๋ค.
NB score: 0.934 # sign is not flipped
LR score: -0.755 # sign is flipped
LR.score(): 0.938 # sign is not flipped
๊ต์ฐจ ๊ฒ์ฆ์ ํด์๋ก ๋ ์ข์ ๋ชจ๋ธ์ ๋ชจ๋ ์ ํธ๋ฅผ ๋ค์ง์ต๋๋ค. ๋๋ ์ฌ์ ํ์ด ๊ฒฐ์ ์ ๋์ํ์ง ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์ฃผ๋ ์ง์ง์๊ฐ @GaelVaroquaux ์ด๊ณ ์๋ง๋ @mblondel์ด์๋ค๊ณ ์๊ฐํ๋ค.
์ค ๊ด์ฐฎ์์. ๋ชจ๋ ๋
ผ์๋ ์์ ์์ต๋๋ค.
mse์์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ธฐํธ๋ฅผ ๋ค์ง๋ ๋๋์ด ๋ค์๊ณ r2๋ ํจ์ฌ ๋ ์ง๊ด์ ์
๋๋ค :-/
@Huitzilo GaussianNB๋ ๋ถ๋ฅ๊ธฐ์ด๋ฉฐ ์ ํ๋๋ฅผ ๊ธฐ๋ณธ ์ฑ์ ์๋ก ์ฌ์ฉํฉ๋๋ค. LinearRegression์ ํ๊ท ์์ด๋ฉฐ r2 ์ ์๋ฅผ ๊ธฐ๋ณธ ์ฑ์ ์๋ก ์ฌ์ฉํฉ๋๋ค. ๋ ๋ฒ์งธ ์ ์๋ ์์์ด์ง๋ง r2 ์ ์๋ ์์ ์ผ ์ ์์ต๋๋ค. ๋ํ iris๋ ๋ค์ค ํด๋์ค ๋ฐ์ดํฐ ์ธํธ์ ๋๋ค. ๋ฐ๋ผ์ ๋์์ ๋ฒ์ฃผ ํ์ ๋๋ค. ํ๊ท์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ง์์, ๋๋ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๋์ง์ ๋ํด ์ฝ๊ฐ ํผ๋ ์ค๋ฌ์ ์ต๋๋ค. r2๋ ๋ค์ง ํ์ง ์์ต๋๋ค ... mse ๋ง ๋ ๊ฒ์ ๋๋ค.
์ ์ฒด ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ
์ negmse
์ด๋ฆ์ ๋ฐ๊พธ๋ ๊ฒ์
๋๋ค.
@mblondel ๋ฌผ๋ก ๋น์ ์ด ์ณ์ต๋๋ค, ์ฃ์กํฉ๋๋ค. ๋๋ ํ๊ท์ ๋ํ ์๋ฅผ ๋น ๋ฅด๊ฒ ํจ๊ป ๋๋๋ฆฌ๊ณ ์์๊ณ ํ์ฑ ๋ฐ์ดํฐ์ ๋ํ ๊ณผ์ ์ผ๋ก ๋ค๋ฅธ ๊ฒ์ ๊ธฐ๋ฅ # 4๋ฅผ ์์ธกํ๋ ๊ฒ์ด ํจ๊ณผ๊ฐ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค (์์ R2 ์ฌ์ฉ). ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์์ R2๊ฐ ์๋ ์์ต๋๋ค. ์ฌ๊ธฐ์ ๋ค์ง๋ ํ์ ์ด ์์ต๋๋ค. ํ์ธ. ๋ด ์๋ชป์ด์ผ.
๊ทธ๋๋ ๊ธฐํธ๋ cross_val_score
์์ ์ป์ MSE์์ ๋ค์งํ ์์ต๋๋ค.
๋๋ฟ ์ผ ์๋ ์์ง๋ง,์ด ๋ถ์ผ์น๊ฐ ๋งค์ฐ ํผ๋ ์ค๋ฝ์ต๋๋ค. MSE๋ ์ R2๊ฐ ์๋ sign-flipped ์ฌ์ผํฉ๋๊น?
๋๋ฟ ์ผ ์๋ ์์ง๋ง,์ด ๋ถ์ผ์น๊ฐ ๋งค์ฐ ํผ๋ ์ค๋ฝ์ต๋๋ค. MSE๋ ์ R2๊ฐ ์๋ sign-flipped ์ฌ์ผํฉ๋๊น?
์ ์์ ์๋ฏธ๊ฐ ๋์์๋ก ์ข์ต๋๋ค. ๋์ MSE๋ ๋์๋ค.
์๋ง๋ negmse๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ์ ๋๋ค.
@amueller ๋์ํฉ๋๋ค. ์ ์ ๋งค๊ฐ ๋ณ์์ ์ด๋ฆ์์ ๋ถํธ ๋ฐ์ ์ ๋ช ์ ์ ์ผ๋ก ๋ง๋ค๋ฉด ํผ๋์ ํผํ๋ ๋ฐ ํ์คํ ๋์์ด๋ฉ๋๋ค.
์ด์ฉ๋ฉด [1]์ ๋ฌธ์๋ ์ด๋ค ์ ์์์ ๊ธฐํธ๊ฐ ์ด๋ป๊ฒ ๋ค์งํ๋ ์ง์ ๋ํด ํจ์ฌ ๋ ๋ถ๋ช ํ ์ ์์ต๋๋ค. ์ ๊ฒฝ์ฐ์๋ ์ ๋ณด๊ฐ ๋นจ๋ฆฌ ํ์ํ๊ณ 3.1.1.1 ์๋์ ํ๋ง ๋ณด์์ง๋ง ํ ์คํธ๋ ์ฝ์ง ์์์ต๋๋ค ( "ํฌ๋ฉด ํด์๋ก ์ข๋ค"๋ผ๋ ์์น์ ์ค๋ช ํฉ๋๋ค). IMHO๋ 3.1.1.1์ ํ์ mse, median ๋ฐ mean absolute error์ ๋ํ ์ฃผ์์ ์ถ๊ฐํ์ฌ ๋ถ์ ์ ๋ํ๋ด๋ ๊ฒ์ผ๋ก ์ค์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ์ด๋ฏธ ๋ง์ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
[1] http://scikit-learn.org/stable/modules/model_evaluation.html#scoring -parameter
๋งค์ฐ ํฅ๋ฏธ๋ก์ด ์ฌ๋ก๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
from sklearn.cross_validation import cross_val_score
model = LinearRegression()
scores = cross_val_score(model, X, target, cv=2, scoring='r2')
scores
๊ฒฐ๊ณผ
array([-0.17026282, -2.21315179])
๋์ผํ ๋ฐ์ดํฐ ์ธํธ์ ๋ํด ๋ค์ ์ฝ๋
model = LinearRegression()
model.fit(X, target)
prediction = model.predict(X)
print r2_score(target, prediction)
ํฉ๋ฆฌ์ ์ธ ๊ฐ์น๋ฅผ ์ ๊ณตํฉ๋๋ค
0.353035789318
์ ํ ํ๊ท ๋ชจ๋ธ (์ ํธ ํฌํจ)์ ๋ํ AFAIK๋ R ^ 2> 1 ๋๋ R ^ 2 <0์ ์ป์ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ cv ๊ฒฐ๊ณผ๋ ๋ถํธ๊ฐ ๋ฐ์ ๋ R ^ 2์ฒ๋ผ ๋ณด์ด์ง ์์ต๋๋ค. ์ด๋ ์์ ์์ ๋ด๊ฐ ํ๋ ธ์ต๋๊น?
r2๋ ์์ ์ผ ์ ์์ต๋๋ค (์๋ชป๋ ๋ชจ๋ธ์ ๊ฒฝ์ฐ). 1๋ณด๋ค ํด ์ ์์ต๋๋ค.
์๋ง๋ ๊ณผ์ ํฉ ์ํ ์ผ ๊ฒ์ ๋๋ค. ์ํ:
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, target, test_size=0.2, random_state=0)
model = LinearRegression()
model.fit(X_train, y_train)
pred_train = model.predict(X_train)
print("train r2: %f" % r2_score(y_train, pred_train))
pred_test = model.predict(X_test)
print("test r2: %f" % r2_score(y_test, pred_test))
์์ ๋ถํ ์ ์ ์ดํ๋ random_state
์ ์ ์๋์ ๋ํด ๋ค๋ฅธ ๊ฐ์ ์ฌ์ฉํด๋ณด์ญ์์ค.
์๋ง๋ negmse๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ์ ๋๋ค.
'neg_mse'์ ๊ฒฝ์ฐ +1 (๋ฐ์ค์ด ๋ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ง๋ ๋ค๊ณ ์๊ฐํฉ๋๋ค).
๋ชจ๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๊น? ๋ค๋ฅธ ์ ์๊ฐ ๋์์๋ก ์ข์ง ์์ต๋๊น?
๋ค์์ด ์์ต๋๋ค.
log_loss
mean_absolute_error
median_absolute_error
doc/modules/model_evaluation.rst
๋ฐ๋ฅด๋ฉด ๊ทธ๊ฒ ์ ๋ถ์
๋๋ค.
๊ทธ๋ฆฌ๊ณ hinge_loss
๋ด ์๊ฐ ์?
๋ชจ๋ ์์ค์ neg_
์ ๋์ฌ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์ด์ํฉ๋๋ค.
์์ด๋์ด๋ ์๋ ์ ์๋ฅผ ๋ฐํํ๋ ๊ฒ์
๋๋ค (๋ถํธ ๋ค์ง๊ธฐ์์ด) ๊ทธ๋ฌ๋ ndarray๋ฅผ ๋ฐํํ๋ ๋์ best()
, arg_best()
, best_sorted()
๊ฐ์ ๋ฉ์๋๋ก ndarray๋ฅผ ํ์ฅํ๋ ํด๋์ค๋ฅผ ๋ฐํํฉ๋๋ค
๊ฒฝ์ฒฉ ์์ค์ ๋ํ ์ฑ์ ์๋ ์์ต๋๋ค (ํ๊ฐ์ ์ฌ์ฉ๋๋ ๊ฒ์ ๋ณธ ์ ์ด ์์ต๋๋ค).
๋์ ์๋ numpy ๋ฐฐ์ด์ ๋ฐํํ์ง ์๊ณ float๋ฅผ ๋ฐํํฉ๋๋ค.
์ฌ์ฉ์ ์ ์ ">"๊ฐ ์์ง๋ง ๋ถ๋์ฒ๋ผ ๋ณด์ด๋ ์ ์ ๊ฐ์ฒด๋ฅผ ๋ฐํ ํ ์ ์์ต๋๋ค.
์ด์ ์๋ฃจ์
๋ณด๋ค ๋ ์ธ์์ ์ธ ๋๋์ด ๋ค์์ต๋๋ค. ์ด์ ์๋ฃจ์
์ GridSearchCV์์ ์ฌ์ฉ ๋ bool "lower_is_better"๋ก ๋์ ์์ ํ๊ทธ๋ฅผ ์ง์ ํ์ต๋๋ค.
cross_val_score
๋ ๋ฐฐ์ด์ ๋ฐํํฉ๋๋ค.
์ค์ ๋ก cross_val_score
๋ฐํ ๋ ์ ์๋ ์ผ๋ฐ์ ์ผ๋ก ์ ๋ ฌ ํ ํ์๊ฐ ์์ผ๋ฉฐ ํ๊ท ๋ง ๊ณ์ฐ๋ฉ๋๋ค.
๋ ๋ค๋ฅธ ์์ด๋์ด๋ sorted
๋ฉ์๋๋ฅผ _BaseScorer
์
๋๋ค.
my_scorer = make_scorer(my_metric, greater_is_better=False)
scores = my_scorer.sorted(scores) # takes into account my_scorer._sign
best = scores[0]
cross_val_score
๋ ๋ฐฐ์ด์ ๋ฐํํ์ง๋ง ๋์ ์๋ ๋ถ๋ ์์์ ์ ๋ฐํํฉ๋๋ค. GridSearchCV์ ๋ค๋ฅธ ๋ชจ๋ CV ๊ฐ์ฒด์์ ๋์ผํ ๋์์ ์ํ๊ธฐ ๋๋ฌธ์ cross_val_score
์ ํน์ ๋
ผ๋ฆฌ๋ฅผ ๊ฐ๋ ๊ฒ์ด ์ด์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
GridSearchCV์์ ์ต๊ณ ์ ์ ์์ ์ต๊ณ ์ ์ธ๋ฑ์ค๋ฅผ ์ํ๊ธฐ ๋๋ฌธ์ argsort ๋ฉ์๋๊ฐ ํ์ํฉ๋๋ค.
scikit-learn์ ์ํด "ํต์ ์ง๋ฌธ์์ ์์ ์ ์ค๋ฅ์ ํ๊ท ๊ณผ ๋ถ์ฐ์ ์ถ์ ํ ๋ค์ ์์ธก์ ๋ํ ์ถ์ ํธํฅ์ ์ ๊ฑฐํ ํ ๊ฐ์ค ํ๊ท ์ ๊ณ์ฐ"ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
IIRC๋ ์คํ๋ฆฐํธ (์ง๋ ์ฌ๋ฆ?!)์์์ด ๋ฌธ์ ๋ฅผ ๋
ผ์ํ๊ณ neg_mse
(๋๋ neg-mse
์์)๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๊ณ ํ์ฌ ๋ง์ด๋์ค ๋ถํธ๊ฐ์๋ ๋ชจ๋ ๋์ ์ / ๋ฌธ์์ด์ ํ๊ธฐํ์ต๋๋ค.
์ด๊ฒ์ด ์ฌ์ ํ ํฉ์์
๋๊น? 0.18 ์ด์ ์ํด์ผํฉ๋๋ค.
ํ @GaelVaroquaux @agramfort @jnothman @ogrisel @raghavrv
๋ค, ์ฐ๋ฆฌ๋ neg_mse AFAIK์ ๋์ํ์ต๋๋ค
neg_mse
๋ํ ๋ค์์ด ํ์ํฉ๋๋ค.
neg_log_loss
neg_mean_absolute_error
neg_median_absolute_error
๋ชจ๋ธ = Sequential ()
keras.layers.Flatten ()
model.add (Dense (11, input_dim = 3, kernel_initializer = keras.initializers.he_normal (seed = 2),
kernel_regularizer = regularizers.l2 (2)))
keras.layers.LeakyReLU (์ํ = 0.1)
model.add (Dense (8, kernel_initializer = keras.initializers.he_normal (seed = 2)))
keras.layers.LeakyReLU (์ํ = 0.1)
model.add (Dense (4, kernel_initializer = keras.initializers.he_normal (seed = 2)))
keras.layers.LeakyReLU (์ํ = 0.1)
model.add (Dense (1, kernel_initializer = keras.initializers.he_normal (seed = 2)))
keras.layers.LeakyReLU (์ํ = 0.2)
adag = RMSprop (lr = 0.0002)
model.compile (loss = losses.mean_squared_error,
Optimizer = adag
)
history = model.fit (X_train, Y_train, epochs = 2000,
batch_size = 20, shuffle = True)
์ ์ฝ๋๋ฅผ ๊ต์ฐจ ๊ฒ์ฆํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น? ๋๋ ์ด๊ฒ์ ์ฌ์ฉ๋๋ ๊ต์ฐจ ๊ฒ์ฆ ๋ฐฉ๋ฒ์ ๋จ๊ฒจ๋๊ณ ์ถ์ต๋๋ค.
@shreyassks ์ด๊ฒ์ ๊ทํ์ ์ง๋ฌธ์ ๋ํ ์ฌ๋ฐ๋ฅธ ์ฅ์๋ ์๋์ง๋ง https://keras.io/scikit-learn-api๋ฅผ ํ์ธํฉ๋๋ค. ๋คํธ์ํฌ๋ฅผ scikit-learn
์ถ์ ๊ธฐ๋ก ๋ํ ํ ๋ค์ model_selection.cross_val_score
์. ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค! ์ด๊ฒ์ Brier_score_loss์์๋ ๋ฐ์ํ์ผ๋ฉฐ Brier_score_loss๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒฝํ๊ฒ ์๋ํ์ง๋ง GridSearchCV์์ ์ฌ ๋ ํผ๋์ค๋ฌ์์ง๊ณ ๋ถ์ ์ ์ธ Brier_score_loss๊ฐ ๋ฐํ๋ฉ๋๋ค. ์ ์ด๋ Brier_score_loss๊ฐ ์์ค์ด๊ธฐ ๋๋ฌธ์ (๋ฎ์์๋ก ๋ ์ข์), ์ฌ๊ธฐ์ ์ ์ ๋งค๊ธฐ๊ธฐ ๊ธฐ๋ฅ์ ๋ถํธ๋ฅผ ๋ค์ง์ด ์์๋ก ๋ง๋ญ๋๋ค.
์์ด๋์ด๋ cross_val_score๊ฐ ๊ฒฐ๊ณผ์ ์ ๋ ๊ฐ์ ์ ์ ์ผ๋ก ์ด์ ์ ๋ง์ถฐ์ผํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ด ์ง์์ผ๋ก๋ cross_val_score์์ MSE (ํ๊ท ์ ๊ณฑ ์ค์ฐจ)์ ๋ํด ์ป์ ์์ ๋ถํธ (-)์ ์ค์์ฑ์ด ๋ฏธ๋ฆฌ ์ ์๋์ด ์์ง ์์ต๋๋ค. ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ sklearn์ ์ ๋ฐ์ดํธ ๋ ๋ฒ์ ์ ๊ธฐ๋ค๋ฆฌ๊ฒ ์ต๋๋ค.
ํ๊ท ์ฌ์ฉ ์ฌ๋ก์ ๊ฒฝ์ฐ :
model_score = cross_val_score (model, df_input, df_target, scoring = 'neg_mean_squared_error', cv = 3)
๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ ์ป๊ณ ์์ต๋๋ค.
SVR :
[-6.20938025 -1.397376 -1.94519]
-3.183982080147279
์ ํ ํ๊ท:
[-5.94898085 -9.30931808 -1.15760676]
-5.4719685646934275
์ฌ๊ฐ๋ฏธ:
[-7.22363814 -10.47734135 -2.20807684]
-6.6363521107522345
์ฐ๋ฑ์ฑ์ด:
[-5.95990385 -4.17946756 -1.36885809]
-3.8360764993832004
๊ทธ๋์ ์ด๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๊น?
SVR?
ํ๊ท ์ฌ์ฉ ์ฌ๋ก์ ๊ฒฝ์ฐ :
์ฌ์ฉํ ๋ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋ฉ๋๋ค.
(1) ์ ์๊ฐ 'neg_mean_squared_error'์ธ "cross_val_score"
๊ณผ
(2) "GridSearchCV"๋ฅผ ์ฌ์ฉํ๊ณ 'best_score_'๋ฅผ ํ์ธํ ๋ ๋์ผํ ์
๋ ฅ์ ๋ํด
ํ๊ท ๋ชจ๋ธ์ ๊ฒฝ์ฐ ์ด๋ ๊ฒ์ด ๋ ๋ซ์ต๋๊น?
๋ฟก ๋นต๋จ
์ฌ์ฉ๋ฒ์ ๋ํ ์ง๋ฌธ์ํ๊ณ ์์ต๋๋ค. ์ด์ ํธ๋์ปค๋ ์ฃผ๋ก ๋ฒ๊ทธ์ ์๋ก์ด ๊ธฐ๋ฅ์์ํ ๊ฒ์
๋๋ค. ์ฌ์ฉ๋ฒ ์ง๋ฌธ์ ๊ฒฝ์ฐ Stack Overflow ๋๋ ๋ฉ์ผ ๋ง๋ฆฌ์คํธ ๋ฅผ ์ฌ์ฉํด ๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ง๋ negmse๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ์ ๋๋ค.