机器学习---决策树模型

机器学习—决策树模型

1. 通俗解释:

对于一个根据特征向量来对样本进行分类的问题,首先挑出一个最有价值的特征,对该特征进行提问,如样本的颜色是什么?然后根据样本的不同回答,如红色,蓝色等,将数据集划分成子集,对每一个子集重复上面的操作,即在剩下的特征集合中在找一个对最终分类任务最有用的特征,根据特征的不同取值在划分成更小的子集直到最终子集内的样本都属于或者几乎属于同一类。此时认为模型已经训练好(这的模型实际上指的就是这些提问组成的决策规则),保留这些提问(划分子集的依据)。当有新样本预测时,通过进行一级一级的提问,得到最终的类别。

2. 任务类型:

决策树用来处理有监督的分类问题。但是决策树与线性回归,SVM等不同,它处理的数据的特征往往也是类别的变量,而不是连续值。当然,决策树也可以处理连续变量的问题,但其实际上用的是同样的思路,可以理解成对连续变量进行提问,如值是否大于5,根据回答是与否将数据集划分成子集,继续提问,所以一般来说,决策树较为适合处理特征向量中类别变量比较多的任务,以及对模型的可解释性要求较高的任务。

3. 决策树关键问题:

最关键的问题:特征的优选。在遍历所有特征时需要根据以该特征划分得到子集的纯度为这些特征打分,从而选取最优特征。利用数学工具信息熵和基尼系数来度量和表征一个分布的混乱程度

4. 信息增益原则(信息熵和基尼系数):

信息增益原则是用信息量的变化来度量按照某个特征划分后,子集的纯度的增加程度。具体参考该链接

5. 代码实现:

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.model_selection import train_test_split
import  graphviz
import os
iris=load_iris()
#得到数据与类别标签
iris_data=iris.data
iris_target=iris.target
#类别标签名称
iris_target_names=iris.target_names
#用来训练的特正名称
iris_feat_names=iris.feature_names
#输出类别的特征名称,以及数据集的简单描述
print(iris_feat_names)
print(iris_target_names)
#对数据集进行划分,将30%的数据作为测试集,其余作为训练集
X_train,X_test,y_train,y_test=train_test_split(iris_data,iris_target,test_size=0.3,random_state=2021)
print('训练集与测试集数量与特征信息',X_train.shape,X_test.shape,y_train.shape,y_test.shape)
#建立决策树模型,采用信息增益原则,在最优值处划分,最大深度不设定
print('信息熵,不设定深度')
clf=DecisionTreeClassifier(criterion='entropy',splitter='best',max_depth=None,random_state=2021)
clf.fit(X_train,y_train)
#计算训练集和测试集精度
train_acc=sum(clf.predict(X_train)==y_train)/len(y_train)
test_acc=sum(clf.predict(X_test)==y_test)/len(y_test)
print('训练集精度:{:.2f}'.format(train_acc))
print('测试集精度:{:.2f}'.format(test_acc))
print('最大深度设为3')
clf1=DecisionTreeClassifier(criterion='entropy',splitter='best',max_depth=3,random_state=2021)
clf1.fit(X_train,y_train)
train_acc=sum(clf1.predict(X_train)==y_train)/len(y_train)
test_acc=sum(clf1.predict(X_test)==y_test)/len(y_test)
print('训练集精度:{:.2f}'.format(train_acc))
print('测试集精度:{:.2f}'.format(test_acc))
print('基尼系数')
clf2=DecisionTreeClassifier(criterion='gini',splitter='best',max_depth=None,random_state=2021)
clf2.fit(X_train,y_train)
train_acc=sum(clf2.predict(X_train)==y_train)/len(y_train)
test_acc=sum(clf2.predict(X_test)==y_test)/len(y_test)
print('训练集精度:{:.2f}'.format(train_acc))
print('测试集精度:{:.2f}'.format(test_acc))
# dot_data=export_graphviz(clf,feature_names=iris_feat_names,out_file=None)
# dot=graphviz.Source(dot_data)
# dot.view()

6. 实验结果:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
决策树是一种基本的分类和回归方法,它可以通过训练数据集来建立一个树形结构的模型,用于预测新数据的分类或数值。 在Python中,我们可以使用scikit-learn库来实现决策树。下面是一个简单的例子,展示如何使用决策树来进行分类。 首先,我们需要准备训练数据集和测试数据集。假设我们有一个包含三个特征的数据集,其中每个样本都属于两个类别之一: ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier # 加载Iris数据集 iris = load_iris() # 创建训练数据集和测试数据集 X_train, X_test, y_train, y_test = train_test_split( iris.data, iris.target, test_size=0.3, random_state=42) # 创建决策树分类器 clf = DecisionTreeClassifier() # 训练模型 clf.fit(X_train, y_train) # 在测试数据集上进行预测 y_pred = clf.predict(X_test) # 计算准确率 accuracy = clf.score(X_test, y_test) print("Accuracy:", accuracy) ``` 上面的代码中,我们首先使用`load_iris()`函数加载了Iris数据集,然后使用`train_test_split()`函数将数据集分成训练数据集和测试数据集。接着,我们创建了一个`DecisionTreeClassifier`对象作为决策树分类器,并使用训练数据集来训练模型。最后,我们在测试数据集上进行了预测,并计算了模型的准确率。 需要注意的是,在实际应用中,我们通常需要对训练数据集进行一些预处理工作,比如特征选择、特征缩放等。 决策树的优点在于它们易于理解和解释,可以处理离散和连续特征,适用于多类别问题,且能够自动进行特征选择。但是,决策树也有一些缺点,比如容易过拟合、对噪声敏感等。在实际应用中,我们通常需要结合其他方法来提高模型的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值