首页 > 编程知识 正文

决策树如何实现多分类任务,决策树分类的基本原理

时间:2023-05-04 12:03:34 阅读:59249 作者:3170

实验4在决策树分类实验中

一、实验要求

在计算机上验证和测试make_moons和make_circles中的数据,以测试不同分类模型的效果。

实验目的1、掌握sklearn生成数据集

2、比较KNN、贝叶斯、决策树在不同数据集上的分类表示:边界和交叉验证

3、设计优化集成学习,提高make_moons和make_circles的分类效果;

三.实验内容

实验步骤

阅读ensemble代码,生成make_moons和make_circles两种非线性数据,分别用KNN、贝叶斯和决策树分类,画出分类界线,同时将两种数据集用不同分类器和不同交叉验证方法得到的平均精度表

标准交叉验证:重复5次数据,得到精度平均后追加。

froms klearn.model _ selectionimportcross _ val _ score

print(cross_val_score(KNN_clf,x,y,cv=5).mean ) ) http://www.Sina.com/3358 www.Sina.com

分支交叉验证:按原类别比例划分数据集,划分数据集后进行分割次数的迭代,得到精度均值

froms klearn.model _ selectionimportstratifiedkfold

strkfold=stratifiedkfold (n _ splits=5,shuffle=True,random_state=0) )。

n_splits :默认值为3,指示要将数据拆分为多少部分。 即,k转弯交叉验证中k;

shuffle :默认值为False,指示是否需要打乱顺序。 如果设置为True,则打乱顺序后再进行分隔。 如果为False,则按原样分隔。

random_state :默认值为None,表示随机数种子,并且仅在shuffle设置为True时启用。

交叉检查保留一种方法:假设数据集有n个样本(N1、N2、 Nn ),将此样本分为两部分,前N-1个样本用于分类器训练,另一个样本用于测试。 这样从N1到Nn重复n次,所有样本中的所有对象都经过了测试和训练

froms klearn.model _ selectionimportleaveoneout

n:justify;">loout = LeaveOneOut()

随机排列交叉验证:用于将样本集合随机“打散”后划分为训练集、测试集(可能会出现相同测试集情况,因为随机的特性)

from sklearn.model_selection import ShuffleSplit

shufspl = ShuffleSplit(train_size=0.5,test_size=0.4,n_splits=8)

针对circles进行分类,KNN效果明显好于贝叶斯和决策树

对于非线性SVM更适合分类,测试结果为0.995

KNN分类

贝叶斯分类

决策树分类

请阅读ensemble代码,针对makemoons和makecircels两种数据集,选取不同的集成学习模型,跟上面一样,列出每种集成学习模型最终的分界线和交叉验证准确率表(可以选用LeaveOneOut验证法)

目录

针对circles进行分类,KNN效果明显好于贝叶斯和决策树

对于非线性SVM更适合分类,测试结果为0.995

KNN分类

贝叶斯分类

决策树分类


实验总结

标准交叉验证:将数据进行五次迭代折得到精度均值,并添加。

from sklearn.model_selection import cross_val_score

print(cross_val_score(knn_clf,X, y, cv=5).mean())  cv交叉验证折数或可迭代的次数

分折交叉验证:会按照原始类别比例分割数据集,将数据集分割后,进行分割次数迭代,得到精度均值

from sklearn.model_selection import StratifiedKFold

strKFold = StratifiedKFold(n_splits=5,shuffle=True,random_state=0)

n_splits:默认为3,表示将数据划分为多少份,即k折交叉验证中的k;

shuffle:默认为False,表示是否需要打乱顺序,如果设置为True,则会先打乱顺序再做划分,如果为False,会直接按照顺序做划分;

random_state:默认为None,表示随机数的种子,只有当shuffle设置为True的时候才会生效。

留一法交叉验证:假定数据集有N个样本(N1、N2、...Nn),将这个样本分为两份,第一份N-1个样本用来训练分类器,另一份1个样本用来测试,如此从N1到Nn迭代N次,所有的样本里所有对象都经历了测试和训练

from sklearn.model_selection import LeaveOneOut

loout = LeaveOneOut()

随机排列交叉验证:用于将样本集合随机“打散”后划分为训练集、测试集(可能会出现相同测试集情况,因为随机的特性)

from sklearn.model_selection import ShuffleSplit

shufspl = ShuffleSplit(train_size=0.5,test_size=0.4,n_splits=8)

bagging自助法是一种有放回的抽样方法。它是非参数统计中一种重要的通过估计统计量方差进而进行区间估计的统计方法,遵从“在不知道数据总体分布时,对总体分布的最好的猜测便是由数据提供的分布”原则。

Boosting每一次训练的时候都更加关心上一次分类错误的样例,给这些分类错误的样例更大的权重,下一次训练的目标就是能够更容易辨别出上一次分类错误的样例,最终将多次迭代训练得到的弱分类器进行加权相加得到最终的强分类器

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。