《数据挖掘》结课报告概要.docx
《《数据挖掘》结课报告概要.docx》由会员分享,可在线阅读,更多相关《《数据挖掘》结课报告概要.docx(18页珍藏版)》请在冰豆网上搜索。
《数据挖掘》结课报告概要
《数据挖掘》结课报告
--基于k-最近邻分类方法的连衣裙属性数据集的研究报告
(2013--2014学年第二学期)
学院:
专业:
班级:
学号:
姓名:
指导教师:
二〇一四年五月二十四日
1、研究目的与意义
(介绍所选数据反应的主题思想及其研究目的与意义)
1、目的
(1)熟悉weka软件环境;
(2)掌握数据挖掘分类模型学习方法中的k-最近邻分类方法;
(3)在weka中以“DressAttributeDataSet”为例,掌握k-最近邻分类算法的相关方法;
(4)取不同的K值,采用不同的预测方法,观察结果,达到是否推荐某款连衣裙的目的,为企业未来的规划发展做出依据。
2、意义
此数据集共有14个属性,500个实例,包含了连衣裙的各种属性和根据销售量的不同而出现的推荐情况,按照分类模型学习方法中的k-最近邻分类方法依据各属性推断应推广哪些种类的裙子,对发展市场的扩大及企业的发展战略具有重要意义。
二、技术支持
(介绍用来进行数据挖掘、数据分析的方法及原理)
1、原理:
k-最近邻分类算法是一种基于实例的学习方法,不需要事先对训练数据建立分类模型,而是当需要分类未知样本时才使用具体的训练样本进行预测,通过在训练集中找出测试集的K个最近邻,来预测估计测试集的类标号;
2、方法:
k-最近邻方法是消极学习方法的典型代表,其算法的关键技术是搜索模式空间,该方法首先找出最近邻即与测试样本相对接近的所有训练样本,然后使用这些最近邻的类标号来确定测试样本的类标号。
三、数据处理及操作过程
(一)数据预处理方法
1、“remove”属性列:
数据集中属性“Dress_ID”对此实验来说为无意义的属性,因此在“Attributes”选项中勾选属性“Dress_ID”并单击“remove”,将该属性列去除,并保存新的数据集;
2、离散化预处理:
需要对数值型的属性进行离散化,该数据集中只有第3个属性“rating”和第13个属性“recommendation”为数值型,因此只对这两个属性离散化。
“recommendation”属性只有2个取值:
0,1,因此用文本编辑器“UltraEdit”或者写字板打开数据集并直接修改“DressAttributeDataSet.arff”文件,把“@attributerecommendationnumeric”改为“@attributerecommendation{0,1,}”,并保存;在“Explorer”中重新打开“DressAttributeDataSet.arff”,选中“recommendation”属性后,右方的属性摘要中“Type”值变为“Nominal”。
在过滤器Filter中单击“choose”,出现树形图,单击“weka”--“Filters”--“unsupervised”--“attribute”--“discretize”,点击“Choose”右边的文本框进行参数设置,把“attributeIndices”右边改成“3”,计划将该属性分成3段,于是把“bins”改成“3”,其它参数不更改,点“OK”回到“Explorer”,单击“Apply”离散化后的数据如下所示:
3、缺失值预处理:
在过滤器Filter中单击“choose”,出现树形图,单击“weka”--“Filters”--“unsupervised”--“attribute”--“ReplaceMissingValues”,单击“Apply”。
在weka中可以看出该数据集中不存在缺失值,因此不必进行缺失值的预处理。
(二)参数设置
(要求介绍每个参数的意义、取值范围、调整依据及最终的设置)
1、数据集属性及其取值:
(1)Dress_IDnumeric:
货号
(2)Style:
风格{Sexy,Casual,vintage,Brief,cute,bohemian,Novelty,Flare,party,sexy,work,OL,fashion}
(3)Price:
价格{Low,High,Average,Medium,very-high,low,high}
(4)Rating:
等级numeric
(5)Size:
尺寸{M,L,XL,free,S,small,s}
(6)Season:
季节{Summer,Automn,Spring,Winter,spring,winter,summer,Autumn}
(7)NeckLine:
领口{o-neck,v-neck,boat-neck,peterpan-collor,ruffled,turndowncollor,slash-neck,mandarin-collor,open,sqare-collor,Sweetheart,sweetheart,Scoop,halter,backless,bowneck,NULL}
(8)SleeveLength:
袖长{sleevless,Petal,full,butterfly,short,threequarter,halfsleeve,cap-sleeves,turndowncollor,threequater,capsleeves,sleeveless,sleeevless,half,urndowncollor,thressqatar,NULL,sleveless}
(9)Waiseline:
腰围{empire,natural,null,princess,dropped}
(10)Material:
材料{null,microfiber,polyster,silk,chiffonfabric,cotton,nylon,other,milksilk,linen,rayon,lycra,mix,acrylic,spandex,lace,modal,cashmere,viscos,knitting,sill,wool,model,shiffon}
(11)FabricType:
布料类型{chiffon,null,broadcloth,jersey,other,batik,satin,flannael,worsted,woolen,poplin,dobby,knitting,flannel,tulle,sattin,organza,lace,Corduroy,wollen,knitted,shiffon,terry}
(12)Decoration:
装饰{ruffles,null,embroidary,bow,lace,beading,sashes,hollowout,pockets,sequined,applique,button,Tiered,rivet,feathers,flowers,pearls,pleat,crystal,ruched,draped,tassel,plain,none,cascading}
(13)PatternType:
图案类型{animal,print,dot,solid,null,patchwork,striped,geometric,plaid,leopard,floral,character,splice,leapord,none}
(14)Recommendation:
是否推荐numeric
2、离散化预处理参数设置:
(1)attributeIndices:
属性下标。
选择要离散化的属性,将其下标号以逗号隔开;
(2)bins:
决定将数据离散化为几段;
(3)desiredweightofinstancesperinterval:
对等频离散化来说每个间隔所需的实例权重;
(4)findNumBins:
如果设置为True,则对于等距离离散化找到最优的段数,对等频离散化无作用;
(5):
ignoreClass:
如果设置为True,则过滤器使用之前,没有设置class属性;
(6)InvertSelection:
集属性选择模式。
如果设置为False,只有选择(数字)范围内的属性将被离散的,否则只有非选定的属性将被离散;
(6)MakeBinary:
如果设置为True,则变为二进制;
(7)UseEqualFrequency:
等频离散化,如果设置为true,则使用等频离散化,否则使用等距离离散化。
3、算法执行参数设置:
(1)KNN:
测试样本的最近邻的个数,默认为1,则使用1个最近邻进行分类;
(2)crossValidate:
交叉验证,如果设置为True,则使用交叉验证;
(3)debug:
调试,设置为true,则分类器可能在控制台输出另外的信息;默认False;
(4)distanceWeighting:
如果设置为True,则使用距离加权;
(5)meanSquared:
均方差,默认为False;
(6)nearestNeighbourSearchAlgorithm:
最近邻的搜索算法;
(7)windowSize:
窗口大小。
4、单击MoreOption按钮的参数:
(1)Outputmodel.:
输出基于整个训练集的分类模型,从而模型可以被查看,可视化等。
该选项默认选中。
(2)Outputper-classstats:
输出每个class的准确度/反馈率(precision/recall)和正确/错误(true/false)的统计量。
该选项默认选中。
(3)Outputevaluationmeasures:
输出熵估计度量。
该选项默认没有选中。
(4)Outputconfusionmatrix:
输出分类器预测结果的混淆矩阵。
该选项默认选中。
(5)Storepredictionsforvisualization:
记录分类器的预测结果使得它们能被可视化表示。
(6)Outputpredictions:
输出测试数据的预测结果。
在交叉验证时,实例的编号不代表它在数据集中的位置。
(7)Cost-sensitiveevaluation:
误差将根据一个价值矩阵来估计。
Set…按钮用来指定价值矩阵。
(8)Randomseedforxval/%Split:
指定一个随即种子,当出于评价的目的需要分割数据时,它用来随机化数据。
5、右击运行结果显示的选项参数测试:
(1)Viewinmainwindow(查看主窗口)。
在主窗口中查看输出结果。
(2)Viewinseparatewindow(查看不同的窗口)。
打开一个独立的新窗口来查看结果。
(3)Saveresultbuffer(保存结果的缓冲区)。
弹出对话框来保存输出结果的文本文件。
(4)Loadmodel(下载模式)。
从二进制文件中载入一个预训练模式对象。
(5)Savemodel(保存模式)。
将一个模式对象保存到二进制文件中,也就是保存在JAVA的串行对象格式中。
(6)Re-evaluatemodeloncurrenttestset(对当前测试集进行重新评估)。
通过已建立的模式,并利用Suppliedtestset(提供的测试集)选项下的Set.按钮来测试指定的数据集。
(7)Visualizeclassifiererrors(可视化分类器错误)。
弹出一个可视化窗口来显示分类器的结果图。
其中,正确分类的实例用叉表示,然而不正确分类的实例则是以小正方形来表示的。
(8)Visualizetree(树的可视化)。
如果可能的话,则弹出一个图形化的界面来描述分类器模型的结构(这只有一部分分类器才有的)。
右键单击空白区域弹出一个菜单,在面板中拖动鼠标并单击,就可以看见每个节点对应的训练实例。
(9)Visualizemargincurve(边际曲线的可视化)。
产生一个散点图来描述预测边际的情况。
边际被定义为预测为真实值的概率和预测为真实值之外的其它某类的最高概率之差。
(10)isualizethresholdcurve(阈曲线的可视化)。
产生一个散点图来描述预测中的权衡问题,其中权衡是通过改变类之间阈值来获取的。
例如,缺省阈值为0.5,一个实例预测为0的概率必须要大于0.5,因为0.5时实例正好预测为0,图表可以用来对精确率/反馈率权衡进行可视化,如ROC曲线分析(正确的正比率和错误的正比率)和其它的曲线。
(11)Visualizecostcurve(成本曲线的可视化)。
产生一个散点图,来确切描述期望成本。
6、运行信息中的参数设置(以此数据集为例):
(1)Runinformation:
运行信息
(2)Classifiermodel(fulltrainingset):
使用全部训练数据构造的分类模型
(3)Summary:
针对训练/检验集的预测效果汇总。
(4)CorrectlyClassifiedInstances:
正确分类率
(5)IncorrectlyClassifiedInstances:
错误分类率
(6)KappastatisticKappa:
绝对数据
(7)Meanabsoluteerror:
平均绝对误差
(8)Rootmeansquarederror:
根均方差
(9)Relativeabsoluteerror:
相对绝对误差
(10)Rootrelativesquarederror:
相对平方根误差
(11)DetailedAccuracyByClass:
对每个类的预测准确度的详细描述:
(12)类标号为0时,TPRate(bad/good):
正确肯定率
(13)FPRate(bad/good):
错误肯定率
(14)Precision(bad/good):
精确率
(15)Recall(bad/good):
反馈率
(16)F-Measure(bad/good):
F测量
(3)实验结果与分析
(具体实验的操作、数据处理步骤、得出实验结果,并对实验结果进行分析、解释)
1、格式转换:
将从UCI上下载的数据集“DressAttributeDataSet.xls”另存为为“.csv”格式,打开weka,执行“Tools”--“Arffviewer”--“File”--“Open”,选择文件打开,查看数据集,并另存为“DressAttributeDataSet.arff”;
2、打来数据集并进行数据预处理:
在WEKA中单击“Explorer”,
在“Preprocess”选项卡中单击“Openfile”,选择“DressAttribute
DataSet.arff”数据集打开,参见
(一)数据预处理方法,以“recommendation”的值为类标号并保存新的数据集“DressAttributeDataSet1.arff”;
3、在weka中打开预处理后的数据集“DressAttributeData
Set1.arff”,切换到“Classify”选项卡,点击“Choose”按钮,选择“lazy”下的“IBk”即k-最近邻算法,然后点击“Choose”右边文本
框,弹出新窗口为该算法设置参数,修改k值,再次我们取3个K值,分别为1、5、10,其余参数不变。
(1)k值设置为1,在“TestOption”中选择模型,点击“Start”,
右侧“ClassifierOutput”中出现运行信息:
a.使用“Usetrainingset”模型的运行结果为:
===Runinformation===
Scheme:
weka.classifiers.lazy.IBk-K1-W0-A"weka.core.neighboursearch.LinearNNSearch-A\"weka.core.EuclideanDistance-Rfirst-last\""
Relation:
AttributeDataSet-weka.filters.unsupervised.attribute.Remove-R1-weka.filters.unsupervised.attribute.Discretize-B3-M-1.0-R3
Instances:
500
Attributes:
13
Style
Price
Rating
Size
Season
NeckLine
SleeveLength
waiseline
Material
FabricType
Decoration
PatternType
Recommendation
Testmode:
evaluateontrainingdata
===Classifiermodel(fulltrainingset)===
IB1instance-basedclassifier
using1nearestneighbour(s)forclassification
Timetakentobuildmodel:
0seconds
===Evaluationontrainingset===
===Summary===
CorrectlyClassifiedInstances49899.6%
IncorrectlyClassifiedInstances20.4%
Kappastatistic0.9918
Meanabsoluteerror0.006
Rootmeansquarederror0.0448
Relativeabsoluteerror1.2265%
Rootrelativesquarederror9.0699%
TotalNumberofInstances500
===DetailedAccuracyByClass===
TPRateFPRatePrecisionRecallF-MeasureROCAreaClass
10.010.99310.99710
0.99010.990.99511
WeightedAvg.0.9960.0060.9960.9960.9961
===ConfusionMatrix===
ab<--classifiedas
2900|a=0
2208|b=1
因为CorrectlyClassifiedInstances(正确分类率)为99.6%,也就是说这个模型的准确度有99.6%左右.
ConfusionMatrix混淆矩阵,其中矩阵的行是实际的类,矩阵的列是预测得到的类,矩阵元素就是相应测试样本的个数。
混淆矩阵表示,原本“class”是“0”的实例,有290个被正确的预测为“0”,有0个错误的预测成了“1”;原本“class”是“1”的实例,有2个被错误的预测为“0”,有208个正确的预测成了“1”;相加为500是实例总数,而对角线之和除以总数正好是正确分类的实例所占比例,这个矩阵对角线上的数字越大,说明预测得越好。
此数据集中,(209+208)/500=0.996,即正确分类率为99.6%。
在“Resultlist”右击算法选择“Visualizeclassifiererrors”,出现一个可视化窗口来显示分类器的结果图,保存为“DressAttributeDataSet1.arff”用写字板打开“DressAttributeDataSet1.arff”,可以查看预测值;
可视化分类器错误:
正确分类的实例用叉表示,而不正确分类的实例则是以小正方形来表示的。
X轴表示实际的结果,Y轴表示预测的结果,从图中可以看出,有两个实例被错误地预测为1,将可视化分类错误结果图保存,得到一个新的数据集“DressAttributeDataSet1.arff”。
写字板打开“DressAttributeDataSet1.arff”,部分数据集如下所示:
@attributepredictedRecommendation{0,1}
@attributeRecommendation{0,1}
@data
Sexy,Low,'\'(3.333333-inf)\'',M,Summer,o-neck,sleevless,empire,null,chiffon,ruffles,animal,1,1
Casual,Low,'\'(-inf-1.666667]\'',L,Summer,o-neck,Petal,natural,microfiber,null,ruffles,animal,0,0
vintage,High,'\'(-inf-1.666667]\'',L,Automn,o-neck,full,natural,polyster,null,null,print,0,0
Brief,Average,'\'(3.333333-inf)\'',L,Spring,o-neck,full,natural,silk,chiffon,embroidary,print,1,1
cute,Low,'\'(3.333333-inf)\'',M,Summer,o-neck,butterfly,natural,chiffonfabric,chiffon,bow,dot,0,0
bohemian,Low,'\'(-inf-1.666667]\'',M,Summer,v-neck,sleevless,empire,null,null,null,print,0,0
表头部分(即属性及其取值)的倒数第二列@attributepredictedRecommendation{0,1}为在原来数据集基础上增加的一列,表示预测的类标号的值,在下面的数据中可以看出,每个实例的倒数第二个属性值即为预测出来的值。
b.使用“Suppliedtestset”模型,Set测试集为预处理后的数据集,运行结果为:
===ConfusionMatrix===
ab<--classifiedas
2900|a=0
2208|b=1
正确分类率为99.6%,这个模型的准确度有99.6%左右。
c.使用“Cross--validation”模型,Folds设为10折,运行结果为:
===ConfusionMatrix===
ab<--classifiedas
19793|a=0
12882|b=1
正确分类率为55.8%。
d.使用“Percentagesplit”模型,默认66%的数据为训练集,剩余数据位测试集,运行结果为:
===ConfusionMatrix===
ab<--classifiedas
7422|a=0
5123|b=1
正确分类率为57.0588%。
(2)k值设置为5;
a.使用“Usetrainingset”模型的运行结果为:
===ConfusionMatrix===
ab<--classifiedas
23753