数据挖掘报告87284.docx

上传人:b****8 文档编号:10238503 上传时间:2023-02-09 格式:DOCX 页数:8 大小:92.32KB
下载 相关 举报
数据挖掘报告87284.docx_第1页
第1页 / 共8页
数据挖掘报告87284.docx_第2页
第2页 / 共8页
数据挖掘报告87284.docx_第3页
第3页 / 共8页
数据挖掘报告87284.docx_第4页
第4页 / 共8页
数据挖掘报告87284.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

数据挖掘报告87284.docx

《数据挖掘报告87284.docx》由会员分享,可在线阅读,更多相关《数据挖掘报告87284.docx(8页珍藏版)》请在冰豆网上搜索。

数据挖掘报告87284.docx

数据挖掘报告87284

 

数据挖掘报告87284

 

 

哈尔滨工业大学

 

数据挖掘理论与算法实验报告

 

(2016年度秋季学期)

 

课程编码S1300019C

授课教师邹兆年

学生姓名汪瑞

学号16S003011

学院计算机学院

一、实验内容

决策树算法是一种有监督学习的分类算法;kmeans是一种无监督的聚类算法。

本次实验实现了以上两种算法。

在决策树算法中采用了不同的样本划分方式、不同的分支属性的选择标准。

在kmeans算法中,比较了不同初始质心产生的差异。

本实验主要使用python语言实现,使用了sklearn包作为实验工具。

二、实验设计

1.决策树算法

1.1读取数据集

本次实验主要使用的数据集是汽车价值数据。

有6个属性,命名和属性值分别如下:

buying:

vhigh,high,med,low.

maint:

vhigh,high,med,low.

doors:

2,3,4,5more.

persons:

2,4,more.

lug_boot:

small,med,big.

safety:

low,med,high.

分类属性是汽车价值,共4类,如下:

classvalues:

unacc,acc,good,vgood

该数据集不存在空缺值。

由于sklearn.tree只能使用数值数据,因此需要对数据进行预处理,将所有标签类属性值转换为整形。

1.2数据集划分

数据集预处理完毕后,对该数据进行数据集划分。

数据集划分方法有hold-out法、k-fold交叉验证法以及有放回抽样法(boottrap)。

Hold—out法在pthon中的实现是使用如下语句:

其中,cv是sklearn中cross_validation包,train_test_split方法的参数分别是数据集、数据集大小、测试集所占比、随机生成方法的可选项。

该方法分别返回,训练集、测试集在原数据集中的序号以及对应的所属类别的序号。

K-flod法实现较为简单。

如下:

xl为数据集大小,n_folds为划分若干折,一般可用10-fold验证。

返回值loo中是包含两个元组的列表,这两个元组分别是train_index和test_index的列表。

Bootstrap法实现如下,其与k-fold方法类似。

1.3创建和训练决策树及评价

数据集划分完毕后,就需要建立决策树并结合训练集来训练决策树。

建立决策树只需要调用tree.DecisionTreeClassifier()方法即可。

它有一些参数可以根据需求进行设置。

Criterion选项,默认是“Gini”,表示决策树非叶节点划分依据是根据Gini指数表示划分的纯度。

可选值有“entropy”,用信息增益来衡量划分的优劣。

Sklearn.tree中没有支持用错分类误差法来衡量节点划分的优劣。

min_samples_split选项,是指一个非叶节点继续划分所需要的最小样本数,如果该节点下的待分样本小于该值,则终止该节点划分,节点被标记为占多少的类,形成叶节点。

它属于提前抑制决策树增长的方法。

max_depth选项,是指该训练决策树时允许达到的最大深度。

默认深度是一直划分到节点纯净或者达到min_samples_split的要求。

因此该选项是实验中有必要进行设置的项,以控制决策树过拟合,它属于前剪枝的操作。

min_impurity_split选项,是指划分某节点时所需要的最低不纯度阈值,如果某一节点划分的不纯度低于该值,表明该节点已经可以被接受成为叶节点,无须继续划分。

它也是一种提前停止增长的策略。

决策树建立和训练的具体实例如下(用10-fold做例子):

由于实验采用的是10-fold交叉验证,因此最终准确率应该是每一折准确率的平均值。

上述代码也包含了训练决策树和使用测试集验证决策树的代码,即:

该实验的最终准确率约是:

testrightrate:

0.8165

1.4基于树桩的Adaboost算法

在python中同样也实现了adaboost算法,需要使用AdaBoostClassifier()方法构造它。

它有若干可选项:

base_estimator是设置adaboost算法使用的弱分类器,默认是一层决策树,即树桩。

n_estimators是设置迭代次数,每一次迭代时该算法选择数据集中的某一特征作为树桩的分类节点,训练集中被错误分类的记录将被增加权重,正确分类的记录将被降低权重,权重更新后的数据集将用于下一次迭代。

初始时各个记录权重均为1/n,n为记录数目。

主要的实现语句如下:

……

最终在测试集上,由adaboost生成的强分类器的准确率为:

2.kmeans算法

2.1读取数据集

Kmeans算法的数据集是酒的品种数据。

有13个属性,一个分类属性。

共分成3类,数据集前58号为第一类,59-129号为第二类,130-177号为第三类。

2.2初始化kmeans参数

Python中通过调用sklearn.cluster包中的kmeans类来创建方法实例。

需要设置的主要参数是n_clusters,即聚簇数量。

具体代码如下:

当然可以设置init参数为random,表示随机生成初始质心。

默认值的kmeans++,智能选择数据中的若干项作为质心。

还有max_iter可选项,表示kmeans方法迭代次数。

2.3聚类划分

聚簇划分代码如下:

2.4错误率

计算聚簇划分的错误率,代码

结果:

[1111211111111111111222112211211111122

1122112211111111111111020200200222001

2000200220000022000002202020002000020

0200000002000000000200222200222002202

2000022202220202202222002222200]

[58,129,177]

0.29608938547486036

由于数据集较小而且比较规整,经过测试发现该次实验在第二次迭代就已经收敛,错误率在29.6%左右。

当然,对于没有标签的数据,在衡量聚类结果时可以使用总SSE来评价。

在不同的k值情况下,选择具有最小总SSE的模型最为合适。

三、遇到的困难及解决方法、心得体会

1.问题

实现本程序时,由于数据与算法格式不匹配,在数据预处理阶段碰到了各种问题,比如怎样拆分数据中的类别标签、划分数据集的采用何种方式等。

2.心得

实现本程序之后,深刻认识了决策树算法和kmeans算法的神奇之处,对这些算法的形成、改进、注意点以及优缺点都有了比较详尽的了解,重新认识了数据挖掘这门课。

但由于时间有限,未能自己动手去实现算法的每一个细节,只是调用了相应的工具,我对此略感遗憾。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1