Python实现简单k-means聚类

这篇具有很好参考价值的文章主要介绍了Python实现简单k-means聚类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.导入原始数据集

 2.首次计算中心点

3.进行迭代循环,不断优化样本中心点和聚类结果

4.聚类可视化

通过手动书写k-means聚类算法的逻辑实现聚类(而非使用python内置的sklearn)

不了解k-means聚类算法的话可以先去了解以下这种算法的原理,下面就直接进入正题啦~


1.导入原始数据集

首先我们导入原始样本点,这里我们通过execl表记录原始数据,原始数据为假设为某班学术的平时成绩 和 期末成绩。原始数据如下图所示

Python实现简单k-means聚类Python实现简单k-means聚类

import pandas as pd
import random
import math
import matplotlib.pyplot as plt

documentObject = pd.read_excel(r"C:\Users\DELL\Desktop\proData.xlsx")
documentLst = documentObject.values.tolist()
print(documentLst)

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
for i in range(len(documentLst)):
    x = documentLst[i][0]
    y = documentLst[i][1]
    plt.scatter(x, y, s = 50)
    plt.xlabel('平时成绩')
    plt.ylabel('期末成绩')
plt.show()

除了导入原始样本数据以外,原始数据在坐标系中的散点图如下

Python实现简单k-means聚类

 2.首次计算中心点

我们设置k值,以及最大迭代次数等初始变量

首次的样本中心点通过randint函数在所有样本点中随机选取,由于最后通过迭代聚类算法总能找到合适的样本中心点,所以首次的样本中心点选取可以随机选取

dataLength = len(documentLst)
#k为聚类中心点个数
k = 3
#iteraions为起始的迭代量
iterations = 0
#maxIteraions表示最大迭代次数
maxIteraions = 400
#centre用来保存中心点的坐标,随机出k个样本数据作为中心点
centre = []
for i in range(k):
    centre.append([0]*2)
for i in range(k):
    tempIndex = random.randint(0, dataLength - 1)
    centre[i][0] = documentLst[tempIndex][0]
    centre[i][1] = documentLst[tempIndex][1]
print(centre)
#disRecord用于记录每一个样本点里中心点的距离
disRecord = []
for i in range(dataLength):
    disRecord.append([0]*3)
#定义distance函数计算两点间距离
def distance(samples, centres):
    return math.sqrt((samples[0] - centres[0])**2 + (samples[1] - centres[1])**2)

finalClusters = []
for i in range(k):
    finalClusters.append([])

3.进行迭代循环,不断优化样本中心点和聚类结果

每一次迭代后新的样本中心点的坐标值取自于某一个类的所有样本点的坐标平均值

这里简单地将迭代终止条件为——最大迭代次数(这里只是为了简单所以才选择了400次迭代作为终止条件,并不是一定要以此为标准!),最后的聚类结果随着迭代次数增加而更加准确,也可以设置其他阈值为迭代停止条件!

#进行k-means主体
while iterations < maxIteraions:
    #用于记录新的k个样本中心点的坐标
    new_centres = []
    for i in range(k):
        new_centres.append([0]*2)
    # cluster用于记录聚类结果[[], [], []]
    clusters = []
    for i in range(k):
        clusters.append([])

    for i in range(dataLength):
        for j in range(k):
            disRecord[i][j] = distance(documentLst[i], centre[j])
    #将某一个样本点的坐标添加至cluster列表中
    for i in range(dataLength):
        index = disRecord[i].index(min(disRecord[i]))
        clusters[index].append(i)
        new_centres[index][0] += documentLst[i][0]
        new_centres[index][1] += documentLst[i][1]
    #创建用于迭代的中心点数组
    temp_centre = []
    for i in range(k):
        temp_centre.append([0]*2)
    for i in range(k):
        temp_centre[i][0] = (new_centres[i][0])/len(clusters[i])
        temp_centre[i][1] = (new_centres[i][1])/len(clusters[i])

    if(temp_centre == centre):
        break;
    else:
        centre = temp_centre
        iterations += 1
        finalClusters = clusters
print("聚类中心为:", centre)
print("分类情况为:", finalClusters)

4.聚类可视化

通过为不同聚类的样本点添加不同的颜色,从而能直观地在散点图中看到聚类结果

colors = ['red', 'yellow', 'aqua']
for i, j in zip(range(k), colors):
    for index in finalClusters[i]:
        plt.scatter(x = documentLst[index][0], y = documentLst[index][1], c=j)
plt.xlabel('平时成绩')
plt.ylabel('期末成绩')
plt.show()

Python实现简单k-means聚类

 文章来源地址https://www.toymoban.com/news/detail-436893.html

