2017-09-13 10 views
-3

max_depthという唯一のハイパーパラメータを使用して、DecisionTreeClassifierを超えてGridSearchCVを実行しようとしています。私はこれを実行した2つのバージョンがある:スコアリング関数は、試験に0.8880示しているDecisionTreeClassifierのGridSearchCV

max_depth = range(1,20) 

best_estimator_ attribute 15のMAX_DEPTHを示す設定

max_depth = range(1,15) 

best_estimator_ attributeは、より高い10のMAX_DEPTHを示します0.8907のスコア。

私の質問は、なぜより良いスコアを与える場合、GridSearchCVは10のmax_depthを最初に選ぶのですか?次のように

コードは次のようになります。それは、より良いスコアを与える場合

from sklearn.grid_search import GridSearchCV 
from sklearn.metrics import make_scorer 

clf = tree.DecisionTreeClassifier(random_state=7) 

parameters = {"max_depth": range(1,20), "random_state":[7]} 

scorer = make_scorer(fbeta_score,beta=0.5) 

grid_obj = GridSearchCV(estimator=clf,param_grid=parameters,scoring=scorer) 

grid_fit =grid_obj.fit(X_train,y_train) 

best_clf = grid_fit.best_estimator_ 

predictions = (clf.fit(X_train, y_train)).predict(X_test) 
best_predictions = best_clf.predict(X_test) 

# Report the before-and-afterscores 
print best_clf 

print "\nOptimized Model\n------" 
print "Final accuracy score on the testing data: 
{:.4f}".format(accuracy_score(y_test, best_predictions)) 
print "Final F-score on the testing data: {:.4f}".format(fbeta_score(y_test, 
best_predictions, beta = 0.5)) 
+0

他の質問を削除して再度追加してコメントを破棄しましたか? – sascha

+0

しました。私がしたコードを追加するように頼む2つのコメント以外には、 "捨て去る"ものは何もありませんでした。 –

+2

あなたはそれを削除して、あなたの質問の中で何かを準備したように見えますか?また、再現可能な '' 'X_train、y_train'''を使わずにコードを表示することもできます。 – sascha

答えて

0

あなたの質問

はなぜGridSearchCV 10のMAX_DEPTHに 最初の頃を選択しないのですか?

私の答え(私はそれを理解し、私は引用する、あまりにも多くの過去の情報源を通じて取得したこと)

木が行くより深く、それは学習トレーニングデータについてもっと複雑。これはトレーニングデータを実際にはよく知っているが、目に見えないデータでは一般化しにくい「オーバーフィッティング」と呼ばれています。 デフォルトのハイパーパラメータはなぜmax_depth=3ですか?それはスケートボードチームの設計決定です。

しかし、なぜmax_depth=3

開発者は、ほとんどのユースケースに適用できる既定値を考慮して、これを判断する可能性があります。彼らはまた、目に見えないデータについては3がより一般化すると判断するかもしれない。

決定木は、あなたが同じbest_estimator_あなたが再実行するたびに取得することはできません

ランダムです。毎回反復可能にするにはrandom_stateを試してください。

関連する問題