Scikit-learn 在 DecisionTreeClassifier 上使用 GridSearchCV
Posted
技术标签:
【中文标题】Scikit-learn 在 DecisionTreeClassifier 上使用 GridSearchCV【英文标题】:Scikit-learn using GridSearchCV on DecisionTreeClassifier 【发布时间】:2016-12-07 04:10:27 【问题描述】:我尝试在 DecisionTreeClassifier 上使用 GridSearchCV,但收到以下错误: TypeError: 必须使用 DecisionTreeClassifier 实例作为第一个参数调用未绑定的方法 get_params()(什么都没有)
这是我的代码:
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.model_selection import GridSearchCV
from sklearn.cross_validation import cross_val_score
X, Y = createDataSet(filename)
tree_para = 'criterion':['gini','entropy'],'max_depth':[4,5,6,7,8,9,10,11,12,15,20,30,40,50,70,90,120,150]
clf = GridSearchCV(DecisionTreeClassifier, tree_para, cv=5)
clf.fit(X, Y)
【问题讨论】:
【参考方案1】:在您对GridSearchCV
方法的调用中,第一个参数应该是DecisionTreeClassifier
的实例化对象,而不是类的名称。应该是
clf = GridSearchCV(DecisionTreeClassifier(), tree_para, cv=5)
查看示例here 了解更多详情。
希望有帮助!
【讨论】:
【参考方案2】:如果问题仍然存在,请尝试更换:
from sklearn.grid_search import GridSearchCV
与
from sklearn.model_selection import GridSearchCV
这听起来很愚蠢,但我遇到了类似的问题,我设法使用这个技巧解决了这些问题。
【讨论】:
【参考方案3】:需要在分类器前面加一个():
clf = GridSearchCV(DecisionTreeClassifier(), tree_para, cv=5)
【讨论】:
【参考方案4】:这里是决策树网格搜索的代码
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV
def dtree_grid_search(X,y,nfolds):
#create a dictionary of all values we want to test
param_grid = 'criterion':['gini','entropy'],'max_depth': np.arange(3, 15)
# decision tree model
dtree_model=DecisionTreeClassifier()
#use gridsearch to test all values
dtree_gscv = GridSearchCV(dtree_model, param_grid, cv=nfolds)
#fit model to data
dtree_gscv.fit(X, y)
return dtree_gscv.best_params_
【讨论】:
【参考方案5】:关于参数的另一个方面是网格搜索可以使用不同的参数组合运行。下面提到的参数将检查criterion
和max_depth
的不同组合
tree_param = 'criterion':['gini','entropy'],'max_depth':[4,5,6,7,8,9,10,11,12,15,20,30,40,50,70,90,120,150]
如果需要,网格搜索可以在多组参数候选上运行:
例如:
tree_param = ['criterion': ['entropy', 'gini'], 'max_depth': max_depth_range,
'min_samples_leaf': min_samples_leaf_range]
在这种情况下,网格搜索将在两组参数上运行,第一个是 criterion
和 max_depth
的每个组合,第二个是所有提供的 min_samples_leaf
值
【讨论】:
以上是关于Scikit-learn 在 DecisionTreeClassifier 上使用 GridSearchCV的主要内容,如果未能解决你的问题,请参考以下文章