• 大小: 3KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-04
  • 语言: Matlab
  • 标签: 聚类  

资源简介

这是k-means的MATLAB程序,主要用于各种数据的聚类等情况

资源截图

代码片段和文件信息

function [ resXresY resZrecord] = FunK_mean3D( xyzk )
% 功能:
%     实现三维空间k-mean聚类算法
% 输入:
%     三维数据,分别用xyz两个一维向量代表两个维度
%     k 是分成的类别的数量
% 输出:
%     k行的两个矩阵
%     对应同样的第n行,存放着第n类的所有元素
%     record: 记录着每一行的有效元素的个数
wine=xlsread(‘C:\Users\Administrator\Desktop\11.xls‘‘A1:C20‘)

%wine=mapminmax(wine); %训练数据标准化
%wine=zscore(wine); %测试数据标准化
%amax = max(max(A)); %求矩阵中最大数
%amin = min(min(A)); %求矩阵中最小数
%wine = (A-amin)/(amax-amin);
x=wine(:1);
y=wine(:2);
z=wine(:3);
k=4;
    j = 1;
    % 下面是预分配一些空间
    % seedX 和 seedY 中存放着所有种子
    seedX = zeros(1k);
    seedY = zeros(1k);
    seedZ = zeros(1k);
    oldSeedX = zeros(1k);
    oldSeedY = zeros(1k);
    oldSeedZ = zeros(1k);
    resX = zeros(klength(x));
    resY = zeros(klength(x));
    resZ = zeros(klength(x));
    % 用来记录resX中每一行有效元素的个数
    record = zeros(1k); 
    for i = 1:k % 产生k个随机种子 注意: 随机种子是来自元素集合
        seedX(i) = x(round(rand()*length(resX)));
        seedY(i) = y(round(rand()*length(resX)));
        seedZ(i) = z(round(rand()*length(resX)));
        % 为保证种子不重叠
        if (i > 1 && seedX(i) == seedX(i-1) && seedY(i) == seedY(i-1) && seedZ(i) == seedZ(i-1))
            i = i -1; % 重新产生一个种子
        end
    end

    while 1
        disp([‘jack is here‘])
        record(:) = 0; % 重置为零
        resX(:) = 0;
        resY(:) = 0;
        resZ(:) = 0;
        for i = 1:length(x) % 对所有元素遍历
            % 下面是判断本次元素应该归为哪一类,这里我们是根据欧几里得距离进行类别判定
            % k-mean算法认为元素应该归为距离最近的种子代表的类
            distanceMin = 1;
            for j = 2:k
              

评论

共有 条评论