机器学习实战2-决策树算法( 五 )


我们可以看到当我们将设置为后score会有怎样的变化
import matplotlib.pyplot as plt te = []tr = []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()
可以看到我们模型的结果变好了
我们仍需要剪枝调参,我们不可能一个一个的画学习曲线,找出最优的组合,这里我们就要引入一个新的知识点叫网格搜索
网格搜索
网格搜索能够帮助我们一次调节多个参数的技术,枚举的思路
缺点:计算量很大,这时由于枚举本身就很耗时
和的区别
是随机的,是指定步长
import numpy as np# 在给定的数据范围内取出指定个有顺序的随机数jini_threholds = np.linspace(0, 0.5, 50)# enproty_threholds = np.linspace(0, 1, 50)# 一些参数和这些参数对应的,我们希望网格搜索来搜索的参数的取值范围parameters = {"criterion" : ("gini", "rntropy"),"splitter" : ("best", "random"),"max_depth": [*range(1, 10)],"min_samples_leaf":[*range(1, 50, 5)],"min_impurity_decrease" : [*np.linspace(0, 0.5, 50)]}clf = DecisionTreeClassifier(random_state = 25)GS = GridSearchCV(clf, parameters, cv = 10) # 同时满足了fit, score, 交叉验证三种功能GS = GS.fit(Xtrain, Ytrain)
网格搜索模型中的参数(两个比较重要的参数)
GS.best_params_ #从我们输入的参数和参数取值的列表中,返回最佳组合GS.best_score_ #网格搜索后的模型的评判标准