kmean算法的简单实现--示例是对二维数据做处理,也可修改为多维

这可能是我写的最后一个博客文章,谨记!

首先这是一个分类算法里面***最简单***的一个机器学习算法!
算法思想

  1. 随机初始化C个类聚中心。确定样本点之间的距离计算公式(本文使用欧式距离,你也可以用马氏距离、Manhattan distance等);
  2. 按你采取的距离定义,计算每个样本点到各个类聚中心的距离,离哪一个中心近,就归为哪一个中心。这样把样本归完类后,再根据每个类的样本点就算类聚中心;
  3. 如果计算出来的新的类聚中心和之前的中心不同,则已新的类聚中心进行分类,即重复步骤2;否则停止迭代。分类结果和类聚中心即为我们所求。

-----------------------------我是分割线---------------------------------
你如果想在自己的工程中用这个算法,可以考虑使用MATLAB的kmean()这个function,简单高效率;

如果你想学习算法,建议还是老老实实敲一遍代码,也许你的代码执行效率和MATLAB提供的相差很大,但是,写一遍终归对自己有个交代。

算法代码如下:

%注意这里的data,我是读取的一个xlsx表,里面是要分类的数据,二维的
data = xlsread('C:\Users\Administrator\Desktop\实验6\实验数据.xlsx',1,'B2:E151');
C=2;%聚类中心个数
[M,N]=size(data);
%c=unifrnd(1,15,C,N);  %随机产生C个聚类中心,存放在c里面 --初始中心
c=data(1:C,:);   %用前三个样本点初始三个聚类中心
len = zeros(M,C);
result=zeros(M,1);  %标记

realc =c;  %计算得到的聚类中心

count=zeros(C,N+1);   %计算聚类中心的中间量

while(true)
    for i=1:M
        for j=1:C
            len(i,j)=norm(data(i,:)-c(j,:));
        end
    end
    [dontCare,result]=min(len,[],2);
    %重新计算类聚中心
    for i=1:M
        for j=1:C
            if result(i,1)==j
                for k=1:N
                    count(j,k)=data(i,k)+count(j,k);
                end
                count(j,end)=count(j,end)+1;
            end
        end
    end
    for i=1:C
        if count(i,end) ==0
            continue
        end
        for j=1:N
            realc(i,j)=count(i,j)/count(i,end);
        end
    end
    if isequal(c,realc)
        break;
    else
        c=realc;
        count(:,:)=0;
    end
end

里面的result 存放的样本分类结果。初始化中心点选取的是样本集中的任意几个样本。

有什么意见和建议可以联系我。欢迎大家和我讨论。
我的邮箱:13659512310@163.com

顺便附上代码库:https://github.com/liAoI/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以为您提供一个K-means算法的案例数据分析。这是一个非监督学习算法,用于对数据进行聚类分析。假设我们有一个数据集,其中包含了用户的年龄和购买金额两个特征。我们希望根据这两个特征将用户分成不同的群组。 首先,我们需要导入所需的库和数据集。假设我们使用Python和scikit-learn库: ```python import numpy as np from sklearn.cluster import KMeans # 创建一个示例数据集 data = np.array([[25, 100], [30, 150], [20, 80], [35, 200], [45, 250], [50, 300]]) ``` 接下来,我们需要对数据进行预处理,例如标准化或归一化,以便更好地进行聚类分析。在这个例子中,我们可以使用Min-Max缩放将数据缩放到0到1的范围内: ```python from sklearn.preprocessing import MinMaxScaler # 对数据进行缩放 scaler = MinMaxScaler() data_scaled = scaler.fit_transform(data) ``` 现在,我们可以使用K-means算法数据进行聚类。我们需要指定要创建的群组数量,这里假设我们希望将用户分为3个群组: ```python # 创建并拟合K-means模型 kmeans = KMeans(n_clusters=3) kmeans.fit(data_scaled) ``` 完成聚类后,我们可以查看每个样本所属的群组标签: ```python # 打印每个样本的聚类标签 labels = kmeans.labels_ print(labels) ``` 最后,我们可以将聚类结果可视化,以便更好地理解数据的分布情况: ```python import matplotlib.pyplot as plt # 可视化聚类结果 plt.scatter(data[:, 0], data[:, 1], c=labels, cmap='viridis') plt.xlabel('Age') plt.ylabel('Purchase Amount') plt.title('K-means Clustering') plt.show() ``` 这样,我们就完成了一个简单K-means算法的案例数据分析。希望能对您有所帮助!如果您有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值