到了这里,关于Python实现简单k-means聚类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • k-means聚类算法 心得分享(含python实现代码)

    目录 1.K-means聚类算法 1.1 引言: 1.2 K-Means 算法的基本思想 1.3 K-Means 算法的优缺点: 1.4 K-Means 算法的应用: 2.K-means聚类算法的实现具体步骤 2.1初始化聚类中心 2.2计算每个数据点到聚类中心的距离 2.3确定每个数据点所属聚类簇 2.4更新聚类中心 2.5循环执行步骤2-4,直到达到最

    2024年02月02日
    浏览(35)
  • K-Means聚类算法及其python实现(已附上代码至本博客)

    觉得有用的,一腚要先点赞后收藏!!!气死人了,40多个收藏0点赞!! 对于 n代表了x有n维,x上标j表示第j维的特征,下标i表示该向量是第i个样本 簇中心坐标为:(当然,这也是重新计算簇中心坐标的方法!!) 向量 u i = ( u i ( 1 ) , u i ( 2 ) , ⋅ ⋅ ⋅ , u i ( j ) , ⋅ ⋅ ⋅ , u i ( n )

    2024年02月08日
    浏览(27)
  • python 实现k-means聚类算法 银行客户分组画像实战(超详细,附源码)

    想要数据集请点赞关注收藏后评论区留言留下QQ邮箱 k-means具体是什么这里就不再赘述,详情可以参见我这篇博客 k-means 问题描述:银行对客户信息进行采集,获得了200位客户的数据,客户特征包括以下四个1:社保号码 2:姓名  3:年龄 4:存款数量 使用k-means算法对客户进行

    2024年02月11日
    浏览(44)
  • (python实现)一篇文章教会你k-means聚类算法(包括最优聚类数目k的确定)

    Kmeans算法中,K值所决定的是在该聚类算法中,所要分配聚类的簇的多少。Kmeans算法对初始值是⽐较敏感的,对于同样的k值,选取的点不同,会影响算法的聚类效果和迭代的次数。本文通过计算原始数据中的:手肘法、轮廓系数、CH值和DB值,四种指标来衡量K-means的最佳聚类数

    2024年02月05日
    浏览(48)
  • K-means++聚类算法(matlab实现)

    K-means++算法:K-means++算法是K-means算法的改进版,其在选择初始质心时采用了一种更加聪明的方法,能够有效地避免局部最优解。具体来说,K-means++算法的初始质心是根据距离数据点最远的原则来选择的,这样可以保证初始质心的分布更加广泛,从而使得算法更容易找到全局最

    2024年02月07日
    浏览(83)
  • K-means聚类算法原理及实现

    1.1概念 聚类分析,也称为分割分析或分类分析,可将样本数据分成一个个组(即簇)。同一簇中的对象是相似的,不同簇中的对象则明显不同。 Statistics and Machine Learning Toolbox™ 提供了几种聚类方法和相似性度量(也称为距离度量)来创建簇。此外,簇计算可以按照不同的计

    2024年03月18日
    浏览(33)
  • python机器学习——聚类评估方法 & K-Means聚类 & 神经网络模型基础

    1、随机设置K个特征空间内的点作为初始的聚类中心 2、对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别 3、接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值) 4、如果计算得出的新中心点与原中心点一样,那么

    2024年02月12日
    浏览(31)
  • K-means聚类算法原理、步骤、评价指标和实现

    1、聚类 聚类与分类不同,聚类分析分通过分析大量含有一定规律但杂乱数据,得到数据间内在的逻辑,将杂乱的数据按照所得的数据规律划分成不同的种类。K-measn、DBSCAN和层次是当前广泛使用的三种聚类方法。以下对三种方法进行分析,选择适合的聚类方法。 方法 K-means

    2024年02月07日
    浏览(44)
  • 计算机视觉:聚类算法(K-Means)实现图像分割

    什么是K-means聚类? K-means聚类是一种无监督学习算法,用于将一组数据划分为K个不同的类别或簇。它基于数据点之间的相似性度量,将数据点分配到最接近的聚类中心。K-means算法的目标是最小化数据点与其所属聚类中心之间的平方距离和。 K-means聚类在图像分割中的应用 在

    2024年02月02日
    浏览(26)
  • 【机器学习实战】Python基于K均值K-means进行聚类(九)

    1.1 K-means的介绍 K均值( K-means )是一种基于距离度量的聚类算法,其主要思想是将数据集划分为k个不同的簇,每个簇代表一个相似度较高的数据组。该算法通过迭代优化来最小化所有数据点与其所属簇的欧氏距离之和,从而找到最佳的簇划分。 需要区分一下,K-means和KNN是两

    2024年02月06日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包