决策树(Decision Tree)是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规
则,并用树状图的结构来呈现这些规则,以解决分类和回归问题。决策树算法容易理解,适用各种数据,在解决各
种问题时都有良好表现,尤其是以树模型为核心的各种集成算法,在各个行业和领域都有广泛的应用。
我们来简单了解一下决策树是如何工作的。决策树算法的本质是一种图结构,我们只需要问一系列问题就可以对数
据进行分类了。比如说,来看看下面这组数据集,这是一系列已知物种以及所属类别的数据:
我们现在的目标是,将动物们分为哺乳类和非哺乳类。那根据已经收集到的数据,决策树算法为我们算出了下面的
这棵决策树:
可以看出,在这个决策过程中,我们一直在对记录的特征进行提问。最初的问题所在的地方叫做根节点,在得到结
论前的每一个问题都是中间节点,而得到的每一个结论(动物的类别)都叫做叶子节点。
决策树算法的核心是要解决两个问题:
1)如何从数据表中找出最佳节点和最佳分枝?
2)如何让决策树停止生长,防止过拟合?
理论公式介绍见我另一篇博文,链接——>数据分析45讲—决策树(笔记)
from sklearn import tree #导入需要的模块
clf = tree.DecisionTreeClassifier() #实例化
clf = clf.fit(X_train,y_train) #用训练集数据训练模型
result = clf.score(X_test,y_test) #导入测试集,从接口中调用需要的信息
from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
2.1 探索数据
wine = load_wine() # wine 其实就是一个字典
print(wine.data) # 获取字典的键data对应的值类似于wine.get(data)
print(wine.target)
data = pd.concat([pd.DataFrame(wine.data), pd.DataFrame(wine.target)], axis=1) # 使用pandans将data和target合并
print(data)
print(wine.feature_names) # 查看特征名
print(wine.target_names) # 查看类名
3.1 训练集验证集的划分
xtrain,xtest,ytrain,ytest = train_test_split(wine.data,wine.target,test_size=0.3) # 0.3指的是70%数据作训练,30%数据做测试
print(xtrain.shape)
4.1 建模
clf = tree.DecisionTreeClassifier(criterion="entropy")
clf.fit(xtrain,ytrain)
score = clf.score(xtest,ytest)
print(score)
4.2 画出一个树的模型
使用jupyter notebook画,使用 pycharm展示不出来
feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类',
'花青素','颜色强度','色调','od280/od315稀释葡萄酒','脯氨酸']
dot = tree.export_graphviz(clf,
feature_names=feature_name,
class_names=["琴酒","雪莉","贝尔摩德"],
filled=True,
rounded=True
)
graph = graphviz.Source(dot)
graph
去graphviz官网下载安装包,配置到系统环境变量就可以了
clf=tree.DecisionTreeClassifier(criterion=entropy"
,random_state=30
,splitter="random"
,max_depth=3 # 最大深度为3
,min_samples_leaf=10 # 每个节点至少有十个样本
,min_samples_split=10
)
clf = clf.fit(Xtrain, Ytrain)
test = []
for i in range(10):
clf = tree.DecisionTreeClassifier(max_depth=i+1
,criterion="entropy"
,random_state=30
,splitter="random"
)
clf = clf.fit(xtrain, ytrain)
score = clf.score(xtest, ytest)
test.append(score)
plt.plot(range(1,11),test,color="red",label="max_depth")
plt.legend()
plt.show()
分类树DecisionTreeClassifier和用决策树绘图(export_graphviz)的所有基础
决策树的基本流程,分类树的七个参数,一个属性,四个接口,以及绘图所用的代码。
七个参数:Criterion,两个随机性相关的参数(random_state,splitter),四个剪枝参数(max_depth, ,min_sample_leaf,max_feature,min_impurity_decrease)
一个属性:feature_importances_
四个接口:fit,score,apply,predict
参考哔哩哔哩菜菜TsaiTsai菜菜TsaiTsai