这是我的第一篇博客;

K-Means算法过程,略;

这是一次课程的任务2333,是利用所学K-means聚类分析方法,对iris数据集进行聚类分析,并利用已知的样本类别标
签进行聚类分析评价;

我的K均值算法以iris.data为例(附在文末);

数据集:Iris数据集
 (http://archive.ics.uci.edu/ml/datasets/Iris)
数据描述:Iris数据集包含150个鸢尾花模式样本,其中 每个模式样本采用5维的特征描述
X = (x1,x2,x3,x4,w);
x1: 萼片长度(厘米)
x2: 萼片宽度(厘米)
x3: 花瓣长度(厘米)
x4:花瓣宽度(厘米)
w(类别属性 ): 山鸢尾 (Iris setosa),变色鸢尾(Iris versicolor)和维吉尼亚鸢尾(Iris virginica)

先贴上我的函数结构:

函数结构—— FindCluster(~)         聚类算法主函数|
MyKmeans ——  MyPlot2(~),MyPlot3(~)     画图|—— Accuracy(~)             聚类精度评价

MyKmean.m,程序运行的主函数

% 作者 : YG1501  LQY
% 日期 : 2018.01.13  星期六
% 函数功能 : 实现对iris.data数据集的分类,并根据分类结果进行精度评价clear;clc;close all;
%手动选取文件,选用iris.data
[filename,fpath] = uigetfile(...
{...'*.m;*.txt;*.data',...'Data(*.m;*.txt;*.data)';...'*.*','All Files(*.*)'...
},'Select data');
if ~filenamereturn
end% filename = 'iris.data'; % 嫌麻烦可以用这个[X1,X2,X3,X4,X5] = textread(filename,'%f%f%f%f%s','delimiter',',');    %Get data
clear filename fpathX = [X1 X2 X3 X4]; %目前貌似还没什么用
[m,~] = size(X);%分配索引
DataLabel = zeros(m,1);
DataLabel(strcmp(X5,'Iris-setosa')) = 1;
DataLabel(strcmp(X5,'Iris-versicolor')) = 2;
DataLabel(strcmp(X5,'Iris-virginica')) = 3;
clear m X5%二维结果
[MyCenter1,ClusterLabel12] = FindCluster([X1 X2],3,DataLabel);
[MyCenter2,ClusterLabel13] = FindCluster([X1 X3],3,DataLabel);
[MyCenter3,ClusterLabel14] = FindCluster([X1 X4],3,DataLabel);
[MyCenter4,ClusterLabel23] = FindCluster([X2 X3],3,DataLabel);
[MyCenter5,ClusterLabel24] = FindCluster([X2 X4],3,DataLabel);
[MyCenter6,ClusterLabel34] = FindCluster([X3 X4],3,DataLabel);hold on;
subplot(231)MyPlot2(X1,X2,DataLabel,MyCenter1),xlabel('X1'),ylabel('X2')
subplot(232)MyPlot2(X1,X3,DataLabel,MyCenter2),xlabel('X1'),ylabel('X3')
subplot(233)MyPlot2(X1,X4,DataLabel,MyCenter3),xlabel('X1'),ylabel('X4')
subplot(234)MyPlot2(X2,X3,DataLabel,MyCenter4),xlabel('X2'),ylabel('X3')
subplot(235)MyPlot2(X2,X4,DataLabel,MyCenter5),xlabel('X2'),ylabel('X4')
subplot(236)MyPlot2(X3,X4,DataLabel,MyCenter6),xlabel('X3'),ylabel('X4')clear MyCenter1 MyCenter2 MyCenter3 MyCenter4 MyCenter5 MyCenter6%三维结果
[MyCenter7,ClusterLabel123]  = FindCluster([X1,X2,X3],3,DataLabel);
[MyCenter8,ClusterLabel124]  = FindCluster([X1,X2,X4],3,DataLabel);
[MyCenter9,ClusterLabel134]  = FindCluster([X1,X3,X4],3,DataLabel);
[MyCenter10,ClusterLabel234] = FindCluster([X2,X3,X4],3,DataLabel);hold on;
figure,title('3D');
subplot(221)MyPlot3(X1,X2,X3,DataLabel,MyCenter7)xlabel('X1'),ylabel('X2'),zlabel('X3');
subplot(222)MyPlot3(X1,X2,X4,DataLabel,MyCenter8)xlabel('X1'),ylabel('X2'),zlabel('X4');
subplot(223)MyPlot3(X1,X3,X4,DataLabel,MyCenter9)xlabel('X1'),ylabel('X3'),zlabel('X4');
subplot(224)MyPlot3(X2,X3,X4,DataLabel,MyCenter10)xlabel('X2'),ylabel('X3'),zlabel('X4');clear MyCenter7 MyCenter8 MyCenter9 MyCenter10%聚类精度评价
%二维结果
ClusterLabel_2D = [ClusterLabel12,ClusterLabel13,ClusterLabel14...ClusterLabel23,ClusterLabel24,ClusterLabel34];
ClusterAccuracy_2D = Accuracy(DataLabel,ClusterLabel_2D);
clear ClusterLabel12 ClusterLabel13 ClusterLabel14
clear ClusterLabel23 ClusterLabel24 ClusterLabel34 ClusterLabel_2D%三维结果
ClusterLabel_3D = [ClusterLabel123,ClusterLabel124,ClusterLabel134,ClusterLabel234];
ClusterAccuracy_3D = Accuracy(DataLabel,ClusterLabel_3D);
clear ClusterLabel123 ClusterLabel124 ClusterLabel134 ClusterLabel234
clear ClusterLabel_3D

FindCluster.m

%函数功能 : 输入数据集、聚类中心个数与样本标签
%    得到聚类中心与聚类样本标签function [ClusterCenter,ClusterLabel] = FindCluster(MyData,ClusterCounts,DataLabel)
[m,n] = size(MyData);ClusterLabel = zeros(m,1);       %用于存储聚类标签% MyLabel = unique(DataLabel,'rows');
% for i = 1:size(MyLabel,2);
%   LabelIndex(1,i) = i;       %为数据标签创建索引
% end%已知数据集的每个样本的中心
OriginCenter = zeros(ClusterCounts,n);
for q = 1:ClusterCountsDataCounts = 0;for p = 1:m%按照数据标签,计算样本中心if DataLabel(p) == qOriginCenter(q,:) = OriginCenter(q,:) + MyData(p,:);DataCounts = DataCounts + 1;endendOriginCenter(q,:) = OriginCenter(q,:) ./ DataCounts;
end
%按照第一列对样本中心排序
%排序是为了解决新聚类中心因随机分配而与样本最初的聚类中心不匹配的问题
SortCenter1 = sortrows(OriginCenter,1);FalseTimes = 0;
CalcuateTimes = 0;
%此循环用于纠正分类错误的情况
while (CalcuateTimes < 15)ClusterCenter = zeros(ClusterCounts,n);       %初始化聚类中心for p = 1:ClusterCountsClusterCenter(p,:) = MyData( randi(m,1),:);    %随机选取一个点作为中心end%此循环用于寻找聚类中心%目前还未解决该循环陷入死循环的问题,所以设置一个参数来终止循环kk = 0;while (kk < 15)Distance   = zeros(1,ClusterCounts);   %存储单个样本到每个聚类中心的距离DataCounts = zeros(1,ClusterCounts);  %记录每个聚类的样本数目NewCenter  = zeros(ClusterCounts,n);for p = 1:mfor q = 1:ClusterCountsDistance(q) = norm(MyData(p,:) - ClusterCenter(q,:));end%index返回最小距离的索引,亦即聚类中心的标号[~,index] = min(Distance);ClusterLabel(p) = index;end k = 0;for q = 1:ClusterCountsfor p = 1:m%按照标记,对样本进行分类,并计算聚类中心if ClusterLabel(p) == qNewCenter(q,:) = NewCenter(q,:) + MyData(p,:);DataCounts(q)  = DataCounts(q) + 1;endendNewCenter(q,:) = NewCenter(q,:) ./ DataCounts(q);%若新的聚类中心与上一个聚类中心相同,则认为算法收敛if norm(NewCenter(q,:) - ClusterCenter(q,:)) < 0.1k = k + 1;endendClusterCenter = NewCenter;%判断是否全部收敛if k == ClusterCountsbreak;endkk = kk + 1 ;end%再次判断每个聚类是否分类正确,若分类错误则进行惩罚trueCounts = ClusterCounts;SortCenter2 = sortrows(ClusterCenter,1);for p = 1:ClusterCountsif norm(SortCenter1(p,:) - SortCenter2(p,:)) > 0.5trueCounts = trueCounts - 1;FalseTimes = FalseTimes + 1;break;endendif trueCounts == ClusterCountsbreak;endCalcuateTimes = CalcuateTimes + 1;
end% FalseTimes
% CalcuateTimes
% trueCounts% kk
% DataCounts
% OriginCenter
% NewCenter%理论上每个聚类的标签应是123排列的,但实际上,由于每个聚类中心都是随机选取的,
%实际分类的顺序可能是213,132等,所以需要对分类标签进行纠正,这对之后的精度评
%价带来了方便,如果不需要进行精度评价,可以注释下方代码。
%对分类标签进行纠正:
%算法原理:从第一个已知的样本中心开始,寻找离其最近的聚类中心,然后将归类于该
%          聚类中心的样本的聚类标签更换为i
for i = 1:ClusterCounts            %遍历原始样本中心for j = 1:ClusterCounts       %遍历聚类中心,与原样本中心比较if norm(OriginCenter(i,:) - ClusterCenter(j,:)) < 0.6% for p = 1:m%  if ClusterLabel(p) == j%      ClusterLabel(p) = 2 * ClusterCounts + i;%     end% endClusterLabel(ClusterLabel == j) = 2 * ClusterCounts + i;endend
end
ClusterLabel = ClusterLabel - 2 * ClusterCounts;
%Temp = [MyData(:,:),ClusterLabel]

至此已经完成了聚类中心的计算。该方法基本解决了因随机选取初始中心而导致最后聚类中心明显错误的情况,但缺点在于循环太多,时间复杂度O(?),而且偶尔会陷入死循环,原因在于有两个或者以上的聚类中心被选到了同一点。若超过10s还没跑出结果,还是重新运行下程序吧

画图的函数:

MyPlot2.m

%函数功能 : 输入样本,样本标签及求出的聚类中心,显示二维图像,实现数据可视化function MyPlot2(X1,X2,DataLabel,ClusterCenter)
[m,~] = size(X1);hold on;
% for p = 1:m
%   if(DataLabel(p) == 1)
%       plot(X1(p),X2(p),'*r')
%   elseif(DataLabel(p) == 2)
%       plot(X1(p),X2(p),'*g')
%   else
%       plot(X1(p),X2(p),'*b')
%   end
% endp = find(DataLabel == 1);
plot(X1(p),X2(p),'*r')
p = find(DataLabel == 2);
plot(X1(p),X2(p),'*g')
p = find(DataLabel == 3);
plot(X1(p),X2(p),'*b')% xlabel(who('X1'));
% ylabel(who('X2'));
%PS : 我想在坐标轴中根据输入的形参的矩阵的名字,转换成字符串,来动态输出
%      坐标轴名称,不知道该怎么做?用上面注释的语句不行。。
[n,~] = size(ClusterCenter);plot(ClusterCenter(1:1:n,1),ClusterCenter(1:1:n,2),'ok')grid on;

MyPlot3.m

function MyPlot3(X1,X2,X3,DataLabel,ClusterCenter)
[m,~] = size(X1);hold on;
% for i = 1:m
%   if(DataLabel(i) == 1)
%       plot3(X1(i),X2(i),X3(i),'.r')
%   elseif(DataLabel(i) == 2)
%       plot3(X1(i),X2(i),X3(i),'.g')
%   else
%       plot3(X1(i),X2(i),X3(i),'.b')
%   end
% endp = find(DataLabel == 1);
plot3(X1(p),X2(p),X3(p),'.r')
p = find(DataLabel == 2);
plot3(X1(p),X2(p),X3(p),'.g')
p = find(DataLabel == 3);
plot3(X1(p),X2(p),X3(p),'.b')% xlabel('X1');
% ylabel('X2');
% zlabel('X3');
%PS : 我想在坐标轴中根据输入的形参的矩阵的名字,转换成字符串,来动态输出
%      坐标轴名称,不知道该怎么做?用上面注释的语句不行。。[n,~] = size(ClusterCenter);% for i = 1:n
%   plot3(ClusterCenter(i,1),ClusterCenter(i,2),ClusterCenter(i,3),'ok')
% end
plot3(ClusterCenter(1:1:n,1),ClusterCenter(1:1:n,2),ClusterCenter(1:1:n,3),'ok')view([1 1 1]);
grid on;

精度评价Accuracy.m

%函数功能:根据聚类结果进行精度评价
%精度评价,返回每一种分类的精度值(正确率)
function ClusterAccuracy = Accuracy(DataLable,CLusterLabel)
[m,n] = size(CLusterLabel);
ClusterAccuracy = zeros(1,n);%理论上的聚类标签应为 1,2,3,但实际上可能变成了 213 , 132等,导致计算失误
%因此需要对分类标签进行纠正,而这一步骤已经在FindCluster函数中完成了
for i = 1:n%原理:假设某样本在已知数据集中属于第一类,而其聚类后的也同样被分到了第一类,那么它们的标签%都是1,这样相减后结果就为0,表明已经分类正确,否则不为0,分类错误Temp(:,i) = DataLable - CLusterLabel(:,i);
endfor j = 1:nfor i = 1:mif Temp(i,j) == 0ClusterAccuracy(1,j) = ClusterAccuracy(1,j) + 1;endend
endClusterAccuracy = ClusterAccuracy ./ m;

运行结果展示(二维结果):

可以看到,在二维的情况下,比较X3: 花瓣长度(厘米)和X4:花瓣宽度(厘米)的精度更高(94.67%),也就是说只比较两种特征时,比较花瓣长度和花瓣宽度,区分三种花的效果更好,分类结果更可靠。

三维分类结果:

可以看到,在三维的情况下,比较X2:萼片宽度(厘米),X3: 花瓣长度(厘米)和X4:花瓣宽度(厘米)的精度更高(93.33%),也就是说比较三种特征时,取X2,X3,X4,区分三种花的效果更好,分类结果更可靠。

最后:本程序目前还存在诸多不足,比如时间复杂度高,效率较低;目前对Matlab语言还不是很熟,写的程序也比较C-Style,各位看官若是有改进的建议,欢迎留言,或者直接联系我(联系方式附在文最末),大家一起探讨:D

附iris.data数据集:

5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa
5.4,3.9,1.7,0.4,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa
5.0,3.4,1.5,0.2,Iris-setosa
4.4,2.9,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
5.4,3.7,1.5,0.2,Iris-setosa
4.8,3.4,1.6,0.2,Iris-setosa
4.8,3.0,1.4,0.1,Iris-setosa
4.3,3.0,1.1,0.1,Iris-setosa
5.8,4.0,1.2,0.2,Iris-setosa
5.7,4.4,1.5,0.4,Iris-setosa
5.4,3.9,1.3,0.4,Iris-setosa
5.1,3.5,1.4,0.3,Iris-setosa
5.7,3.8,1.7,0.3,Iris-setosa
5.1,3.8,1.5,0.3,Iris-setosa
5.4,3.4,1.7,0.2,Iris-setosa
5.1,3.7,1.5,0.4,Iris-setosa
4.6,3.6,1.0,0.2,Iris-setosa
5.1,3.3,1.7,0.5,Iris-setosa
4.8,3.4,1.9,0.2,Iris-setosa
5.0,3.0,1.6,0.2,Iris-setosa
5.0,3.4,1.6,0.4,Iris-setosa
5.2,3.5,1.5,0.2,Iris-setosa
5.2,3.4,1.4,0.2,Iris-setosa
4.7,3.2,1.6,0.2,Iris-setosa
4.8,3.1,1.6,0.2,Iris-setosa
5.4,3.4,1.5,0.4,Iris-setosa
5.2,4.1,1.5,0.1,Iris-setosa
5.5,4.2,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
5.0,3.2,1.2,0.2,Iris-setosa
5.5,3.5,1.3,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
4.4,3.0,1.3,0.2,Iris-setosa
5.1,3.4,1.5,0.2,Iris-setosa
5.0,3.5,1.3,0.3,Iris-setosa
4.5,2.3,1.3,0.3,Iris-setosa
4.4,3.2,1.3,0.2,Iris-setosa
5.0,3.5,1.6,0.6,Iris-setosa
5.1,3.8,1.9,0.4,Iris-setosa
4.8,3.0,1.4,0.3,Iris-setosa
5.1,3.8,1.6,0.2,Iris-setosa
4.6,3.2,1.4,0.2,Iris-setosa
5.3,3.7,1.5,0.2,Iris-setosa
5.0,3.3,1.4,0.2,Iris-setosa
7.0,3.2,4.7,1.4,Iris-versicolor
6.4,3.2,4.5,1.5,Iris-versicolor
6.9,3.1,4.9,1.5,Iris-versicolor
5.5,2.3,4.0,1.3,Iris-versicolor
6.5,2.8,4.6,1.5,Iris-versicolor
5.7,2.8,4.5,1.3,Iris-versicolor
6.3,3.3,4.7,1.6,Iris-versicolor
4.9,2.4,3.3,1.0,Iris-versicolor
6.6,2.9,4.6,1.3,Iris-versicolor
5.2,2.7,3.9,1.4,Iris-versicolor
5.0,2.0,3.5,1.0,Iris-versicolor
5.9,3.0,4.2,1.5,Iris-versicolor
6.0,2.2,4.0,1.0,Iris-versicolor
6.1,2.9,4.7,1.4,Iris-versicolor
5.6,2.9,3.6,1.3,Iris-versicolor
6.7,3.1,4.4,1.4,Iris-versicolor
5.6,3.0,4.5,1.5,Iris-versicolor
5.8,2.7,4.1,1.0,Iris-versicolor
6.2,2.2,4.5,1.5,Iris-versicolor
5.6,2.5,3.9,1.1,Iris-versicolor
5.9,3.2,4.8,1.8,Iris-versicolor
6.1,2.8,4.0,1.3,Iris-versicolor
6.3,2.5,4.9,1.5,Iris-versicolor
6.1,2.8,4.7,1.2,Iris-versicolor
6.4,2.9,4.3,1.3,Iris-versicolor
6.6,3.0,4.4,1.4,Iris-versicolor
6.8,2.8,4.8,1.4,Iris-versicolor
6.7,3.0,5.0,1.7,Iris-versicolor
6.0,2.9,4.5,1.5,Iris-versicolor
5.7,2.6,3.5,1.0,Iris-versicolor
5.5,2.4,3.8,1.1,Iris-versicolor
5.5,2.4,3.7,1.0,Iris-versicolor
5.8,2.7,3.9,1.2,Iris-versicolor
6.0,2.7,5.1,1.6,Iris-versicolor
5.4,3.0,4.5,1.5,Iris-versicolor
6.0,3.4,4.5,1.6,Iris-versicolor
6.7,3.1,4.7,1.5,Iris-versicolor
6.3,2.3,4.4,1.3,Iris-versicolor
5.6,3.0,4.1,1.3,Iris-versicolor
5.5,2.5,4.0,1.3,Iris-versicolor
5.5,2.6,4.4,1.2,Iris-versicolor
6.1,3.0,4.6,1.4,Iris-versicolor
5.8,2.6,4.0,1.2,Iris-versicolor
5.0,2.3,3.3,1.0,Iris-versicolor
5.6,2.7,4.2,1.3,Iris-versicolor
5.7,3.0,4.2,1.2,Iris-versicolor
5.7,2.9,4.2,1.3,Iris-versicolor
6.2,2.9,4.3,1.3,Iris-versicolor
5.1,2.5,3.0,1.1,Iris-versicolor
5.7,2.8,4.1,1.3,Iris-versicolor
6.3,3.3,6.0,2.5,Iris-virginica
5.8,2.7,5.1,1.9,Iris-virginica
7.1,3.0,5.9,2.1,Iris-virginica
6.3,2.9,5.6,1.8,Iris-virginica
6.5,3.0,5.8,2.2,Iris-virginica
7.6,3.0,6.6,2.1,Iris-virginica
4.9,2.5,4.5,1.7,Iris-virginica
7.3,2.9,6.3,1.8,Iris-virginica
6.7,2.5,5.8,1.8,Iris-virginica
7.2,3.6,6.1,2.5,Iris-virginica
6.5,3.2,5.1,2.0,Iris-virginica
6.4,2.7,5.3,1.9,Iris-virginica
6.8,3.0,5.5,2.1,Iris-virginica
5.7,2.5,5.0,2.0,Iris-virginica
5.8,2.8,5.1,2.4,Iris-virginica
6.4,3.2,5.3,2.3,Iris-virginica
6.5,3.0,5.5,1.8,Iris-virginica
7.7,3.8,6.7,2.2,Iris-virginica
7.7,2.6,6.9,2.3,Iris-virginica
6.0,2.2,5.0,1.5,Iris-virginica
6.9,3.2,5.7,2.3,Iris-virginica
5.6,2.8,4.9,2.0,Iris-virginica
7.7,2.8,6.7,2.0,Iris-virginica
6.3,2.7,4.9,1.8,Iris-virginica
6.7,3.3,5.7,2.1,Iris-virginica
7.2,3.2,6.0,1.8,Iris-virginica
6.2,2.8,4.8,1.8,Iris-virginica
6.1,3.0,4.9,1.8,Iris-virginica
6.4,2.8,5.6,2.1,Iris-virginica
7.2,3.0,5.8,1.6,Iris-virginica
7.4,2.8,6.1,1.9,Iris-virginica
7.9,3.8,6.4,2.0,Iris-virginica
6.4,2.8,5.6,2.2,Iris-virginica
6.3,2.8,5.1,1.5,Iris-virginica
6.1,2.6,5.6,1.4,Iris-virginica
7.7,3.0,6.1,2.3,Iris-virginica
6.3,3.4,5.6,2.4,Iris-virginica
6.4,3.1,5.5,1.8,Iris-virginica
6.0,3.0,4.8,1.8,Iris-virginica
6.9,3.1,5.4,2.1,Iris-virginica
6.7,3.1,5.6,2.4,Iris-virginica
6.9,3.1,5.1,2.3,Iris-virginica
5.8,2.7,5.1,1.9,Iris-virginica
6.8,3.2,5.9,2.3,Iris-virginica
6.7,3.3,5.7,2.5,Iris-virginica
6.7,3.0,5.2,2.3,Iris-virginica
6.3,2.5,5.0,1.9,Iris-virginica
6.5,3.0,5.2,2.0,Iris-virginica
6.2,3.4,5.4,2.3,Iris-virginica
5.9,3.0,5.1,1.8,Iris-virginica

代码与数据可直接下载,

链接:https://pan.baidu.com/s/1fVzbH5fJnRKjIBCe8ir0Gw

提取码:gekv

2018 / 01 / 27   补充:

我想到了一些提高运行效率的方法,那就是尽量减少for循环,因为matlab对for循环的处理效率是很低的!

可拱参考的优化思路:

1) 使用parfor;

