2017-09-26 7 views
2

データセットが約45000サンプルの場合、それぞれバイナリ出力が0または1のいずれかです。しかし、sklearnパッケージでMLPクラシファイアを使用した後、入力が何であっても常に出力が1であるモデルを取得しました。クラス0の精度はゼロです。私はモデルのハイパーパラメータを変更しようとしましたが、出力は同じです。誰もそれを乗り越える方法を提案することはできますか?MLPクラシファイアを使用してクラスの精度がゼロになる

 precision recall f1-score support                                                                           
0  0.00  0.00  0.00  19967                                
1  0.57  1.00  0.73  26688                                                                        
avg/total  0.33  0.57  0.42  46655 

PS:私のコード

loc = './new_attributes_66.csv' 
data = pd.read_csv(loc) 

scaler = MinMaxScaler(feature_range = (-1,1)) 
scaler.fit(data) 
data = scaler.transform(data) 
print data 


input = data[:,0:64] 
output = data[:,65] 
X_tr, X_tst, y_tr, y_tst = train_test_split(input, output, test_size=0.1) 

clf = MLPClassifier(solver='sgd', alpha=1e-5, hidden_layer_sizes=(40,121), random_state=0, warm_start = True, tol = 0.0000001, early_stopping = False, learning_rate='adaptive',learning_rate_init = 0.1, max_iter=10000,shuffle=True,verbose=True) 

clf.fit(X_tr,y_tr) 
predicted = clf.predict(input) 
#print "Accuracy using MLP classifier: " 
print metrics.precision_score(output, predicted) 
#print confusion_matrix(y_tst,predicted) 
print metrics.classification_report(output,predicted) 
#print clf.coefs_ 

データセット(CSV)へのリンク:https://app.box.com/s/vfqgool2u9ovdc9oyi9elq99aor6c6gk

アップデート: 私は、最新の研究結果によると、私のコードと結果を変更しました。 58.14 %の精度で

  precision recall f1-score support 

    -1.0  0.53  0.10  0.17  19967 
    1.0  0.58  0.93  0.72  26688 

avg/total  0.56  0.58  0.48  46655 

:私は、精度と再現率を向上させることができます。他のどのような方法で、ハイパーパラメータを変更できますか?

+0

あなたのデータはどのように見えますか? – gionni

+0

@gionni私のデータは '66'属性と' 0'または '1'のいずれかのターゲット出力を持っています。 – yobro97

+0

これらの66の属性はどのようなものですか?それらは連続的で、カテゴリー的で、混合されていますか?前処理を使用していますか? – gionni

答えて

2

あなたのデータは、クラスの不均衡の問題を抱えている可能性があります。ラベル1のサンプルの数が、ラベル0のサンプルの数よりはるかに多い場合があります。クラス不均衡問題に取り組むための様々な方法があります。

また、隠しのアルファまたは異なる形状の異なる値をチェックしてみてください層。使用している現在の構成が正しく学習できないことがあります。

+0

私は自分のデータセットを追加しましたが、私はこの問題に直面していません。 – yobro97

+0

@ yobro97私はあなたのデータセットを試してみましたが、クラス「0」のリコールを0.0より高くすることができませんでした。しかし、私は両方のクラスの精度値が正になりました。私がクラス「0」のリコールを改善するために幾分かどうかを知ってもらいます。 –

+0

どのように精度を上げることができましたか? – yobro97

0

はやあみんなモハメドKasifからの提案の後、私はデータのAdaBoostClassifierを試してみましたが、-1,1にデータをスケーリングし、以下の結果を得た:

精度:0.682432189042

  precision recall f1-score support 

    -1.0  0.59  0.56  0.57  19967 
    1.0  0.68  0.71  0.70  26688 

avg/total  0.64  0.65  0.64  46655 

これが大きいです改善を57-58 %と比較して、MLPclassifier、さらにはAdaBoostclassifierになることができました。より良い結果が得られれば誰でも自由にアイディアを投稿できます:)

+0

それは全く悪くないです。私が時間を見つけたら、私はよりよい予測を得るために何かを試みます。あなたは68%の精度を得るコードを投稿できますか?次のステップとして、すべてのパラメータ選択を適切に行ったことがある場合は、変数選択を少し参考にしてみてください。 – gionni

関連する問題