一、重要参数
(1)随机数种子
随机数种子控制着模型每次的执行情况,设置相同的随机数种子就能得到相同的结果,如果不设置,则每次得到的结果都是不同的,如果我们在需要设置随机数种子的地方都设置好,那么当别人重新运行这些代码时就能复现我们的结果。
(2)random_state
参数random_state的作用就相当于随机数种子,是用来设置随机模式的参数,默认为None,在数据维度较高时随机性会表现的更加明显,而维度较低的数据(比如鸢尾花数据集)随机性几乎不会显现。输入任意整数,则会一直长出同一棵树,让模型稳定下来。
(3)splitter
参数splitter也是用来控制决策树中的随机性选项的,可以输入”best"和“random"。
A. 输入”best":表示虽然决策树在节点划分时是随机的,但是还是会优先选择更重要的属性进行划分(重要性可以通过属性feature_importances_查看);
B. 输入“random":我们知道,决策树会因为含有较多的不必要信息而更深更大,从而降低模型对训练集的拟合程度。参数random 则表示决策树在节点划分时会更加随机,所以对这个参数的设置也是防止过拟合的方式之一。
总之,在模型构建过程中,可以通过对这两个参数的设置来提高模型对训练集的拟合程度,当然,决策树一旦建成,我们依然是使用剪枝参数来防止过拟合的。
二、案例代码
(1)导入算法库和模块
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
(2)构造所需数据集
wine = load_wine() # 导入数据集
# 合成数据
data=np.concatenate((wine.data,wine.target.reshape(-1,1)),axis=1)
#wine.target.reshape(-1,1):将target标签变量转化为1列数据
# 合成列索引
wine.feature_names.append("label")
# 合成DataFrame
wine_df=pd.DataFrame(data=data,columns=wine.feature_names)
wine_df.columns=['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜色强度','色调','od280/od315稀释葡萄酒','脯氨酸','标签']
wine_df.head()
(3)分训练集和测试集
Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine_df.iloc[:,:-1],
wine_df.iloc[:,-1],
test_size=0.3,
random_state=420)
Xtrain.shape
Xtest.shape
(4)建立决策树
random_state & splitter
clf = tree.DecisionTreeClassifier(criterion="entropy"
,random_state=400
,splitter="random"
)
clf = clf.fit(Xtrain, Ytrain)
clf.score(Xtest, Ytest) #返回预测的准确度
尝试执行上述代码,回答以下问题:
输出决策树模型的预测准确度?