数据分析的特征选择实例分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据分析的特征选择实例分析
1.数据挖掘与聚类分析概述
数据挖掘一般由以下几个步骤:
(l)分析问题:源数据数据库必须经过评估确认其是否符合数据挖掘标准。以决定预期结果,也就选择了这项工作的最优算法。
(2)提取、清洗和校验数据:提取的数据放在一个结构上与数据模型兼容的数据库中。以统一的格式清洗那些不一致、不兼容的数据。一旦提取和清理数据后,浏览所创建的模型,以确保所有的数据都已经存在并且完整。
(3)创建和调试模型:将算法应用于模型后产生一个结构。浏览所产生的结构中数据,确认它对于源数据中“事实”的准确代表性,这是很重要的一点。虽然可能无法对每一个细节做到这一点,但是通过查看生成的模型,就可能发现重要的特征。
(4)查询数据挖掘模型的数据:一旦建立模型,该数据就可用于决策支持了。
(5)维护数据挖掘模型:数据模型建立好后,初始数据的特征,如有效性,可能发生改变。一些信息的改变会对精度产生很大的影响,因为它的变化影响作为基础的原始模型的性质。因而,维护数据挖掘模型是非常重要的环节。
聚类分析是数据挖掘采用的核心技术,成为该研究领域中一个非常活跃的研究课题。聚类分析基于”物以类聚”的朴素思想,根据事物的特征,对其进行聚类或分类。作为数据挖掘的一个重要研究方向,聚类分析越来越得到人们的关注。聚类的输入是一组没有类别标注的数据,事先可以知道这些数据聚成几簇爪也可以不知道聚成几簇。通过分析这些数据,根据一定的聚类准则,合理划分记录集合,从而使相似的记录被划分到同一个簇中,不相似的数据划分到不同的簇中。
2.特征选择与聚类分析算法
Relief为一系列算法,它包括最早提出的Relief以及后来拓展的Relief和ReliefF,其中ReliefF算法是针对目标属性为连续值的回归问题提出的,下面仅介绍一下针对分类问题的Relief和ReliefF算法。
2.1Relief算法
Relief算法最早由Kira提出,最初局限于两类数据的分类问题。Relief算法是一种特征权重算法(Feature weighting algorithms),根据各个特征和类别的相关性赋予特征不同的权重,权重小于某个阈值的特征将被移除。Relief算法中特征和类别的相关性是基于特征对近距离样本的区分能力。算法从训练集D中随机选择一个样本R,然后从和R同类的样本中寻找最近邻样本H,称为Near Hit,从和R不同类的样本中寻找最近邻样本M,称为NearMiss,然后根据以下规则更新每个特征的权重:如果R和Near Hit在某个特征上的距离小于R和Near Miss 上的距离,则说明该特征对区分同类和不同类的最近邻是有益的,则增加该特征的权重;反之,如果R和Near Hit 在某个特征的距离大于R和Near Miss上的距离,说明该特征对区分同类和不同类的最近邻起负面作用,则降低该特征的权重。以上过程重复m次,最后得到各特征的平均权重。特征的权重越大,表示该特征的分类能力越强,反之,表示该特征分类能力越弱。Relief算法的运行时间随着样本的抽样次数m和原始特征个数N的增加线性增加,因而运行效率非常高。具体算法如下所示:
2.2 ReliefF算法
由于Relief算法比较简单,运行效率高,并且结果也比较令人满意,因此得到广泛应用,但是其局限性在于只能处理两类别数据,因此1994年Kononeill对其进行了扩展,得到了ReliefF作算法,可以处理多类别问题。该算法用于处理目标属性为连续值的回归问题。ReliefF算法在处理多类问题时,每次从训练样本集中随机取出一个样本R,然后从和R同类的样本集中找出R的k个近邻样本(near Hits),从每个R的不同类的样本集中均找出k个近邻样本(near Misses),然后更新每个特征的权重,如下式所示:
Relief系列算法运行效率高,对数据类型没有限制,属于一种特征权重算法,算法会赋予所有和类别相关性高的特征较高的权重,所以算法的局限性在于不能有效的去除冗余特征。
Matlab实现源码:
1.ReliefF特征提取算法Matlab主程序
1 %主函数
2 clear;clc;
3 load('matlab.mat')
4 D=data(:,2:size(data,2));%
5 m =80 ;%抽样次数
6 k = 8;
7 N=20;%运行次数
8 for i =1:N
9 W(i,:) = ReliefF (D,m,k) ;
10 end
11 for i = 1:N %将每次计算的权重进行绘图,绘图N次,看整体效果
12 plot(1:size(W,2),W(i,:));
13 hold on ;
14 end
15 for i = 1:size(W,2) %计算N次中,每个属性的平均值
16 result(1,i) = sum(W(:,i))/size(W,1) ;
17 end
18 xlabel('属性编号');
19 ylabel('特征权重');
20 title('ReliefF算法计算乳腺癌数据的特征权重');
21 axis([1 10 0 0.3])
22 %------- 绘制每一种的属性变化趋势
23 xlabel('计算次数');
24 ylabel('特征权重');
25 name =char('块厚度','细胞大小均匀性','细胞形态均匀性','边缘粘附力','单上皮细胞尺寸','裸核','Bland染色质','正常核仁','核分裂');
26 name=cellstr(name);
27
28 for i = 1:size(W,2)
29 figure
30 plot(1:size(W,1),W(:,i));
31 xlabel('计算次数') ;
32 ylabel('特征权重') ;
33 title([char(name(i)) '(属性' num2Str(i) ')的特征权重变化']);
34 end
2.ReliefF函数程序
1 %Relief函数实现
2 %D为输入的训练集合,输入集合去掉身份信息项目;k为最近邻样本个数
3 function W = ReliefF (D,m,k)
4 Rows = size(D,1) ;%样本个数
5 Cols = size(D,2) ;%特征熟练,不包括分类列
6 type2 = sum((D(:,Cols)==2))/Rows ;
7 type4 = sum((D(:,Cols)==4))/Rows ;
8 %先将数据集分为2类,可以加快计算速度
9 D1 = zeros(0,Cols) ;%第一类
10 D2 = zeros(0,Cols) ;%第二类
11 for i = 1:Rows
12 if D(i,Cols)==2
13 D1(size(D1,1)+1,:) = D(i,:) ;
14 elseif D(i,Cols)==4
15 D2(size(D2,1)+1,:) = D(i,:) ;
16 end
17 end
18 W =zeros(1,Cols-1) ;%初始化特征权重,置0
19 for i = 1 : m %进行m次循环选择操作
20 %从D中随机选择一个样本R
21 [R,Dh,Dm] = GetRandSamples(D,D1,D2,k) ;
22 %更新特征权重值
23 for j = 1:length(W) %每个特征累计一次,循环
24 W(1,j)=W(1,j)-sum(Dh(:,j))/(k*m)+sum(Dm(:,j))/(k*m) ;%按照公式更新权重
25 end
26 end
ReliefF辅助函数,寻找最近的样本数K
1 %获取随机R 以及找出邻近样本
2 %D:训练集;D1:类别1数据集;D2:类别2数据集;