2016-09-14 149 views
0

對於相同的訓練和測試數據集,KNN的準確性爲0.53,對於RandomForest和AdaBoost,準確性爲1,任何人都可以提供幫助嗎?sklearn randomforest準確性

代碼:

## prepare data 
begin_date='20140101' 
end_date='20160908' 
stock_code='000001' #平安銀行 
data=ts.get_hist_data(stock_code,start=begin_date,end=end_date) 
close=data.loc[:,'close'] 
df=data[:-1] 
diff=np.array(close[1:])-np.array(close[:-1]) 
label=1*(diff>=0) 
df.loc[:,'diff']=diff 
df.loc[:,'label']=label 

#split dataset into trainging and test 
df_train=df[df.index<'2016-07-08'] 
df_test=df[df.index>='2016-07-08'] 
x_train=df_train[df_train.columns[:-1]] 
y_train=df_train['label'] 
x_test=df_test[df_test.columns[:-1]] 
y_test=df_test['label'] 

##KNN 
clf2 = neighbors.KNeighborsClassifier() 
clf2.fit(x_train, y_train) 
accuracy2 = clf2.score(x_test, y_test) 
pred_knn=np.array(clf2.predict(x_test)) 

#RandomForest 
clf3 = RandomForestClassifier(n_estimators=100,n_jobs=-1) 
clf3.fit(x_train, y_train) 
accuracy3 = clf3.score(x_test, y_test) 
pred_rf=np.array(clf3.predict(x_test)) 

print accuracy1,accuracy2,accuracy3 
+1

這些是不同的估計值。所以,如果你得到不同的準確性分數,這並不奇怪。你的問題不是很清楚。你擔心你的randomforest或KNN的準確性嗎?以下是可能對您有所幫助的一些建議:請爲所有評估人員繪製學習曲線(http://scikit-learn.org/stable/modules/learning_curve.html#learning-curves)。你可能只是過度使用你的數據。此外,爲了獲得最佳性能,您需要調整模型的超參數(http://scikit-learn.org/stable/modules/grid_search.html)。 – MhFarahani

+0

謝謝MhFarahani!我發現標籤是基於其中一個功能的,我忘了從數據集中刪除它。您對所有估算器繪製學習曲線和過度擬合的建議對初學者仍然有幫助 –

回答

0

不同型號給在大多數情況下,對同一數據集不同的精度。例如,如果您試圖使用LogisticRegression和SVM來訓練和測試數據集,那麼很可能兩個模型都會給出不同的分數。爲了爲您的數據選擇最佳模型,您需要首先探索數據集,然後選擇一些在此情況下性能更好的算法。

此外,由於您的RandomForest和AdaBoost的準確性爲1,所以很可能您的模型「過度配置」。