Kmeans算法(附代码)

这篇具有很好参考价值的文章主要介绍了Kmeans算法(附代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.Kmeans简介

Kmeans算法是一个无监督机器学习算法。其基本作用就是将一堆杂乱、无序的数据归成类,是用户给定的数,它表示用户需要将数据分成个类。

2.Kmeans运算步骤

  • 首先将总的数据集中随机挑选出个数据,作为将来个类对应的质心(相当于每个类对应的老大,将来每个类的所有点都将其包围)。
  • 从头开始顺序遍历每一个数据,假如该数据是前面选出来的质心,则跳过直接遍历下一个数据;否则用个质心分别和该数据计算它们之间的距离,选出与该数据距离最近的质心,将该数据加到选出的质心对应的类,并更新该类的质心。
  • 不断迭代执行第二个步骤,直至满足用户的需求。

3.Kmeans代码

(1)先导入所需要的库函数

from matplotlib import pyplot as plt
import random
import numpy as np
from math import sqrt

(2)初始化一组数据(坐标点)

x_list=[random.randint(1,100) for i in range(50)]
y_list=[random.randint(1,100) for i in range(50)]
xy_axis=[]
for i in range(len(x_list)):
    xy_axis.append([x_list[i],y_list[i]])
print(xy_axis)
xy_axis=np.array(xy_axis)

(3)先可视化一下当前的点的分布

x=xy_axis[:,0]
y=xy_axis[:,1]
plt.scatter(x,y)

Kmeans算法(附代码)

现在的数据是还没有经过分类的。

(4)定义距离函数

def eu_dis(x,y):
    return sqrt((x[0]-y[0])**2+(x[1]-y[1])**2)

(5)定义Kmeans算法

def Kmeans(xy_axis,k,time):
    n=len(xy_axis)
    center_list=[] # 存放质心的下标
    cluster_center=[] # 存放质心坐标
    cluster={} # 存放每个类包含的数据的坐标
    for i in range(k):
        cluster[i]=[]
        center_list.append(random.randint(0,n-1))
        cluster_center.append(xy_axis[center_list[i]])
    # 迭代time次
    for o in range(time):
        for i in range(k):
            cluster[i]=[]
        # 遍历每一个数据
        for i in range(n):
            if i not in center_list:
                min_dis=10000000
                pos=-1
                # 寻找最近的质心
                for j in range(k):
                    dis=eu_dis(cluster_center[j],xy_axis[i])
                    if dis<min_dis:
                        min_dis=dis
                        pos=j
                # 更新最近的质心的坐标
                cluster_center[pos][0]=(cluster_center[pos][0]+xy_axis[i][0])/2
                cluster_center[pos][1]=(cluster_center[pos][1]+xy_axis[i][1])/2
                # 将该数据加入到该质心所在的类中
                cluster[pos].append(i)
    for i in range(k):
        print(i,cluster[i])
    # 数据可视化
    x=xy_axis[:,0]
    y=xy_axis[:,1]
    plt.scatter([x[i] for i in cluster[0]],[y[j] for j in cluster[0]],c='b')
    plt.scatter([x[i] for i in cluster[1]],[y[j] for j in cluster[1]],c='r')
    plt.scatter([x[i] for i in cluster[2]],[y[j] for j in cluster[2]],c='y')
    plt.show()

(6)调用

Kmeans(xy_axis,3,10)

结果

Kmeans算法(附代码)

 这时可以看出数据已经分好类啦。文章来源地址https://www.toymoban.com/news/detail-452047.html

到了这里,关于Kmeans算法(附代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kmeans算法及简单案例

    选择聚类的个数k. 任意产生k个聚类,然后确定聚类中心,或者直接生成k个中心。 对每个点确定其聚类中心点。 再计算其聚类新中心。 重复以上步骤直到满足收敛要求。(通常就是确定的中心点不再改变。) Kmeans算法流程案例 将下列数据点用K-means方法进行聚类(这里使用

    2024年02月07日
    浏览(22)
  • 机器学习——Kmeans算法

    一、实验目的 学习 sklearn 模块中的 KMeans 算法 二、实验内容 学习 KMeans 算法,了解模型创建、使用模型及模型评价等操作 三、实验原理或流程 实验原理: K-means 算法是将样本聚类成 k 个簇 (cluster) ,具体算法描述如下 : 1 、随机选取 k 个聚类质心点 (cluster centroids) 为 2 、重复

    2024年02月11日
    浏览(31)
  • 机器学习---kMeans算法

    1. Load dataset 鸢(yuan1)尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据集,分为3类, 每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属 性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。

    2024年01月16日
    浏览(31)
  • Matlab实现Kmeans聚类算法

    kmeans聚类算法是一种迭代求解的聚类分析算法。其实现步骤如下: (1) 随机选取K个对象作为初始的聚类中心 (2) 计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。 (3) 聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚

    2024年02月02日
    浏览(26)
  • KMeans算法全面解析与应用案例

    本文深入探讨了KMeans聚类算法的核心原理、实际应用、优缺点以及在文本聚类中的特殊用途,为您在聚类分析和自然语言处理方面提供有价值的见解和指导。 关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦

    2024年02月05日
    浏览(27)
  • 使用Kmeans算法完成聚类任务

     聚类任务  聚类任务是一种无监督学习任务,其目的是将一组数据点划分成若干个类别或簇,使得同一个簇内的数据点之间的相似度尽可能高,而不同簇之间的相似度尽可能低。聚类算法可以帮助我们发现数据中的内在结构和模式,发现异常点和离群值,简化数据表示,以

    2024年02月15日
    浏览(27)
  • KMeans算法与GMM混合高斯聚类

    K-Means是GMM的特例(硬聚类,基于原型的聚类)。假设多元高斯分布的协方差为0,方差相同。   K-Means算法思想 对于给定的样本集,按照样本间的距离,将样本集划分为K个簇。 簇内的点尽量紧密连接,而簇间的距离尽量的大。 本质上是个组合优化问题, 类似于将N个球分配到

    2023年04月16日
    浏览(26)
  • 【完整代码】用HTML/CSS制作一个美观的个人简介网页

    用HTML/CSS制作一个美观的个人简介网页——学习周记1 HELLO!大家好,由于《用HTML/CSS制作一个美观的个人简介网页》这篇笔记有幸被很多伙伴关注,于是特意去找了之前写的完整代码,久等啦~ 这个页面是在自己刚接触前端代码时使用HBuilder所作,以下是建立的项目及文件↓↓

    2024年01月25日
    浏览(30)
  • Java常见算法_常见的查找算法和排序算法——简介及代码演示

            在本文中我将介绍Java中的常见算法,查找算法包括基本查找、二分查找、插值查找和分块查找。排序算法包括冒泡排序、选择排序、插入排序和快速排序 1.基本查找: 代码: 这是简单的基本查找,通过遍历数组来查看元素是否存在 运行结果: 基本查找小练习: 代

    2024年04月10日
    浏览(27)
  • 机器学习:基于Kmeans聚类算法对银行客户进行分类

    作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍 📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪 大家好,我

    2024年02月05日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包