2016-04-08 7 views
1

私は一般的に機械学習に精通しており、具体的にはscikit-learnです。ValueError Scikitは学びます。モデルの機能の数が入力と一致しません

私は私自身のデータ・セットを使用しています、自分で練習するためにサイトhttp://scikit-learn.org/stable/tutorial/basic/tutorial.html

に与えられた例を使用しようとしています。私のデータセットは、二つの異なるCSVファイルに分割されています。Train_data.csvは

32列が含まれ、最後の列には、出力値です)。

Test_data.csvは(31列が含まれている列が欠落している出力 - ?ケースである必要があり、なし)

テストデータがトレーニングデータよりも1列少ない..です

私は、(トレーニングデータを使用して)学習し、次に(テストデータを使用して)予測するために、次のコードを使用しています。ここで

*ValueError: X.shape[1] = 31 should be equal to 29, the number of features at training time* 

が私のコードである(それは完全に間違って見える場合申し訳ありません:()

import pandas as pd #import the library 
from sklearn import svm 

mydata = pd.read_csv("Train - Copy.csv") #I read my training data set 
target = mydata["Desired"] #my csv has header row, and the output label column is named "Desired" 
data = mydata.ix[:,:-3] #select all but the last column as data 


clf = svm.SVC(gamma=0.001, C=100.) #Code from the URL above 
clf.fit(data,target) #Code from the URL above 

test_data = pd.read_csv("test.csv") #I read my test data set. Without the output column 

clf.predict(test_data[-1:]) #Code from the URL above 

トレーニングデータのcsvラベルは次のようになります。

私が直面しています問題は誤りであります:

値1、値2、値3、Value4、出力

テストデータのcsvラベルは、次のようになります。

値1、値2、値3、値4。

感謝:)

+0

私はターゲットがエラーの原因となる可能性のあるデータよりも少ない要素を持っていると思います。 – Whitefret

+0

はい、そうです。しかし、私はそこに正確に混乱しています。しかし、論理、私のトレーニングセットは、1つの要素(結果)を持つ必要があります。テストデータは使用しないでください。理解は正しいですか? –

+0

いいえ、あなたのテストデータではありません、あなたの目標です。 sklearn表記法では、Xは、Xがデータを表すタプルまたはリストのタブであり、yが結果である場合、モデルで見つけなければならないターゲット値です。 – Whitefret

答えて

1

あなたの問題は、監修問題である、あなたは(入力、出力)の形でいくつかのデータを持っています。

入力はあなたの例を説明するフィーチャであり、出力はその入力が与えられたときにモデルが応答する予測です。

トレーニングデータでは、モデルを訓練するには出力を与える必要があるため、CSVファイルにはさらに1つの属性があります。

監視者問題とsklearnでの一般的なワークフローは、あなたがtrain_test_splitを使用することができ、あなたのデータを分割するには、この

X, Y = read_data(data) 
n = len(X) 
X_train, X_test = X[:n*0.8], X[n*0.8:] 
Y_train, Y_test = Y[:n*0.8], Y[n*0.8:] 

model.fit(X_train,Y_train) 
model.score(X_test, Y_test) 

のようになりますし、あなたのモデルのパフォーマンスを判断するためにmetricsいくつかを使用することができます。

あなたが最後の最後の3列の代わりに考慮していないように思えてデータ

data.shape 

の形状を確認する必要があります。代わりにお試しください:

data = mydata.ix[:,:-1] 
+0

ありがとう。これは助けになりました。 [:、: - 3]を使用して、私は結果の列(私のデータセットで3番目)を削除しようとしていました。 –

関連する問題