用語比較
predictとpredict_probaの違い|クラスのラベルと確率(Python3データ分析)
predict はクラスのラベルを予測します。確率の推定値を各クラスぶん出すのは predict_proba です。
ラベルだけで足りるか、確率まで必要かで選びます。確率の列がどのクラスかは、classes_ で確かめます。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。
predictとpredict_probaの要点
predict
公式の説明は「X のサンプルについて、クラスのラベルを予測する」。1サンプルにつき1つのラベルを返す。
predict_proba
公式の説明は「確率の推定値」。すべてのクラスについての推定値が、クラスのラベルの順に並ぶ。
違いを表で確認
| 比較軸 | predict | predict_proba |
|---|---|---|
| 返すもの | 予測したクラスのラベル | 各クラスの確率の推定値 |
| 配列の形 | (n_samples,) の1次元 | (n_samples, n_classes) の2次元 |
| 列の並び | 列はない。ラベルそのものが入る | クラスのラベルの順。モデルの classes_ の順と同じ |
| 多クラスの場合 | ラベルを1つ返す | LogisticRegression の公式は、多クラス(multinomial)の問題では softmax 関数で各クラスの確率を求めると説明している |
Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)
PRどこで迷っているかを切り分ける
予測したクラスだけを、結果の表に入れたい人
predict を使います。1次元のラベルの配列が返り、そのまま列として追加できます。
確率の高い順に並べたり、自信の低い予測を選別したりしたい人
predict_proba を使います。各クラスの確率が行ごとに返るので、並べ替えや絞り込みに使えます。
確率の列が、どのクラスのものか分からなくなった人
classes_ を確認します。公式は、列がクラスのラベルの順に並ぶと説明しています。
具体例で使い分ける
例 1
公式の例: iris の先頭2行
公式の例のとおり、iris のデータで LogisticRegression(random_state=0) を fit し、X[:2, :] に predict と predict_proba を行います。
- predict の結果は array([0, 0]) で、2行ともクラス 0 と予測されています。
- predict_proba の結果は 2行 × 3列で、1行目は [9.82e-01, 1.82e-02, 1.44e-08] です。クラス 0 の確率がもっとも大きく、predict の結果と合っています。
結論: predict は答えだけ、predict_proba は答えの根拠になる確率まで返す。
例 2
score との関係
同じ公式の例で、clf.score(X, y) を行います。
- 結果は 0.97 です。公式は、score が self.predict(X) の、y に対する平均の正解率だと説明しています。
結論: score が使うのは predict のラベル。確率は使わない。
例 3
decision_function との違い
LogisticRegression には decision_function もあります。
- 公式は、decision_function が信頼度のスコアを返し、2クラスの問題では classes_[1] についてのスコアで、0 より大きければそのクラスと予測されると説明しています。
- 確率の推定値が欲しいときは、decision_function ではなく predict_proba を使います。
結論: 確率が欲しいなら predict_proba。decision_function は、確率とは別の指標。
問題文から答えを選ぶ手順
- 1
欲しいものを決める
予測したクラスだけなら predict。確率まで必要なら predict_proba です。
- 2
形を確認する
predict は (n_samples,)、predict_proba は (n_samples, n_classes) です。
- 3
列の対応を確認する
predict_proba の列がどのクラスかは、classes_ の順で確かめます。
試験での見分け方
- 1predict は、クラスのラベルを返す。
- 2predict_proba は、各クラスの確率の推定値を返し、列はクラスのラベルの順に並ぶ。
- 3score は predict の結果を使った平均の正解率で、確率は使わない。
- 4decision_function は信頼度のスコアで、確率の推定値ではない。
誤答しやすい選択肢
predict_proba が1次元の配列を返すと考える
修正: 公式の定義では、形は (n_samples, n_classes) の2次元で、列はクラスごとに並びます。
predict_proba の列の順が、データに出てきた順だと考える
修正: 公式は、クラスのラベルの順に並ぶと説明しています。対応は classes_ で確かめます。
decision_function の値を、そのまま確率として読む
修正: decision_function は信頼度のスコアです。確率の推定値は predict_proba が返します。
確認問題
Q1predict と predict_proba のうち、確率の推定値を返すのは?
答え: predict_proba
公式は、predict_proba を確率の推定値、predict をクラスのラベルの予測と説明しています。
Q2predict_proba が返す配列の形は?
答え: (n_samples, n_classes)
サンプルごとの行に、クラスごとの確率が並びます。
Q3predict_proba の列は、何の順に並ぶか?
答え: クラスのラベルの順(classes_ の順)
公式は、すべてのクラスについての推定値が、クラスのラベルの順に並ぶと説明しています。
Q4score が返すのは何か?
答え: predict(X) の、y に対する平均の正解率
公式の説明どおり、確率ではなく、予測したラベルが合った割合です。
到達チェック
- predict と predict_proba の返す値の違いを言える
- それぞれの配列の形を言える
- predict_proba の列の並びを classes_ で確かめられる
- decision_function が確率でないことを言える
関連ページで確認する
同じ資格で次に知りたいこと
- np.dotとnp.matmul(@)の違い|スカラーの扱いと3次元以上の配列の結果(Python3データ分析)
NumPyのnp.dotとnp.matmul(@演算子)の違いを、スカラーの扱い、3次元以上の配列の結果の形、2次元配列での推奨で整理します。NumPy公式リファレンスの例で照合した、結果の形が変わる例と確認問題つき。
- get_dummiesとOneHotEncoderの違い|pandasとscikit-learnのワンホット変換
pandasのget_dummiesとscikit-learnのOneHotEncoderの違いを、変換する対象、欠損値、未知のカテゴリの扱い、出力の型で整理します。公式の例で照合した確認問題つき。
- np.linalg.invとnp.linalg.solveの違い|逆行列を返すか、連立方程式の解を返すか(Python3データ分析)
NumPyのnp.linalg.inv(逆行列)とnp.linalg.solve(連立方程式の解)の違いを、渡す引数、戻り値、LinAlgErrorが出る条件で整理します。NumPy公式リファレンスの例で照合した、x0+2x1=1の計算例と確認問題つき。
よくある質問
Qpredict と predict_proba の違いは?
predict は予測したクラスのラベルを返し、predict_proba は各クラスの確率の推定値を返します。
Qpredict_proba の列は、どのクラスに対応しますか?
クラスのラベルの順に並びます。対応は、モデルの classes_ で確かめられます。
Qpredict_proba の値は、decision_function と同じですか?
違います。decision_function は信頼度のスコアで、確率の推定値は predict_proba が返します。
Qデータ分析試験の範囲?
本サイトの第6章scikit-learnで扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
