美文网首页
K-means算法用于Iris数据集

K-means算法用于Iris数据集

作者: iDucky131 | 来源:发表于2019-04-05 21:45 被阅读0次

参考 K-mean(多维度)聚类算法(matlab代码)

首先是K-menas算法函数,这里使用3维形式,尽管Iris数据集有4维,但是考虑到4维数据无法绘制图像,所以在这里选择三维。

function [ resX,resY,resZ,recordd] = Kmeans( x,y,z,k )
%resX          存储结果
%resY 
%resZ
%centerX       存储聚类中心点 
%centerY
%centerZ
%oldcenterX    存储上一次的聚类中心,用于判断是否达到结束循环的条件
%oldcenterY
%oldcenterZ
%recordd       记录每个聚类中的元素个数
    resX=zeros(k,length(x));
    resY=zeros(k,length(y));
    resZ=zeros(k,length(x));
    centerX=zeros(1,k);
    centerY=zeros(1,k);
    centerZ=zeros(1,k);
    oldcenterX=zeros(1,k);
    oldcenterY=zeros(1,k);
    oldcenterZ=zeros(1,k);
    recordd=zeros(1,k);
    for i=1:k
        %生成随机聚类中心
        centerX(i)=x(round(rand()*length(x)));
        centerY(i)=y(round(rand()*length(x)));
        centerZ(i)=z(round(rand()*length(x)));
        %保证聚类中心不能够重复
        if(i > 1 && centerX(i) == centerX(i-1) && centerY(i) == centerY(i-1)&&centerZ(i) == centerZ(i-1))
            i=i-1;
        end
    end
    
    while 1
        resX(:)=0;  %将每个聚类的点清空,用新的聚类中心重新进行聚类
        resY(:)=0;
        resZ(:)=0;
        recordd(:)=0;
        for i=1:length(x)
            %给每一个点分类
            belong=1;
            for j=2:k
                %采用欧式距离,寻找到当前点最近的聚类中心
                if(power((x(i)-centerX(belong)),2)+power((y(i)-centerY(belong)),2)+power((z(i)-centerZ(belong)),2)>power((x(i)-centerX(j)),2)+power((y(i)-centerY(j)),2)+power((z(i)-centerZ(j)),2))
                    belong=j;
                end
            end
            %当前聚类中心内部点数加1
            recordd(belong)=recordd(belong)+1;
            %将此点放入聚类中心中
            resX(belong,recordd(belong))=x(i);
            resY(belong,recordd(belong))=y(i);
            resZ(belong,recordd(belong))=z(i);
        end
        
        %存放聚类中心
        oldcenterX=centerX;
        oldcenterY=centerY;
        oldcenterZ=centerZ;
        %更新聚类中心
        for i=1:k
            %recordd(i)=0表示此类内部无点,则保持聚类中心不变
            if(recordd(i)==0)
                continue
            end
            centerX(i)=sum(resX(i,:))/recordd(i);
            centerY(i)=sum(resY(i,:))/recordd(i);
            centerZ(i)=sum(resZ(i,:))/recordd(i);
        end
        %如果聚类中心没有改变就停止
        if mean([centerX == oldcenterX centerY == oldcenterY centerZ==oldcenterZ]) == 1 
            break;
        end
    end
    centerX
    centerY
    centerZ
     %下面只是优化内存
    maxPos = max(recordd);
    resX = resX(:,1:maxPos);
    resY = resY(:,1:maxPos);
    resZ = resZ(:,1:maxPos);
end

然后是读取数据和显示函数

由于.data数据集本身matlab读取较为困难,所以将其转化为了.txt形式
%读取Iris数据
[data1,data2,data3,data4,data5]=textread('Iris.txt','%f%f%f%f%s','delimiter',',');

%选取k=3
 k = 3;

 %调用函数,这里选择的是feature1、feature2、feature4
[resX resY resZ record] = Kmeans(data1,data2,data4,k);

%绘制图像
for i = 1:length(record)
    plot3(resX(i,1:record(i)),resY(i,1:record(i)),resZ(i,1:record(i)),'*')
   hold on
 end
% 下面是标记出每一个类别的类别代表点
 for i = 1:length(record)
    plot3(mean(resX(i,1:record(i)),2)',mean(resY(i,1:record(i)),2)',mean(resZ(i,1:record(i)),2)','Marker','square','Color','k','MarkerFaceColor','k','LineStyle','none')
end

Result

124.jpg

相关文章

  • K-means算法用于Iris数据集

    参考 K-mean(多维度)聚类算法(matlab代码) 首先是K-menas算法函数,这里使用3维形式,尽管I...

  • KNN算法应用

    1. 利用Iris数据集来使用KNN算法 1.1 Iris数据集介绍 Iris数据集是常用的分类实验数据集,由F...

  • K-means算法小记

    K-means算法是聚类算法。即给定一个数据集,利用K-means算法可将其分为K类。 算法思想: 随机从数据集中...

  • 机器学习算法实现(三):SVM

    SVM算法的R语言实践 数据集,采用R语言内置的iris数据集。 查看数据集前六个观测 head(iris) 第一...

  • scikit-learn的用法(一)རྗེས་ནས་བོད་ཡི

    本文主要使用scikit-learn中的KNN算法进行Iris数据集的分类。Iris也称鸢尾花卉数据集,是一类多重...

  • sklearn 中 make_blobs模块使用

    最近在学习K-means算法。如果自己想写一个K-means算法的话,需要造数据集,这个时候,用sklearn中的...

  • (六)TensorFlow.js的Iris数据集示例

    这是一个使用Iris数据集进行神经网络分类训练的示例。 Iris数据集介绍 Iris数据集是常用的分类实验数据集,...

  • K-Means聚类

    sklearn 的 iris 数据集里,样本共有3种分类。我们拿它来演示一下 k-means。假设我们不知道 ir...

  • 0#06最临近算法

    0x00 数据准备 最临近算法适合用于连续型样本.比如花的分类(iris)但是iris数据集合中得数据得维度比较多...

  • scikit-learn入门学习

    1.载入数据集 scikit-learn里面自带了一些标准数据集,例如用于分类的数据集iris和digits,以及...

网友评论

      本文标题:K-means算法用于Iris数据集

      本文链接:https://www.haomeiwen.com/subject/osnkiqtx.html