cross_val_score で スコアがよかったモデルを採用。
これが一回のcross_val_score
の結果に対する言及なら明確に間違いです。交差検証のFOLDごとの優劣を比較しても意味がないからです。
複数回行った結果を処理しているのであれば間違いとまでは言えません。ただ、たとえばハイパーパラメータのチューニングのような作業をしたい場合は、model_selectionに便利なクラスがたくさんあるので、corss_val_score
を使うよりそちらを検討した方が良いかもしれません。
cross_val_score
に渡したモデルはfit
されません。
python
1>>> from sklearn.model_selection import cross_val_score
2>>> from sklearn.svm import SVC
3>>> from sklearn.datasets import load_iris
4>>> iris = load_iris()
5>>> svm = SVC()
6>>> cross_val_score(svm, iris.data, iris.target)
7array([0.96666667, 0.96666667, 0.96666667, 0.93333333, 1. ])
8>>> svm.predict(iris.data)
9Traceback (most recent call last):
10 File "<stdin>", line 1, in <module>
11 File "/*/site-packages/sklearn/svm/_base.py", line 584, in predict
12 check_is_fitted(self)
13 File "/*/site-packages/sklearn/utils/validation.py", line 952, in check_is_fitted
14 raise NotFittedError(msg % {'name': type(estimator).__name__})
15sklearn.exceptions.NotFittedError: This SVC instance is not fitted yet. Call 'fit' with appropriate arguments before using this estimator.
理由としては、スコア計算の副作用でfit
されるのはあまり意味論的に望ましくない、交差検証でやっているので全データを使って学習させていないからfit
させた結果も再利用が難しい、といったことが挙げられます。原理的には交差検証のFOLDごとに学習済み分類器を得ることも問題なくできるのですが、corss_val_score
がそういう使い方をサポートしているかは別問題です。cross_validateの方ならできますが。