美文网首页
机器学习调参检查清单

机器学习调参检查清单

作者: Ryan96 | 来源:发表于2020-05-02 10:31 被阅读0次

    1、学习曲线

    使用画曲线的方法来确定一个区域,先用步长10以上确定范围,再进一步在这个范围中步长1来搜索
    大型数据集可以1000步长100等
    适用与权重较高的属性

    #超参数曲线
    tr = []
    te = []
    for i in range(10):
        clf = DecisionTreeClassifier(random_state=25
                                     ,max_depth=i+1
                                     ,criterion="entropy"
                                   )
        clf = clf.fit(Xtrain, Ytrain)
        score_tr = clf.score(Xtrain,Ytrain)
    #太慢就放弃交叉验证
        score_te = cross_val_score(clf,X,y,cv=10).mean()
        tr.append(score_tr)
        te.append(score_te)
    print(max(te))
    plt.plot(range(1,11),tr,color="red",label="train")
    plt.plot(range(1,11),te,color="blue",label="test")
    plt.xticks(range(1,11))
    plt.legend()
    plt.show()
    
    scorel = []
    for i in range(0,200,10):
        rfc = RandomForestClassifier(n_estimators=i+1,
                                     n_jobs=-1,
                                     random_state=90)
        score = cross_val_score(rfc,data.data,data.target,cv=10).mean()
        scorel.append(score)
    print(max(scorel),(scorel.index(max(scorel))*10)+1)
    plt.figure(figsize=[20,5])
    plt.plot(range(1,201,10),scorel)
    plt.show()
    
    

    2、网格搜索

    一次只搜索一个参数,如果搜索出的最佳参数效果变好了就留下,没变好就保持参数不变

    
    gini_thresholds = np.linspace(0,0.5,20)
    parameters = {'splitter':('best','random')
                 ,'criterion':("gini","entropy")
                 ,"max_depth":[*range(1,10)]
                 ,'min_samples_leaf':[*range(1,50,5)]
                 ,'min_impurity_decrease':[*np.linspace(0,0.5,20)]
                 }
    clf = DecisionTreeClassifier(random_state=25)
    GS = GridSearchCV(clf, parameters, cv=10)
    GS.fit(Xtrain,Ytrain)
    GS.best_params_
    GS.best_score_
    
    param_grid={'min_samples_leaf':np.arange(1, 1+10, 1)}
    #对于min_samples_split和min_samples_leaf,一般是从他们的最小值开始向上增加10或20
    #面对高维度高样本量数据,如果不放心,也可以直接+50,对于大型数据,可能需要200~300的范围
    #如果调整的时候发现准确率无论如何都上不来,那可以放心大胆调一个很大的数据,大力限制模型的复杂度
    rfc = RandomForestClassifier(n_estimators=39
                                 ,random_state=90
                               )
    GS = GridSearchCV(rfc,param_grid,cv=10)
    GS.fit(data.data,data.target)
    GS.best_params_
    GS.best_score_
    

    决策树

    微信截图_20200421172238.png

    相关文章

      网友评论

          本文标题:机器学习调参检查清单

          本文链接:https://www.haomeiwen.com/subject/smouihtx.html