【问题标题】:Scikit-learn using GridSearchCV on DecisionTreeClassifierScikit-learn 在 DecisionTreeClassifier 上使用 GridSearchCV
【发布时间】: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)

【问题讨论】:

    标签: python machine-learning scikit-learn grid-search


    【解决方案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】:

            关于参数的另一个方面是网格搜索可以使用不同的参数组合运行。下面提到的参数将检查criterionmax_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}]
            

            在这种情况下,网格搜索将在两组参数上运行,第一个是 criterionmax_depth 的每个组合,第二个是所有提供的 min_samples_leaf

            【讨论】:

              猜你喜欢
              • 2012-12-30
              • 2013-10-01
              • 2018-10-19
              • 2018-05-14
              • 2014-02-21
              • 2018-02-22
              • 2019-05-23
              相关资源
              最近更新 更多