实验4 决策树分类实验下
一、实验要求
在计算机上验证和测试make_moons和make_circles数据测试不同的分类模型的效果。
- 实验目的
1、掌握sklearn生成数据集
2、对比KNN,贝叶斯,决策树再不同数据集上的分类表现:分界线和交叉验证;
3、设计优化集成学习,提高在make_moons和make_circles上的分类效果;
三、实验内容
实验步骤
- 请阅读ensemble代码,生成make_moons和make_circles两种非线性数据,分别用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)
针对circles进行分类,KNN效果明显好于贝叶斯和决策树
对于非线性SVM更适合分类,测试结果为0.995
KNN分类
贝叶斯分类
决策树分类
- 请阅读ensemble代码,针对makemoons和makecircels两种数据集,选取不同的集成学习模型,跟上面一样,列出每种集成学习模型最终的分界线和交叉验证准确率表(可以选用LeaveOneOut验证法)
目录
针对circles进行分类,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每一次训练的时候都更加关心上一次分类错误的样例,给这些分类错误的样例更大的权重,下一次训练的目标就是能够更容易辨别出上一次分类错误的样例,最终将多次迭代训练得到的弱分类器进行加权相加得到最终的强分类器