数据分析的特征选择实例分析.docx
《数据分析的特征选择实例分析.docx》由会员分享,可在线阅读,更多相关《数据分析的特征选择实例分析.docx(25页珍藏版)》请在冰点文库上搜索。
数据分析的特征选择实例分析
数据分析的特征选择实例分析
1.数据挖掘与聚类分析概述
数据挖掘一般由以下几个步骤:
(l)分析问题:
源数据数据库必须经过评估确认其是否符合数据挖掘标准。
以决定预期结果,也就选择了这项工作的最优算法。
(2)提取、清洗和校验数据:
提取的数据放在一个结构上与数据模型兼容的数据库中。
以统一的格式清洗那些不一致、不兼容的数据。
一旦提取和清理数据后,浏览所创建的模型,以确保所有的数据都已经存在并且完整。
(3)创建和调试模型:
将算法应用于模型后产生一个结构。
浏览所产生的结构中数据,确认它对于源数据中“事实”的准确代表性,这是很重要的一点。
虽然可能无法对每一个细节做到这一点,但是通过查看生成的模型,就可能发现重要的特征。
(4)查询数据挖掘模型的数据:
一旦建立模型,该数据就可用于决策支持了。
(5)维护数据挖掘模型:
数据模型建立好后,初始数据的特征,如有效性,可能发生改变。
一些信息的改变会对精度产生很大的影响,因为它的变化影响作为基础的原始模型的性质。
因而,维护数据挖掘模型是非常重要的环节。
聚类分析是数据挖掘采用的核心技术,成为该研究领域中一个非常活跃的研究课题。
聚类分析基于”物以类聚”的朴素思想,根据事物的特征,对其进行聚类或分类。
作为数据挖掘的一个重要研究方向,聚类分析越来越得到人们的关注。
聚类的输入是一组没有类别标注的数据,事先可以知道这些数据聚成几簇爪也可以不知道聚成几簇。
通过分析这些数据,根据一定的聚类准则,合理划分记录集合,从而使相似的记录被划分到同一个簇中,不相似的数据划分到不同的簇中。
2.特征选择与聚类分析算法
Relief为一系列算法,它包括最早提出的Relief以及后来拓展的Relief和ReliefF,其中ReliefF算法是针对目标属性为连续值的回归问题提出的,下面仅介绍一下针对分类问题的Relief和ReliefF算法。
2.1Relief算法
Relief算法最早由Kira提出,最初局限于两类数据的分类问题。
Relief算法是一种特征权重算法(Featureweightingalgorithms),根据各个特征和类别的相关性赋予特征不同的权重,权重小于某个阈值的特征将被移除。
Relief算法中特征和类别的相关性是基于特征对近距离样本的区分能力。
算法从训练集D中随机选择一个样本R,然后从和R同类的样本中寻找最近邻样本H,称为NearHit,从和R不同类的样本中寻找最近邻样本M,称为NearMiss,然后根据以下规则更新每个特征的权重:
如果R和NearHit在某个特征上的距离小于R和NearMiss上的距离,则说明该特征对区分同类和不同类的最近邻是有益的,则增加该特征的权重;反之,如果R和NearHit
在某个特征的距离大于R和NearMiss上的距离,说明该特征对区分同类和不同类的最近邻起负面作用,则降低该特征的权重。
以上过程重复m次,最后得到各特征的平均权重。
特征的权重越大,表示该特征的分类能力越强,反之,表示该特征分类能力越弱。
Relief算法的运行时间随着样本的抽样次数m和原始特征个数N的增加线性增加,因而运行效率非常高。
具体算法如下所示:
设训练数据集D”样本抽样次数用.特征权重的阀值釘输出是各丫特征的权重八
1置0所有特彳1E权重,T为空集?
1.fari-\tom
1)随机选择一个样本皿
2)从同类样本集中我到R的最近邻样本H,从不同类样本集中拱到最近邻样本
Mj
3)forA-lioNdo
IF(旳=矿(0-砌算£兄H)F+dijf{A;&M)
3.forA=UoNdo
ifU'(A)>S
把第A个特征添加到T中
end
2.2ReliefF算法
并且结果也比较令人满意,因此得到广泛应用,但是其局限性在于只能处对其进行了扩展,得到了ReliefF作算法,可以处理多类别问题。
该算法ReliefF算法在处理多类问题时,每次从训练样本集中随机取出一个样本R的k个近邻样本(nearHits),从每个R的不同类的样本集中均找出
邻样本(nearMisses),然后更新每个特征的权重,如下式所示:
j-i
y[——邑®——
吨吨))自八
在上式中,册久岛足》表示样本Z和梓本E在特征査上的差,苴计算公式,
比©表示类C中的第J个最近邻样本,如下式所示:
ifAisconntruousmaX*)—mki(A)
0Aisofccr茗『茗竝显耳[同=妁[同
1ifA活discr^reand丘山*于尽【国
E或蛮,算法具体的伪代码如下所示,
设训练数据集为0,梓本抽样次数抑,特征权重的阈值G最近邻样本个数心
输岀为各个特性的特征权重厂。
L置所有特征权重为0,丁为空集。
l.fori—1todido
1]从D中随机选择一个样本心
W的同类样本集中找到丘的疋个最近邻码疗二叹…占,从每一个不
同类祥本集中我岀圧个最近邻」「(。
;
3.ybrA=1toA'AUfeaturedo
K
JF£Q二THQ■另城处庭兔厅)®町+
xJ
Z【—土砌aj?
・Mj(o)]SQ
end
Relief系列算法运行效率高,对数据类型没有限制,属于一种特征权重算法,算法会赋予所有和类别相关性高的特征较高的权重,所以算法的局限性在于不能有效的去除冗余特征。
Matlab实现源码:
I.ReliefF特征提取算法Matlab主程序
1%主函数
2clear;clc;
3load('matlab.mat')
4D=data(:
2:
size(data,2));%
5m=80;%抽样次数
6k=8;
7N=20;%运行次数
8fori=1:
N
9W(i,:
)=ReliefF(D,m,k);
10end
11fori=1:
N%将每次计算的权重进行绘图,绘图N次,看整体效果
12plot(1:
size(W,2),W(i,:
));
13holdon;
14end
15fori=1:
size(W,2)%计算N次中,每个属性的平均值
16result(1,i)=sum(W(:
i))/size(W,1);
17end
18xlabel('属性编号');
19ylabel('特征权重');
20title('ReliefF算法计算乳腺癌数据的特征权重');
21axis([11000.3])
22%——绘制每一种的属性变化趋势
23xlabel('计算次数');
24ylabel('特征权重');
25name=char('块厚度','细胞大小均匀性','细胞形态均匀性','边缘粘附力','单上皮细胞尺寸','裸核
','Bland染色质','正常核仁','核分裂');
26name=cellstr(name);
27
27fori=1:
size(W,2)
28figure
29plot(1:
size(W,1),W(:
i));
30xlabel('计算次数');
31ylabel('特征权重');
32title([char(name(i))'(属性'num2Str(i)')的特征权重变化']);
33end
2.ReliefF函数程序
1%Relief函数实现
2%D为输入的训练集合,输入集合去掉身份信息项目;k为最近邻样本个数
3functionW=ReliefF(D,m,k)
4Rows=size(D,1);%样本个数
5Cols=size(D,2);%特征熟练,不包括分类列
6type2=sum((D(:
Cols)==2))/Rows;
7type4=sum((D(:
Cols)==4))/Rows;
8%先将数据集分为2类,可以加快计算速度
9
D1=zeros(0,Cols);%
第一
-类
10
D2=zeros(0,Cols);%
第二
一类
11fori=1:
Rows
12ifD(i,Cols)==2
13D1(size(D1,1)+1,:
)=D(i,:
);
14elseifD(i,Cols)==4
15D2(size(D2,1)+1,:
)=D(i,:
);
16end
17end
18W=zeros(1,Cols-1);%初始化特征权重,置0
19fori=1:
m%进行m次循环选择操作
20%从D中随机选择一个样本R
21[R,Dh,Dm]=GetRandSamples(D,D1,D2,k);
22%更新特征权重值
23forj=1:
length(W)%每个特征累计一次,循环
24
按照公式更新权重
W(1,j)=W(1,j)-sum(Dh(:
j))/(k*m)+sum(Dm(:
j))/(k*m);%
25end
26end
ReliefF辅助函数,寻找最近的样本数K
1%获取随机R以及找出邻近样本
2%D:
训练集;D1:
类别1数据集;D2:
类别2数据集;
3%Dh:
与R同类相邻的样本距离;Dm:
与R不同类的相邻样本距离
4function[R,Dh,Dm]=GetRandSamples(D,D1,D2,k)
5%先产生一个随机数,确定选定的样本R
6r=ceil(1+(size(D,1)-1)*rand);
7R=D(r,:
);%将第r行选中,赋值给R
8d1=zeros(1,0);%先置0,d1是与R的距离,是不是同类在下面判断
9d2=zeros(1,0);%先置0,d2是与R的距离
10%D1,D2是先传入的参数,在ReliefF函数中已经分类好了
11fori=1:
size(D1,1)%计算R与D1的距离
12d1(1,i)=Distance(R,D1(i,:
));
13end
14forj=1:
size(D2,1)%计算R与D2的距离
15d2(1,j)=Distance(R,D2(j,:
));
16end
17
排序,
排序
如果R样本=2,是良性
I中是与R最近的距离的编号,赋值给Ho
[v1,L1]=sort(d1);%d1
18[v2,L2]=sort(d2);%d2
19ifR(1,size(R,2))==2%
20H=D1(L1(1,2:
k+1),:
);%L1
21M=D2(L2(1,1:
k),:
);%v2(1,1:
k);
22
else
2.3K-means聚类算法由于聚类算法是给予数据自然上的相似划法,要求得到的聚类是每个聚类内部数据尽可能的相似而聚类之间要尽可能的大差异。
所以定义一种尺度来衡量相似度就显得非常重要了。
一般来说,有两种定义相似度的方法。
第一种方法是定义数据之间的距离,描述的是数据的差异。
第二种方法是直接定义数据之间的相似度。
下面是几种常见的定义距离的方法:
1.Euclidean距离,这是一种传统的距离概念,适合于2、3维空间。
2.Minkowski距离,是Euclidean距离的扩展,可以理解为N维空间的距离。
聚类算法有很多种,在需要时可以根据所涉及的数据类型、聚类的目的以及具的应用要求来选择合适的聚类算法。
下面介绍K-means聚类算法:
K-means算法是一种常用的基于划分的聚类算法。
K-means算法是以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。
K-means的处理过程为:
首先随机选择k个对象作为初始的k个簇的质心;然后将余对象根据其与各个簇的质心的距离分配到最近的簇;最后重新计算各个簇的质心。
不断重复此过程,直到目标函数最小为止。
簇的质心由公式下列式子求得:
jKeW,
其中忙表示厲于旳类的数据点的个数,属干某个簇的所有点的算术平均值
即为该簇的质心。
对象到质心的距离TK采用欧式距离*Kwg算法的具休描
述如下;
输人;眾类个数k以及包含n个数扌居对象的数据集:
输岀;满足目标画数值最小的k个聚矢
算法癇程’
⑴从“个数据对象中任意选择k个对象作为初始聚类中心;
⑵循环下述號程(3倒(卩直到目标函数E取值不再变化:
⑶根据每个聚类对象的均值仲心对象),计算每个对象与这些中心对象的距离,
且根据最小距离重新对相应艮按送行划分:
(丄)童新计算每个聚类的均值(中心对象)
在具体实现时,为了防止步骤2中的条件不成立而出现无限循环,往往定义一个最大迭代次数。
K-means尝试找
出使平方误差函数值最小的k个划分。
当数据分布较均匀,且簇与簇之间区别明显时,它的效果较好。
面对大规模
数据集,该算法是相对可扩展的,并且具有较高的效率。
其中,n为数据集中对象的数目,k为期望得到的簇的数
目,t为迭代的次数。
通常情况下,算法会终止于局部最优解。
但用,例如涉及有非数值属性的数据。
其次,这种算法要求事先给出要生成的簇的数目k,显然这对用户提出了过高的要求,并且由于算法的初始聚类中心是随机选
择的,而不同的初始中心对聚类结果有很大的影响。
另外,K-means算法不适用于发现非凸面形状的簇,或者大
小差别很大的簇,而且它对于噪音和孤立点数据是敏感的。
K-means算法主程序matlab实现:
1clc;clear;
2load('matlab.mat')%加载测试数据
3NO=1;%从多少列开始的数据进行预测分类
4N1=size(data,1);%所有数据的行数
5data=data(NO:
N1,:
);%只选取需要测试的数据
6data1=data(:
[2,3,4,5,6,7,8,9]);%[2,4,7,9]2:
size(data,2)-1
7opts=statset('Display','final');%控制选项
8[idx,ctrs,result,D]=kmeans(data1,2,...%data1为要分类的数据,2为分类的类别数,本文只有2类
9'Distance','city',...%选择的距离的计算方式
10'Options',opts);%控制选项,参考matlab帮助
11t=[data(:
size(data,2)),idx(:
1)];%把测试数据最后一列,也就是分类属性和分类结果取出来:
列+
列
12d2=data(idx==1,11);%提取原始数据中属于第1类的数据的最后一列
13a=sum(d2==2);
14b=a/length(d2);
15totalSum=0;%总的正确率
16rate1=0;%第一类的判断正确率.分类类别中数据的正确性
17rate2=0;%第二类的判断正确率.
18if(b>0.5)%说明第1类属于良性,则a的值就是良性中判断正确的个数
19totalSum=totalSum+a;
20rate1=a/length(d2);
21%然后加上恶性中判断正确的比例
22totalSum=totalSum+sum(data(idx==2,11)==4);
23rate2=sum(data(idx==2,11)==4)/length(data(idx==2,11));
24else%说明第1类属于恶性
25totalSum=totalSum+sum(data(idx==1,11)==4);
26totalSum=totalSum+sum(data(idx==2,11)==2);
27rate1=sum(data(idx==2,11)==2)/length(data(idx==2,11));
28rate2=sum(data(idx==1,11)==4)/length(data(idx==1,11));
29end
30x1=1;%第x1个属性
31x2=1;%第x2个属性
32plot(1:
sum(idx==1),data1(idx==1,x1),'r.','MarkerSize',12);
33holdon;
34plot(sum(idx==1)+1:
sum(idx==1)+sum(idx==2),data1(idx==2,x1),'b.','MarkerSize',12);
35xlabel('记录数');
36ylabel('属性值');
37title('属性9的值分布');
38legend('第一类','第二类');
39axis([0640010])
40rate=totalSum/size(t,1)%总的判断准确率
3.一个医学数据分析实例
3.1数据说明
本文实验数据来自著名的UCI机器学习数据库,该数据库有大量的人工智能数据挖掘数据,网址
为:
http:
//archive.ics.uci.edu/ml/。
该数据库是不断更新的,也接受数据的捐赠。
数据库种类涉及生活、工程、科学各个领域,记录数也是从少到多,最多达几十万条。
截止2010年底,数据库共有199个数据集,每个数据集合中有不同类型、时间的相关数据。
可以根据实际情况进行选用。
本文选用的数据来类型为:
BreastCancerWisconsin(Original)DataSet,中文名称为:
威斯康星州乳腺癌数据集。
这些数据来源美国威斯康星大学医院的临床病例报告,每条数据具有11个属性。
下载下来的数据文件格式为“breast-cancer-wisconsin.data”,通过使用Excel和Matlab工具将其转换为Matlab默认的数据集保存,方
便程序进行调用。
下表是该数据集的11个属性名称及说明:
属性名称
说明
特征輪号
样品编号
病人身份证号码
无
块厚度
范围I-10
1
细胞大小均匀性
范囤1-10
2
细胞形态均匀性
范围1-10
3
边缘粘附力
范围1-10
i
单上皮细胞尺寸
范围1亠10
5
禳核
范围1-10
6
Bland染色质
范围1-10
i
正常核仁
范围1一10
8
核分裂
范圉1-10
9
分类
分类属性豊戈为良性
4为恶性
10
对上述数据进行转换后,以及数据说明可知,可以用于特征提取的有9个指标,样品编号和分类只是用于确定分类。
本文的数据处理思路是先采用ReliefF特征提取算法计算各个属性的权重,剔除相关性最小的属性,然后采用
K-means聚类算法对剩下的属性进行聚类分析。
3.2数据预处理与程序
本文在转换数据后,首先进行了预处理,由于本文的数据范围都是1-10,因此不需要归一化,但是数据样本中存
在一些不完整,会影响实际的程序运行,经过程序处理,将这一部分数据删除。
这些不完整的数据都是由于实际中一些原因没有登记或者遗失的,以“?
”的形式代表。
本文采用Matlab软件进行编程计算。
根据第三章提到的ReliefF算法过程,先编写ReliefF函数程序,用来
计算特征属性,再编写主程序,在主程序中调用该函数进行计算,并对结果进行分析,绘图,得到有用的结论。
程序统一在最后贴出。
3.3乳腺癌数据集特征提取
本文采用3.1节中的ReliefF算法来计算各个特征的权重,权重小于某个阈值的特征将被移除,针对本文的实际情况,将对权重最小的2-3种剔除。
由于算法在运行过程中,会选择随机样本R,随机数的不同将导致结果权重有一
定的出入,因此本文采取平均的方法,将主程序运行20次,然后将结果汇总求出每种权重的平均值。
如下所示,
列为属性编号,行为每一次的计算结果:
下面是特征提取算法计算的特征权重趋势图,计算20次的结果趋势相同:
1
2
3
4
5
6
7
e
g
1
0.22OT
0.140E
Q.1434
Cl.1120
0.0644
0.2123
0.11&3
ViS?
0.03TC'
2
□⑹!
01463
0.17U3
D⑷U
0.0701
0.2491
D.1049
Q.ira
Q.0363
S
□?
111
01535
0.15^8
0.1295
0.0755
0.2604
01243
0.2012
O.OS935
4
0.20的
0.1865
0.1847
0.1694
0.0771
0.2337
0.1306
0221?
0O&74
5
0.243&
0.1554
o.less
□.1424
0.0626
0.2391
0.1309
0.2CC4
0047?
-'--||
&
□曲厉
Q1460
01^4t
0.1220
0.2366
01-422
019C6
O.OGtKj
T
0.243&
0.1439
0.1759
Ci1722
0.0752
0.2351
0.1351
02005
0.0431"
g
□.2OB9
0.1449
0.1599
t).1571
0.0755
0.2359
0.1125
o.ira
0.0545'
a
0.2273
0.1463
0.1615
g1523H
0.0674
0.2615
0.1399
0.2103
0.0394
10
J2295
o.mi
Q.1阴L
0.K39
0.0724
0.251T
0.1439
o.Ewe
0.0554
1]
0.£】涣
Q145Q
0.1貂0
6捋26
Q.Q7Q2
0.235&
Q.1E31
Q.1995
0,0535
12
□2516
0.13S5
0.1693
0.1*104
0.0672
a.2500
0.1314
02062:
0.0470;
13
0.2S0T
0.1552
0.1642
01597
0.0705
0.2422
0.12^4
0.1913
00347
14
0.2219
CUE15
0.1616
0.1293
0.0612
0.23&1
a.1035
0.1370
0.053CJ
15
□2075
01474
0.1490
0丘亞
00736
n1祸
0.1946
0,031讨
IS
□.2038
0146?
0.1536
a.1510
0.0604
0£200
0.1335
02172
0.0564
17
0.2302
017BB
0.1T0T
0.13&6
0