G`J 发表于 2022-3-12 16:11:49

k均值算法

如图

elven08 发表于 2022-3-12 21:09:13

这不就是散点图吗?

elven08 发表于 2022-3-12 22:22:40

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

file = r"test.csv"

data = pd.read_csv(file)

fig, ax = plt.subplots()

ax.scatter(data['X1'], data['X2'])

xticks=np.arange(-2,14,2),ylim=(0, 12), yticks=np.arange(0, 14,2))

plt.show()

lassiter 发表于 2022-3-13 11:42:43

elven08 发表于 2022-3-12 22:22


他说的是K-均值聚类算法,不是散点图可视化。具体来说就是给这30多个点分类组团,哪些点可以抱做一团,一共分几个团合适。这个我用matlab编写过,用python还不习惯。

G`J 发表于 2022-3-14 17:33:00

lassiter 发表于 2022-3-13 11:42
他说的是K-均值聚类算法,不是散点图可视化。具体来说就是给这30多个点分类组团,哪些点可以抱做一团,一 ...

matlab怎么说呢

lassiter 发表于 2022-4-17 22:56:12

本帖最后由 lassiter 于 2022-4-17 23:24 编辑

G`J 发表于 2022-3-14 17:33
matlab怎么说呢

function =Kmean(P1,ZZ,signal)
%本程序求K-mean聚类
%P1是点的集合,点的坐标用列向量表示
%ZZ是初始聚类点,signal是点的标签信息,用来判断最后分类的正确率
[~,N]=size(P1);ZZnew=ZZ; n=size(ZZ,2);E=10;

% E是前一次聚类点与下一次聚类点的距离差
while E>0
      
    ZZ=ZZnew;
    basket=cell(2,n); % 建立2行n列的“篮子”
    for i=1:N%遍历每个点,求每个点分别到初始聚类点的距离
      temp=P1(:,i);
      e=abs(temp*ones(1,n)-ZZ);
      e2=sum(e.*e,1); %欧氏距离

        %找到最近的聚类点,放入对应的“篮子”
      [~,b]=min(e2);
      basket{1,b}=;
      basket{2,b}=;
    end

        %对“篮子”内的点集求均值,重新定义聚类点,重新计算聚类点的移动距离
    for i=1:n
      ZZnew(:,i)=mean(basket{1,i},2);
    end
      E=sum(sum(abs(ZZnew-ZZ)));
end

% 计算点集到新聚类点的距离差之和
r=0;
for i=1:n
   nn=size(basket{1,i},2);
   e=abs(ZZnew(:,i)*ones(1,nn)-basket{1,i});
   e2(i)=sum(sum(e.*e));%欧氏距离

end
J=sum(e2);

%根据标签信息计算分类正确率
for i=1:n
    for j=1:n
      r(i,j)=sum(basket{2,i}==j);
    end
end
rate=sum(max(r'))/N;
end
页: [1]
查看完整版本: k均值算法