机器学习Word文档下载推荐.docx
- 文档编号:21095051
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:14
- 大小:178.43KB
机器学习Word文档下载推荐.docx
《机器学习Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《机器学习Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
Step1:
初始化,聚类中心
,标号集
;
Step2:
分类:
Step3:
更新计算聚类中心:
Step4:
迭代Step2-Step3,直至收敛。
三、实验及其结果分析
为了更好的分析和研究K-means算法的实现过程,我们进行如下实验(程序见附录1和附录2)。
实验1:
首先利用matlab程序随机生成300个位于
之间的二维数对,再利用K-means算法将上述数对分为两类(其程序见附录1),并用红色和蓝色的点区分分成的两类,用
表示聚类之后的中心点,结果如图1所示:
(b)
(a)
图1
结果及其分析:
从图1的(a)中我们可以看出利用K-means将上述数对分成了两类并标出其聚类后的中心点;
同时从(b)图我们可以知道离群点对聚类中心的位置有明显的影响。
实验2:
利用matlab随机生成600个二维数对,并使得其中的300个落在以(0,0)为圆心的单位圆中,另外300个落入以(2,2)为圆心的单位圆中,利用K-means算法将这600个二维数对分为两类,结果如图2(a)所示;
同时在保证相同的实验数据的基础上,对其增加了30个干扰点后,再利用K-means算法对其进行分类,同样分成两类,结果如图2(b)所示:
图2
对比上述两图,我们可以看出K-means算法对增加了30个干扰点之后的数据进行分类,其分类效果显然不够好,由此我们可以得出如下结论:
离群点对聚类中心的位置有明显的影响。
实验3:
利用matlab随机生成600个二维数对,并使得其中的300个落在以(0,0)为圆心的单位圆中,另外300个落入以(0,0)为圆心,长半径为3,短半径为2的圆盘中,利用K-means算法将其分为2类,结果如图3所示:
图3
从图3可以清晰的看出,K-means算法对于此类数组的分类效果同样也是不好的。
四、K-means算法修正
修正一:
从上述三个实验的结果可以看出,在实验2中增加了30个干扰点(离群点)后,K-means算法对其分类失效,这是因为在K-means算法中采用了2-范数来计算距离,这样会导致计算出的重心与实际重心存在较大的误差。
为了减小误差,使得对数据尽可能好的分类,可以采用1-范数计算距离来代替2-笵数计算距离,或是采用中值代替均值计算新的聚类中心,即
为了研究修正后的K-means算法,我们进行如下实验(程序见附录3):
实验4:
利用matlab随机生成600个二维数对,并使得其中的300个落在以(0,0)为圆心的单位圆中,另外300个落入以(2,2)为圆心的单位圆中,同时在此数据基础上,对其增加了30个干扰点(其数据同实验2的数据)。
对于上述数据,分别为以1-范数计算距离的修正和采用中值计算聚类中心的修正来对其分类,结果如图4所示:
图4
由于采用以1-范数计算距离的修正对分类效果并没有起到明显的改善,故在此没有展示其实验结果;
而对于采用了中值计算聚类中心的修正,我们可以对比实验2中的图2(b)和图4,显然我们可以看出图4相比较图2(b),其分类效果得到了改善。
实验5:
利用matlab随机生成600个二维数对,并使得其中的300个落在以(0,0)为圆心的单位圆中,另外300个落入以(0,0)为圆心,长半径为3,短半径为2的圆盘中(该数据同实验3)。
鉴于在实验4中,采用以1-范数计算距离的修正对分类效果并没有起到明显的改善,所以在本次实验中我们采用中值计算聚类中心的修正来对其分类,结果如图5所示:
图5
从图5中我们可以看出而实验5中结果产生的原因是由于没有考虑数据点自身的结构特征与其他数据点之间关系所引起的,并且K-means算法只考虑类内间距最小性并没有考虑类间间距的最大性,即只考虑了类内数据的相似性的最大性并没有考虑类间数据的差异性的最大性,所以单纯的改变聚类中心的选取方法,而没有对相关性(距离)进行本质的重新的定义,并不能对实验3的实验结果很好的改进。
修正二:
在计算过程中可能会出现某个
,从而使得计算聚类中心的步骤失效,所以要在Step3步骤前进行检测,并将当前分类中距离聚类中心最远的点作为新的聚类中心。
即:
检查标号集是否为空:
重新计算聚类中心:
五、K-means算法的应用
K-means算法作为一种较为简单的聚类算法,可以应用于许多问题。
鉴于图像分割也可以理解为一种聚类,因此我们可以利用K-means算法对图像进行分割。
我们将图像的灰度值作为特征向量,然后对原图像采用K-means算法进行分割,得到的效果如图6所示(程序见附录4):
其中(a)为原图像,(b)和(c)分别为k=3和k=4时用K-means算法进行图像分割后的图像,(d)为采用中值修正后的K-means算法进行分割后的图像。
(d)
(c)
图6
从图6我们可以看出利用参数不同的K-means算法和中值修正后的K-means算法进行分割后的图像的效果是不同的。
从图6显然我们可以看出同样利用K-means算法进行分割,当k=3时得到的分割效果(如图6(b))不如当k=4时得到的分割效果(如图6(c));
同样的,虽然当k=4时,利用K-means算法得到的结果与原图像较为接近,但与利用中值修正后的K-means算法进行分割后的图像的效果(如图6(d))相比,还是后者的效果更好,更接近原图像。
综上所述,虽然K-means算法可以解决一些基本的聚类问题,但由于其对某些数据进行分类时,效果不是很好(如实验2和3),因此我们需要对其改进,故引入了中值修正后的K-means算法,同时通过实验4、5和6的结果,我们也可以看出中值修正后的K-means算法确实优于原来的K-means算法,更适合解决聚类问题。
六、附录(程序)
附录1
function[idx,C,D,sumD]=kmeans_mean(X,k)
%kmeans2normK-meansclustering.
%X:
n*p的数据矩阵
%k:
将X划分为几类
%startM:
k*p的矩阵,初始类中心
%idx:
n*1的向量,存储每个点的聚类编号
%C:
k*p的矩阵,存储k个聚类的中心位置
%sumD:
1*k的和向量,类间所有点与该类中心的距离之和
%D:
n*k的矩阵,每一点与所有中心的距离
%sumK:
1*k的和向量,记录第k个类中点的个数
[n,p]=size(X);
idx=zeros(n,1);
C=zeros(k,p);
startM=zeros(k,p);
D=zeros(n,k);
%-----------随机生成初始聚类中心
fori=1:
k
bi=ceil(i*n/k*rand);
startM(i,:
)=X(bi,:
);
end
whilesum(abs(startM-C))>
C=startM;
startM(:
)=0;
sumD=zeros(1,k);
sumK=zeros(1,k);
%记录第k个类中点的个数
%count=zeros(1,k);
%计数器
%sortC=zeros(k,n);
fori=1:
n
%------计算每一点与所有中心的距离------
forj=1:
D(i,j)=(X(i,:
)-C(j,:
))*(X(i,:
))'
;
%D(i,j)=sum(abs(X(i,:
)));
end
%-----------标号------
mini=inf;
ifD(i,j)<
mini
mini=D(i,j);
idx(i)=j;
sumD(idx(i))=sumD(idx(i))+D(i,idx(i));
sumK(idx(i))=sumK(idx(i))+1;
%---------计算新的聚类中心---------
%=======求解质心=======
startM(idx(i),:
)=startM(idx(i),:
)+X(i,:
)/sumK(idx(i));
%求解质心
附录2
clearall
%------随机生成[-1,1]^2的数
%X=[randn(100,2)+ones(100,2);
...
%randn(100,2)-ones(100,2)];
%%%------随机生成圆盘内的数
%deg1=(2*rand(300,1)-1)*2*pi;
%deg2=(2*rand(300,1)-1)*2*pi;
%r1=rand(300,1);
%r2=rand(300,1);
%X1=[r1.*cos(deg1)r1.*sin(deg1)];
%X2=[(r2+2).*cos(deg2)(r2+2).*sin(deg2)];
%X=zeros(600,2);
%fori=1:
300
%X(2*i-1,:
)=X1(i,:
%X(2*i,:
)=X2(i,:
%end
%%------随机生成两个圆---------
deg1=(2*rand(300,1)-1)*2*pi;
r1=rand(300,1);
deg2=(2*rand(30,1)-1)*2*pi;
r2=0.1*rand(30,1);
deg3=(2*rand(300,1)-1)*2*pi;
r3=rand(300,1);
X1=[r1.*cos(deg1)r1.*sin(deg1)];
X2=[r2.*cos(deg2)+5r2.*sin(deg2)+5];
X3=[r3.*cos(deg3)+1r3.*sin(deg3)+1];
X=[X1;
X3];
%X=[X1;
X2;
%[idx,ctrs,D,sumD]=kmeans_mean(X,2);
[idx,ctrs,D,sumD]=kmeans_medium(X,2);
figure
plot(X(idx==1,1),X(idx==1,2),'
r.'
'
MarkerSize'
12)
holdon
plot(X(idx==2,1),X(idx==2,2),'
b.'
plot(ctrs(:
1),ctrs(:
2),'
kx'
...
'
12,'
LineWidth'
2)
plot(ctrs(:
ko'
legend('
Cluster1'
Cluster2'
Centroids'
Location'
NW'
)
附录3
function[idx,C,D,sumD]=kmeans_medium(X,k)
1*k的和向量,记录第k个类点的个数
%D(i,j)=sqrt(sum((X(i,:
)).^2));
%D(i,j)=sum(abs((X(i,:
))));
%=======质心作为聚类中心=======
%startM(idx(i),:
%=======中位数作为聚类中心=======
inds=find(idx==i);
tempX=X(inds,:
%-----------若标号为空则取离所在聚类中心最远的点为新的类中心------
ifnumel(tempX)==0
dist=0;
forjj=1:
ifD(jj,idx(jj))>
dist
dist=D(jj,idx(jj));
sumK(idx(jj))=sumK(idx(jj))-1;
idx(jj)=i;
D(jj,i)=0;
sumK(i)=1;
tempX=X(jj,:
p
tempXj=tempX(:
j);
tempXj=sort(tempXj);
startM(i,j)=tempXj(round(sumK(i)/2));
附录4
f=imread('
wawa.jpg'
imshow(f)
img_as_col=double(f(:
));
k=4;
%cluster_membs=kmeans_men(img_as_col,k);
cluster_membs=kmeans_medium(img_as_col,k);
labelim=zeros(size(f));
inds=find(cluster_membs==i);
meanval=mean(img_as_col(inds));
labelim(inds)=meanval;
imshow(uint8(labelim))
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机器 学习
![提示](https://static.bdocx.com/images/bang_tan.gif)