2)使用find;

3)向量化,即使用向量操作代替循环;

4)bsxfun(),sum(), ‘./’ '.*'

5)待补充

2018 / 05 / 03   更新:

程序之所以跑得慢,是因为画图函数用了for循环,把for循环去掉直接用plot,会快很多。

2018/07/12更新:

优化了画图函数,现在可以很快看到结果了;

直接从网页把代码复制过去的话,函数运行会出问题,修改方法如下:看到FindCluster函数里,找到所有while循环语句和 if 判断语句,把  @It; 改成  < ,  把  @gt; 改成   > 就行了(这个问题我解决不了,修改的时候能正确显示,但保存后就出问题了.....)

CSDN已经很少登录了,消息几乎不看,如有疑问,请用以下方式联系博主:

邮箱:1765928683@qq.com

我的K均值算法的matlab实现相关推荐

  1. k均值算法原理详细讲解以及matlab代码实现

    有研究生物电信号处理和机器学习的欢迎加我qq429500506共同交流学习进步. 最近更新文章的频率太低了,主要原因是不想为了发文章而发文章,想潜心研究,写好文章,顺便想说一句开源万岁,最近一个月虽然 ...

  2. python图片压缩算法_使用K均值算法进行图片压缩

    K均值算法 上一期介绍了机器学习中的监督式学习,并用了离散回归与神经网络模型算法来解决手写数字的识别问题.今天我们介绍一种机器学习中的非监督式学习算法--K均值算法. 所谓非监督式学习,是一种与监督式 ...

  3. 一句话总结K均值算法

    一句话总结K均值算法 核心:把样本分配到离它最近的类中心所属的类,类中心由属于这个类的所有样本确定. k均值算法是一种无监督的聚类算法.算法将每个样本分配到离它最近的那个类中心所代表的类,而类中心的确 ...

  4. spark Bisecting k-means(二分K均值算法)

    Bisecting k-means(二分K均值算法) 二分k均值(bisecting k-means)是一种层次聚类方法,算法的主要思想是:首先将所有点作为一个簇,然后将该簇一分为二.之后选择能最大程 ...

  5. k-modes算法mysql_第十一章 K-Means(K均值)算法模型实现(中)

    python2 代码实现: from numpy import * import numpy def loadDataSet(fileName): #general function to parse ...

  6. k均值算法 二分k均值算法_如何获得K均值算法面试问题

    k均值算法 二分k均值算法 数据科学访谈 (Data Science Interviews) KMeans is one of the most common and important cluste ...

  7. k均值算法 二分k均值算法_使用K均值对加勒比珊瑚礁进行分类

    k均值算法 二分k均值算法 Have you ever seen a Caribbean reef? Well if you haven't, prepare yourself. 您见过加勒比礁吗? ...

  8. python实现k均值算法_python实现kMeans算法

    聚类是一种无监督的学习,将相似的对象放到同一簇中,有点像是全自动分类,簇内的对象越相似,簇间的对象差别越大,则聚类效果越好. 1.k均值聚类算法 k均值聚类将数据分为k个簇,每个簇通过其质心,即簇中所 ...

  9. k均值算法的优化目标和随机初始化

    这里我们来学习k均值算法的优化目标(代价函数): 优化目标的值等于每一个训练集数据到该所属的聚类中心距离的平方的平均值 其实在我们进行之前所循环进行的聚类分簇和移动聚类中心的操作,都是在不断的最小化J ...

