2017-02-19 10 views
0

this questionに記載されている警告の問題を解決するには、ひどく時間がかかります。残念ながら、ここで提案されている修正を行っても問題は解決しません。Sklearnの1Dアレイでの非推奨警告の取得

私はSVM.SVC予測に1D配列を供給していますが、廃止予定の警告が表示されています。私は何が間違っているのか分かりませんし、誰かが私のコードを修正するのを助けることを望んでいます。私はそれが私が行方不明の小さな修正だと確信しています。私は、Python 2.7私はデータフレームdata_dfで始まる

使用してい

(寸法明快さが、コードおよび構造のために、ここで減少が正確である):

Price/Sales Price/Book Profit Margin Operating Margin 
0   2.80  6.01   29.56    11.97 
1   2.43  4.98   25.56    6.20 
2   1.61  3.24   4.86    5.38 
3   1.52  3.04   4.86    5.38 
4   3.31  4.26   6.38    3.58 

私はnumpyの配列へデータフレームを変更します。私を与え

X = data_df.values 

[[ 2.8, 6.01, 29.56, 11.97], 
[ 2.43, 4.98, 25.56, 6.2 ], 
[ 1.61, 3.24, 4.86, 5.38], 
[ 1.52, 3.04, 4.86, 5.38], 
[ 3.31, 4.26, 6.38, 3.58]] 

その後、私はセンターと私のデータを正規化:

私を与える
X = preprocessing.scale(X) 

[[ 0.67746872 1.5428404 1.39746257 1.90843628] 
[ 0.13956437 0.61025495 1.03249454 -0.10540376] 
[-1.05254797 -0.96518067 -0.85621499 -0.3915994 ] 
[-1.18338957 -1.14626523 -0.85621499 -0.3915994 ] 
[ 1.41890444 -0.04164945 -0.71752714 -1.01983373]] 

は私のyは0と1のシリーズです:

[0, 0, 1, 0, 1] 

実際のデータセット約10,000の観測値です。私はトレーニング、テスト、および正確さをチェックするためのサブセットを選択するために、次のコードを使用:

test_size = 500 


clf = svm.SVC(kernel = "linear", C=1.0) 
clf.fit(X[:-test_size],y[:-test_size]) 

correct_count = 0 

for x in range(1, test_size+1): 
    if clf.predict(X[-x])[0] == y[-x]: 
     correct_count += 1 

print("Accuracy: ", correct_count/test_size * 100.00) 

Iはclf.predictに供給要因のテストセットは、(Xが[-x]は、x = 1 +1をtest_sizeする)スロー

C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site-packages\sklearn\ut 
ils\validation.py:386: DeprecationWarning: Passing 1d arrays as data is deprecat 
ed in 0.17 and willraise ValueError in 0.19. Reshape your data either using X.re 
shape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contain 
s a single sample. 
    DeprecationWarning) 

コードが機能し、予測ができて精度を計算できますが、まだ警告が表示されています。

私が検索から知ることができ、上記の他の質問を参照する限り、私のデータは適切な形式です。私は何が欠けていますか?

ご協力いただきありがとうございます。

答えて

2

警告メッセージの示唆をするだけで済みます。変数X[-x]は1Dですが、2Dである必要があります。これは、複数の機能を備えた単一のサンプルですので、ちょうどそれに.reshape(1,-1)を追加し、警告が晴れ:

for x in range(1, test_size+1): 
    if clf.predict(X[-x].reshape(1,-1))[0] == y[-x]: 
     correct_count += 1 

clf.predict機能は、複数の機能を使用して複数の値を予測することができます。 1D配列を渡す場合、インテントが複数のフィーチャを持つ単一の値であるか、単一のフィーチャを持つ複数の値であるかは不明です。警告メッセージは、2D配列を自分で作成して区別を明示するように指示します。

+0

この回答ありがとうございます。私はこれを試したと思っていましたが、私はこれがうまくいかないと思うような重複した警告がありました。しかし、あなたはもっと細かく説明することができますか?.reshape(-1,1)は何ですか?配列は依然としてリストの1D配列のようです。また、あなたの声明を明確にすることができますか?あなたの意図が複数の機能を持つ単一の値か、単一の機能を持つ複数の値かは不明です。ありがとう。 – Windstorm1981

+0

'.reshape(1、-1)'の '-1'は配列に新しい次元を作成し、1次元配列を2次元配列に変換します。結果には1行があり、元の1Dデータを保持するために新しい次元に必要な値があります。それを印刷するときに余分な括弧があり、次元を示します。 'clf.predict'は複数の独立変数を使用して1つの結果を予測し、複数の結果を同時に2D入力配列のスライスで予測できます。 1D配列が与えられていれば、多くの独立変数を使用するか、多くの結果を予測するのかはすぐには分かりません。 – Brian

関連する問題