2016-09-14 12 views
0

同じトレーニングとテストのデータセットの場合、KNNの精度は0.53です.RandomForestとAdaBoostの精度は1です。だれでも助けてくれますか?sklearnランダムフォレストの精度

コード:

## 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

これらは異なる見積もりです。したがって、あなたが異なる精度の得点を得ることは驚くべきことではありません。あなたの質問はあまり明確ではありません。あなたのランダムフォレストまたはKNNの正確さを心配していますか?あなたに役立ついくつかの提案があります:すべての見積もり者の学習曲線をプロットしてください(http://scikit-learn.org/stable/modules/learning_curve.html#learning-curves)。あなたは単純にあなたのデータをオーバーフィットするかもしれません。さらに、最高のパフォーマンスを得るには、モデルのハイパーパラメータを調整する必要があります(http://scikit-learn.org/stable/modules/grid_search.html)。 – MhFarahani

+0

MhFarahaniありがとう!私はラベルが機能の1つに基づいていることを知っている、私はデータセットからそれをドロップすることを忘れていた。プロットのあなたの提案は、すべてのエスティメータとオーバーフィットの学習曲線はまだ初心者のために役立ちます –

答えて

0

異なるモデルは、ほとんどの場合、同じデータセットに異なる精度を与えます。たとえば、LogisticRegressionとSVMを使用してデータセットをトレーニングしてテストする場合、両方のモデルが異なるスコアを与える可能性が高くなります。データに最適なモデルを選択するには、まずデータセットを探索してから、そのケースでより優れたアルゴリズムを選択する必要があります。

また、あなたのRandomForestとAdaBoostの精度が1であるため、あなたのモデルは過度にフィットしている可能性が非常に高いです。