期望最大化算法(Expectation Maximum, EM)

来源:互联网 发布:维秘2017网络直播 编辑:程序博客网 时间:2024/05/29 11:04
本算法根据《数据挖掘概念与技术》第三版(韩家炜)中的期望最大化算法(Expectation Maximum, EM)的步骤来实现的,
EM算法属于基于概率模型的聚类的一种,它的主要步骤分为两步:
期望步:给定当前的簇中心,每个对象都被指派到簇中心离该对象最近的簇。
最大化步:给定簇指派,对于每个簇,算法调整其中心,使得指派到该簇的对象到该新中心的距离之和最小化。
EM算法的主程序如下:
%%%% 采用期望最大化进行模糊聚类 ,EMclc;clear;%加载文件fileID = fopen('D:\matlabFile\EM\EM.txt');DS=textscan(fileID,'%f %f');fclose(fileID);%将数据转换为矩阵格式Dataset=cat(2,DS{1},DS{2});% the count of fuzzy clusteringp=2;if p<size(Dataset,1)   % 任意选择聚类中心点   c_id=randperm(size(Dataset,1));   c_id=c_id(1:p);%    c_id=[1 2];   % 初始化p的中心点   centers=Dataset(c_id',:);   % 限定最小值   min_limit=5;   flag=1;   while flag       % 计算隶属度矩阵       M=MembershipDegree(centers,Dataset);       % 计算新的中心点       centers_new=Maximization(M,Dataset);       d=0;       for i=1:size(centers_new,1)           d=d+sqrt((centers_new(i,1)-centers(i,1))^2+(centers_new(i,2)-centers(i,2))^2);       end       if d<min_limit           flag=0;       else           centers=centers_new;       end   end end
MembershipDegree函数文件如下:
function result=MembershipDegree(centers,points)M=zeros(1,size(centers,1));for i=1:size(points,1)    point=points(i,:);    flag=0;    for j=1:size(centers,1)        center=centers(j,:);        if isequal(point,center)            flag=1;            break;        end            end    mm=[];    if flag        mm=zeros(1,size(centers,1));        mm(1,j)=1;    else        for j=1:size(centers,1)            center=centers(j,:);            mm(1,j)=(center(1,1)-point(1,1))^2+(center(1,2)-point(1,2))^2;                           end        mm=mm/sum(mm);    end    M(i,:)=mm;endresult=M;end
Maximization函数如下:
function result=Maximization(M,points)centers=zeros(1,2);for i=1:size(M,2)    a=sum(M(:,i).^2);    b=M(:,i).^2;    x=sum(b.*points(:,1))/a;    y=sum(b.*points(:,2))/a;    centers(i,:)=[x,y];endresult=centers;end
测试数据格式如下,注意要将下列数据保存txt格式,与书上的数据保持一致:
3 34 109 614 818 1121 7

阅读全文
0 0
原创粉丝点击