2017-08-07 5 views
1

logistic regressionには比較的新しいです。これはPythonでSciKit learnを使用しています。いくつかの話題を読み、いくつかのデモを見ると、私は自分自身で潜水することに決めました。ロジスティック回帰で予測する(Python Sci Kit Learn)

基本的に、いくつかの機能に基づいて、顧客のコンバージョン率を予測しようとしています。その結果は、アクティブ(1)またはアクティブではありません(0)です。私はKNNロジスティック回帰を試しました。 KNN平均精度は0.893であり、ロジスティック回帰0.994となります。後者はとても高いようですが、現実的/可能なのでしょうか?

とにかく私のモデルが確かに非常に正確だとしたら、同じフィーチャ欄を持つ新しいデータセットをインポートして、その変換を予測します(今月終了)。上記の場合、精度スコアを得るためにcross_val_scoreを使用しました。

新しいセットをインポートする必要がありますか、何とか新しいセットをこのモデルに適合させる必要があります。 (もう一度練習しないで、今すぐ使用したいだけです)

私はどのように進めることができますか教えてください。追加情報が必要な場合は、その点についてコメントしてください。

ありがとうございます!

+1

精度/誤分類率が唯一ではないディスク

filename = 'finalized_model.sav' joblib.dump(model, filename) 

負荷にモデルを保存定義され、そこにX、Yを想定しますあなたが見なければならないメトリックまた、クラスごとの精度を調べる必要があります。たとえば、100行に99個の1とゼロがあり、モデルがすべての行について100と予測する場合、99%の精度がありますが、モデルのゼロ予測がうまくいかない可能性があります。オーバー/アンダーサンプリングによってこれをトラブルシューティングすることができます。 –

+1

モデルを訓練したら、予測機能を使用して新しいデータをモデルに渡すことができます。例: 'clf'がモデルオブジェクトであれば、' clf.predict(test_data) 'を使うことができます。これは予測を返します。 '.fit'を使って新しい新しいデータセットを渡すと、それに応じてモデルが更新されます。予測が必要なだけで、モデルを変更したくない場合は、 '.predict'メソッドを直接使うべきです。あなたの質問に答えているので、この場合、予測する必要があります。フィッティングは必要ありません。 –

+0

ありがとう、私のデータセットでActive(1)は68%、Not Active(0)32%で発生します。それは大丈夫と思われる。 –

答えて

1

統計的な質問について:もちろん、あなたのデータにノイズがほとんどないか、コメントに記載されているシナリオクロックスレーブが発生する可能性があります。分類器の輸入については

、あなたはpickleモジュールのバイナリとして保存した後、ちょうどあなたがそれを必要なときにそれをロードして、新しいデータ

import pickle 

#Do the classification and name the fitted object clf 
with open('clf.pickle', 'wb') as file : 
    pickle.dump(clf,file,pickle.HIGHEST_PROTOCOL) 
clf.predict()メソッドを使用します(それを pickleことができ

そして、あなたはそれを「ピックル]の横

import pickle 

with open('clf.pickle', 'rb') as file : 
    clf =pickle.load(file) 

# Now predict on the new dataframe df as 
pred = clf.predict(df.values) 
+0

sklearn.linear_modelインポートロジスティック回帰 logreg =ロジスティック回帰() logreg_scores = cross_val_score(logreg、X、Y、CV = 10、スコア= '精度')から プリント(logreg_scores) :これは、元のコードでしたフェーズでは、 "wb"ではなく "rb"でなければなりません。また、なぜ "HIGHEST_PROTOCOL"が必要ですか? –

+1

1.もちろん、それを指摘してくれてありがとう。明らかに、ファイルを読み込み、上書きする必要はありません。私が採用したコンベンションのほうがずっとです。私がプロトコル2を知っている限り、HIGHEST_PROTOCOLが最も効率的です。しかし、何も変更せずに '2'や' -1'を使うことができます。プロトコルを定義しないと、デフォルトでは0も動作します。 –

+0

精度のおかげで。 –

1

をロードすることができますし、後で、 'JOBLIB' を使用することもできる。

## 
from sklearn.linear_model import LogisticRegression 
from sklearn.externals import joblib 

はすでに

model = LogisticRegression() 
model.fit(X, Y) 

は、ディスクからのモデルは

loaded_model = joblib.load(filename) 
result = loaded_model.score(X_test, Y_test) 
+0

ありがとうナチ! –

+0

これを使用する利点はありますか?確かにjoblibはscikitから学んでいますので、あなたはすでにこの文脈でそれを持っていますが、joblibに関してエッジがない場合は、ほとんどの場合標準ライブラリオプションを使う傾向があります。 –

関連する問題