質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

2790閲覧

cross_val_score と fit

takahashi-one

総合スコア120

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/05/16 09:37

cross_val_score と fit

最初に自分の解釈を書きますと、

cross_val_score
データを学習用と検証用に分けて [ fit predict 正解率を出す ] を数回繰り返し、その数回の正解率を返す。

cross_val_score で スコアがよかったモデルを採用。

これで次の流れは下記になるのですが、
fit ← これ必要ですか?
predict

cross_val_scoreでスコアがいいモデルが解ったならそのモデルで予測だけすればいいのではないでしょうか?
なぜ fit でまた学習させなければならないのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/05/16 09:50

質問が意味不明です cross_val_scoreとはなんでしょうか
technocore

2020/05/16 10:17

>fit ← これ必要ですか? 必要です。 交差検証(cross_val_score)はモデルを返さないからです。評価が目的です。
takahashi-one

2020/05/16 12:18

回答ありがとうございます。インスタンスとオブジェクトの関係みたいな感じですか? 例えるなら下記のような感じ。 gbr = GradientBoostingRegressor ~ gbrは設計図 fit で返されるのが オブジェクト
quickquip

2020/05/16 13:38 編集

質問を編集して、質問にコードで示しましょう。(ここは「質問への追記・修正の依頼」欄)
guest

回答1

0

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の方ならできますが。

投稿2020/05/16 15:46

hayataka2049

総合スコア30935

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問