2016-06-24 3 views
10

私は予測モデルとしてscikit-learnからlinear_model.LinearRegressionを使用しています。それは動作し、それは完璧です。 precision_scoreメトリックを使用して予測結果を評価するのに問題があります。 これは私の真のデータです:精度スコア:ValueError:バイナリと連続のミックスを処理できません

array([1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0]) 

そして、これは私の予測データである:

array([ 0.07094605, 0.1994941 , 0.19270157, 0.13379635, 0.04654469, 
    0.09212494, 0.19952108, 0.12884365, 0.15685076, -0.01274453, 
    0.32167554, 0.32167554, -0.10023553, 0.09819648, -0.06755516, 
    0.25390082, 0.17248324]) 

マイコード:

accuracy_score(y_true, y_pred, normalize=False) 

そして、これはエラーメッセージです:

"ValueError: Can't handle mix of binary and continuous"

ヘルプ?ありがとうございました。

+1

dtypesは何ですか? 'y_true'を' numpy.int8'にキャストできますか?カテゴリー変数を予測するために、代わりにロジスティック回帰を探しているのでしょうか? – Benjamin

+0

これは 'type_of_target(y_true)'と 'type_of_target(y_pred)'( 'utils.multiclass.py'にあります)をチェックしています。配列に固有の値が2つしかない場合、配列は 'binary'として分類されます。 – hpaulj

答えて

8
accuracy_score(y_true, y_pred.round(), normalize=False) 

あなたがしきい値を使用 (y_pred>threshold).astype(int)代わりのthresholdは、2つのクラスを分離するために、あなたの価値あるy_pred.round()上のより多くの制御を持っていることを好む場合。

+1

カットポイントを0.5に設定することもできますし、曲線の傾きに従って別のスレッショルドを決めることもできますし、特異度と感度のトレードオフが異なります。https://stats.stackexchange.com/questions/29719/をチェックしてください。決定的に最善のカットオフポイントとその信頼区間の使用曲線が統計の詳細を形成する。 – natbusa

+0

予測された配列の1つのメモ。あなたはそこに負の価値を持っていることが分かります。通常、0と1の間の確率が必要です。softmax関数を使用して確率に変換できます。http://stackoverflow.com/questions/34968722/softmax-function-python – natbusa

1

実際のyはバイナリ(0と1)ですが、予測はありません。おそらく確率を生成し、予測ではないので、結果: 代わりにクラスメンバシップを生成しようとすると、うまくいきます!

1

accuracy_scoreは分類メトリックです。回帰問題には使用できません。

JohnnyQがすでに指摘したように、問題は、私は、あなたがあなたのy_predで非バイナリ(いない0でも1)の値を持っていることです。

You can see the available regression metrics here

1

は多分これがこの質問を見つけた誰かを助けます。 e。追加時に

print(((y_pred != 0.) & (y_pred != 1.)).any()) 

出力にはTrueが表示されます。 (このコマンドは、0または1以外の値があるかどうかを調べます)。

あなたが使用して非バイナリ値を見ることができます:

non_binary_values = y_pred[(y_pred['score'] != 1) & (y_pred['score'] != 0)] 
non_binary_idxs = y_pred[(y_pred['score'] != 1) & (y_pred['score'] != 0)].index 

print文を出力することができる上記の誘導体化した変数。

最後に、この関数はすべて非バイナリエントリのデータをきれいにすることができます:

def remove_unlabelled_data(X, y): 
    drop_indexes = X[(y['score'] != 1) & (y['score'] != 0)].index 
    return X.drop(drop_indexes), y.drop(drop_indexes) 
関連する問題