2017-09-13 105 views
-3

我想一個GridSearchCVDecisionTreeClassifier運行,唯一的超參數是max_depth。我跑這兩個版本是:GridSearchCV上DecisionTreeClassifier

max_depth = range(1,20) 

best_estimator_ attribute顯示15 MAX_DEPTH而計分函數顯示0.8880的測試設置

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

所以你刪除它,使我看起來像你沒有準備你的問題中的東西嗎?而且你再次呈現的代碼沒有可重現的'''X_train,y_train'''。 – sascha

回答

0

您的問題

爲什麼不GridSearchCV挑選的10 MAX_DEPTH第一次就 如果它提供了更好的成績?

我的答案(按我的理解,我已經經歷了太多過去的來源獲得舉)

樹去越深,有關訓練數據越複雜,就會學到。這被稱爲「過度擬合」,它可以很好地學習訓練數據,但可能無法很好地推廣未見的數據。 爲什麼是默認的超參數max_depth=3?這是sklearn團隊的設計決定。

但爲什麼max_depth=3

開發商可能考慮的缺省值適用於大多數使用情況確定這一點。他們也可能已經確定3更好地總結了看不見的數據。

決策樹是隨機

你不會得到你每次重新運行時相同best_estimator_。嘗試使用random_state以使其每次都可重複。

相關問題