1 sklearn的学习笔记--决策树( 四 )


加餐:网格搜索
# 为了更好的显示数据 , 搜索出一个比较好的效果 , import numpy as np# 设置基尼系数的边界 , 一般取值在(0,0.5)之间 , 其中每个参数都会倍用来搜索gini_thresholds = np.linspace(0,0.5,20)parameters = {'criterion':('gini','entropy'),'splitter':('best','random'),'max_depth':[*range(1,11)],'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_score_
利用网格搜索 , 可以得到对应的搜索数据 , 但是并不会让你的模型有意识的选择部分参数 , 因此如果在中设定的参数都会参与到网络的选择中 , 但是根据结果发现 , 其实通过和就可以较好的选择出一个模型 , 其他参数的设定会导致模型效果下降 。
GS.best_params_# 将最好的parameters进行输出 , 得到最好的效果{'criterion': 'gini','max_depth': 7,'min_impurity_decrease': 0.0,'min_samples_leaf': 6,'splitter': 'best'}GS.best_score_# 输出网格搜索中最好的得分0.829390681003584
实例三:在合成数据集上的表现
就决策树而言 , 不同的数据分布也会影响其在数据上的不同表现 , 接下来我们用实验的方式进行探究 。看看究竟在那种模式上 , 决策拥有比较好的效果呢?
# 导入一些常用的库import numpy as npimport matplotlib.pyplot as pltfrom matplotlib.colors import ListedColormapfrom sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import StandardScaler# 从sklearn数据集中分别导入月亮、环形、分类三种不同的数据集 , 用于后期探究何种数据上分类效果更好?from sklearn.datasets import make_noons, make_circles, make_classificationfrom sklearn.tree import DecisionTreeClassifier
生成数据和数据可视化
# 利用对应的api生成对应的数据来展示# 其中n_samples表示生成多少个样本 , n_features指的是样本的维度 , n_redundant表示冗余特征个数# n_informative表示包含信息的特征个数 , n_clusters_per_class表示每个簇内的类别个数x,y = make_classification(n_samples=100,n_features=2,n_redundant=0,n_informative=2,random_state=2,n_clusters_per_class=1)class_a = []class_b = []for i in range(100):if y[i]==0:class_a.append(list(x[i]))else:class_b.append(list(x[i]))class_a = np.array(class_a)class_b = np.array(class_b)plt.figure()plt.scatter(class_a[:,0],class_a[:,1],color='red')plt.scatter(class_b[:,0],class_b[:,1],color='blue')plt.show()
如下是对应的可视化结果
可以发现 , 通过这样生成的图片 , 具有一个比较明显的分类决策边界 , 为了使得模型具备鲁棒性 , 我们给我们的模型添加一定的干扰噪声 。
rng = np.random.RandomState(2) # 生成一种随机模式x += 2* rng.uniform(size=x.shape) # 生成一个和x矩阵大小一致的新矩阵linearly_separable = (x,y)# 将三种的数据集整合变 , 并且打包放在datasets中datasets = [make_moons(noise=0.3,random_state=0),make_circles(noise=0.2,factor=0.5,random_state=1),linearly_separable]
【1sklearn的学习笔记--决策树】