最新文章

  1. 法国电子与计算机信息学校排名,法国电气与电子工程专业大学排名(2020年上交大)_快飞留学...
  2. mysql高可用之MMM
  3. MapReduce的序列化案例
  4. Spring的quartz定时器重复执行二次的问题解决
  5. java agv,Java 访问控制关键字
  6. 研磨设计模式之 单例模式-3
  7. 操作系统:Android(Google公司开发的操作系统)
  8. 【Python】hello python!
  9. SSH连接不成功的处理过程
  10. 聊聊 Java8 以后各个版本的新特性
  11. ArcGIS Server 10 for java 注册SOE出现的问题
  12. (Quicker)懒人福利:鼠标快捷操作工具箱
  13. Origin下载安装教程(亲测有用)
  14. 学游戏设计好就业吗?有“钱”途吗?
  15. 电子齿轮 电子凸轮
  16. 腾讯云开放mysql端口_腾讯云服务器Mysql开启3306端口远程访问
  17. 计算机毕业设计 在线免费小说微信小程序(源码+论文)
  18. 吉米_王:乌班图下安装pycharm的方式
  19. Ui设计中常用的6大工具
  20. yum -y insytall nmap报错:​​​​​​​​已加载插件:fastestmirrorLoading mirror speeds from cached hostfile

热门文章

  1. c语言循环结构程序设计教学,高级C语言循环结构程序设计教学教材演示幻灯片.ppt...
  2. python画箭头_箭头指南 | Matplotlib 中文
  3. 拼多多-多多进宝 只有goods_id没有goods_sign如何获取商品详情,拼多多goods_sign
  4. 2021 年 1 月程序员工资新出炉,你猜涨了多少?
  5. 计算机专业和软件工程专业哪个好就业率,从就业看专业:软件工程专业就业率异军突起...
  6. 如何使用Erdas进行监督分类
  7. springMVC实现jsonp的跨域请求
  8. python需要多久-python培训需要多久
  9. 三坐标检测之测头补偿原理
  10. 用docker部署go简单应用