数据分析的特征选择实例分析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:N9 W(i,:) = ReliefF (D,m,k) ;10 end11 for i = 1:N %将每次计算的权重进行绘图,绘图N次,看整体效果12 plot(1:size(W,2),W(i,:));13 hold on ;14 end15 for i = 1:size(W,2) %计算N次中,每个属性的平均值16 result(1,i) = sum(W(:,i))/size(W,1) ;17 end18 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);2728 for i = 1:size(W,2)29 figure30 plot(1:size(W,1),W(:,i));31 xlabel('计算次数') ;32 ylabel('特征权重') ;33 title([char(name(i)) '(属性' num2Str(i) ')的特征权重变化']);34 end2.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:Rows12 if D(i,Cols)==213 D1(size(D1,1)+1,:) = D(i,:) ;14 elseif D(i,Cols)==415 D2(size(D2,1)+1,:) = D(i,:) ;16 end17 end18 W =zeros(1,Cols-1) ;%初始化特征权重,置019 for i = 1 : m %进行m次循环选择操作20 %从D中随机选择一个样本R21 [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 end26 endReliefF辅助函数,寻找最近的样本数K1 %获取随机R 以及找出邻近样本2 %D:训练集;D1:类别1数据集;D2:类别2数据集;3 %Dh:与R同类相邻的样本距离;Dm:与R不同类的相邻样本距离4 function [R,Dh,Dm] = GetRandSamples(D,D1,D2,k)5 %先产生一个随机数,确定选定的样本R6 r = ceil(1 + (size(D,1)-1)*rand) ;7 R=D(r,:); %将第r行选中,赋值给R8 d1 = zeros(1,0) ;%先置0,d1是与R的距离,是不是同类在下面判断9 d2 = zeros(1,0) ;%先置0,d2是与R的距离10 %D1,D2是先传入的参数,在ReliefF函数中已经分类好了11 for i =1:size(D1,1) %计算R与D1的距离12 d1(1,i) = Distance(R,D1(i,:)) ;13 end14 for j = 1:size(D2,1)%计算R与D2的距离15 d2(1,j) = Distance(R,D2(j,:)) ;16 end17 [v1,L1] = sort(d1) ;%d1排序,18 [v2,L2] = sort(d2) ;%d2排序19 if R(1,size(R,2))==2 %如果R样本=2,是良性20 H = D1(L1(1,2:k+1),:) ; %L1中是与R最近的距离的编号,赋值给H。
21 M = D2(L2(1,1:k),:) ; %v2(1,1:k) ;22 else23 H = D1(L1(1,1:k),:);24 M = D2(L2(1,2:k+1),:) ;25 end26 %循环计算每2个样本特征之间的特征距离:(特征1-特征2)/(max-min)27 for i = 1:size(H,1)28 for j =1 :size(H,2)29 Dh(i,j) = abs(H(i,j)-R(1,j))/9 ; % 本文数据范围都是1-10,所以max-min=9为固定30 Dm(i,j) = abs(M(i,j)-R(1,j))/9 ;31 end32 end2.3 K-means聚类算法由于聚类算法是给予数据自然上的相似划法,要求得到的聚类是每个聚类内部数据尽可能的相似而聚类之间要尽可能的大差异。
所以定义一种尺度来衡量相似度就显得非常重要了。
一般来说,有两种定义相似度的方法。
第一种方法是定义数据之间的距离,描述的是数据的差异。
第二种方法是直接定义数据之间的相似度。
下面是几种常见的定义距离的方法:1.Euclidean距离,这是一种传统的距离概念,适合于2、3维空间。
2.Minkowski距离,是Euclidean距离的扩展,可以理解为N维空间的距离。