2015-09-20 63 views
1

我想對我有一些數據使用RandomForestClassifier。代碼如下:模型的特徵數量必須與輸入值匹配?

print train_data[0,0:20] 
print train_data[0,21::] 
print test_data[0] 

print 'Training...' 
forest = RandomForestClassifier(n_estimators=100) 
forest = forest.fit(train_data[0::,0::20], train_data[0::,21::]) 

print 'Predicting...' 
output = forest.predict(test_data) 

但是這會生成以下錯誤:

ValueError: Number of features of the model must match the input. Model n_features is 3 and input n_features is 21

從前三報表打印輸出是:

[ 0.   0.   0.   0.   1.   0. 
    0.   0.   0.   0.   1.   0. 
    0.   0.   0.   37.7745986 -122.42589168 
    0.   0.   0.  ] 
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
    0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
    1. 0.] 
[ 0.   0.   0.   0.   0.   0. 
    0.   1.   0.   0.   1.   0. 
    0.   0.   0.   0.   37.73505101 
-122.3995877  0.   0.   0.  ] 

我假設數據是正確格式爲我的fit/predict調用,但它在predict上出錯。任何人都可以看到我在這裏做錯了嗎?

回答

1

用於訓練模型的輸入數據是train_data[0::,0::20],我認爲這是一個錯誤(爲什麼跳過它之間的功能?) - 它應該是train_data[0::,0:20],而不是基於您在開始時執行的調試打印。

此外,似乎最後一列代表train_datatest_data中的標籤。預測時,您可能需要在調用predict函數時通過test_data[:, :20]而不是test_data

+0

我支持這個答案,並希望補充一點,即在擬合分類器時,您不需要額外的分配。你的「fit」代碼行應該看起來像'forest.fit(train_data [:,:21],train_data [:,21:])'(假設索引從0到20的前21列是特徵,其餘從21到最後一列索引的列是標籤) – lanenok

相關問題