K-means

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


一、K-means

K-meas算法属于无监督学习算法,适用于没有标签的数据集,属于聚类算法。聚类就是把数据对象划分为多个组或簇的过程,使得簇内对象相似度很高,簇间相似度很低。K-means属于聚类算法的一种,除了K-means,还有K-中心点算法,基于层次的方法等等。

算法思想如下:
给定一个有n个数据对象的集合,k-means方法会构建数据的k个分组,其中每个分组表示一个簇。
对于给定的分组数k,算法会首先给出一个初始的分组方法,然后通过不断迭代的方法改变分组,使得同一组内的距离越来越近,不同组间的距离越来越远。

二、算法步骤

k-means的算法步骤如下:
(1)在n个数据对象的集合中,随机的选择k个点,分别做为k个簇的中心。
(2)分别计算其余点和k个簇中心点的距离,离哪一个簇中心点最近,就将其划分到对应的簇。
(3)对于每个簇,重新计算簇中心点。
(4)不断循环下去,直至达到算法终止条件。

其中的关键点如下:
初始质心的选择,一般为随机选择。

距离度量方式采取欧氏距离
K-means,数据挖掘,kmeans,机器学习,支持向量机

如何重新计算簇中心点,计算该簇内所有数据每一个维度的算术平均值
K-means,数据挖掘,kmeans,机器学习,支持向量机

聚类的目标函数依赖于点到簇的质心的邻近性,使用误差的平方和(SSE)作为度量聚类质量的目标函数。

K-means,数据挖掘,kmeans,机器学习,支持向量机
算法的停止迭代条件:
(1)设定迭代次数。
(2)簇类中心不再变化。
(3)前后两次聚类结果的SSE变化很小。


三、代码实现

数据集:6个离散点,具体坐标为:data = [[1,2],[1,4],[3,1],[3,5],[5,2],[5,4]]
将其可视化在二维平面中,利用matplolib实现,实现结果如下:
K-means,数据挖掘,kmeans,机器学习,支持向量机
简单起见,设定K值为2,即将其分为两个簇。
初始的簇中心点分别为[3,1][3,5]
算法的停止迭代条件为簇中心点不再变化,根据上面的算法步骤写出对应的代码如下:

import matplotlib.pyplot as plt

#计算欧式距离
def Euclidean_distance(x,y):
    distance = 0
    for i in range(0,len(x)):
        distance = distance + (x[i] - y[i]) ** 2
    return distance
#数据集:
data = [[1,2],[1,4],[3,1],[3,5],[5,2],[5,4]]
#初始K值为2
k = 2
#初始化两个簇cluster_1,cluster_2
cluster_1 = []
cluster_2 = []
#初始化簇类中心
cluster_1_point = [3,1]
cluster_2_point = [3,5]

pre_cluster_1_point = [0,0]
pre_cluster_2_point = [0,0]
distance_1 = 0
distance_2 = 0

plt.scatter([1, 3, 5], [2, 1, 2], c = 'r')
plt.scatter([1, 3, 5], [4, 5, 4], c = 'b')
plt.axis([0, 6, 0, 10])
plt.show()
#定义算法的迭代停止条件是簇类中心不再变化
while True:
    for point in data:
        x = point[0]
        y = point[1]
        distance_1 = Euclidean_distance([x,y],cluster_1_point)
        distance_2 = Euclidean_distance([x,y],cluster_2_point)
        if distance_1 <= distance_2:
            cluster_1.append((x,y))
        else:
            cluster_2.append((x,y))
    point_x = 0
    point_y = 0
    #更新第一个簇的簇中心点
    for point in cluster_1:
        point_x = point_x + point[0]
        point_y = point_y + point[1]
    pre_cluster_1_point = cluster_1_point
    cluster_1_point = [point_x / len(cluster_1),point_y / len(cluster_1)]

    point_x = 0
    point_y = 0
    #更新第二个簇的簇中心点
    for point in cluster_2:
        point_x = point_x + point[0]
        point_y = point_y + point[1]
    pre_cluster_2_point = cluster_2_point
    cluster_2_point = [point_x / len(cluster_2), point_y / len(cluster_2)]


    if pre_cluster_1_point == cluster_1_point and pre_cluster_2_point == cluster_2_point:
        break

print(set(cluster_1))
print(set(cluster_2))

得到的两个簇分别为
K-means,数据挖掘,kmeans,机器学习,支持向量机
利用matplotlib可视化,将两个簇可视化出来,结果如下
K-means,数据挖掘,kmeans,机器学习,支持向量机文章来源地址https://www.toymoban.com/news/detail-531872.html

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

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

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

相关文章

  • 数据挖掘与机器学习:Apripori算法

    目录 第一关:候选生成  任务描述: 相关知识: 一、Apripori算法候选生成: 二、Apripori算法候选生成代码实现: 编程要求: 测试说明: 第二关:候选剪枝 任务描述: 相关知识: Apripori算法候选剪枝: Apripori算法候选剪枝代码实现: 编程要求: 测试说明: 第三关:基于遍

    2024年02月07日
    浏览(71)
  • 【Python】数据挖掘与机器学习(一)

    大家好 我是寸铁👊 总结了一篇【Python】数据挖掘与机器学习(一)sparkles: 喜欢的小伙伴可以点点关注 💝 问题描述 请从一份数据中预测鲍鱼的年龄,数据集在abalone.cvs中,数据集一共有4177 个样本,每个样本有9个特征。其中rings为鲍鱼环数,鲍鱼每一年长一环,类似树轮,是

    2024年04月12日
    浏览(48)
  • Python 数据挖掘与机器学习教程

    详情点击链接:Python 数据挖掘与机器学习 一: Python编程 Python编程入门 1、Python环境搭建( 下载、安装与版本选择)。 2、如何选择Python编辑器?(IDLE、Notepad++、PyCharm、Jupyter…) 3、Python基础(数据类型和变量、字符串和编码、list和tuple、条件判断、循环、函数的定义与调

    2024年02月16日
    浏览(50)
  • 机器学习——数据仓库与数据挖掘复习(选择题、判断题)

    1. 以下不是分类问题的是(  B )。 A. 用户流失模型 B. 身高和体重关系 C. 信用评分 D. 营销响应 2. 对于回归分析,下列说法错误的是( D ) A. 在回归分析中,变量间的关系若是非确定关系,那么因变量不能由自变量唯一确定 B. 线性相关系数可以是正的,也可以是负的 C. 回归

    2024年02月06日
    浏览(54)
  • 机器学习和数据挖掘01- lasso regularization

    Lasso正则化是一种线性回归中的正则化技术,旨在减少模型的复杂性并防止过拟合。Lasso(Least Absolute Shrinkage and Selection Operator)通过在损失函数中添加正则项,促使模型的系数变得稀疏,即某些系数会被压缩到零,从而实现特征选择。 在Lasso正则化中,我们引入了一个惩罚项

    2024年02月09日
    浏览(45)
  • 机器学习算法在数据挖掘中的应用

    在数据挖掘的实践中,各种机器学习算法都扮演着重要的角色,它们能够从数据中学习规律和模式,并用于预测、分类、聚类等任务。以下是几种常见的机器学习算法以及它们在数据挖掘任务中的应用场景和优缺点。 1. 决策树(Decision Trees):    - 应用场景:决策树广泛应

    2024年03月17日
    浏览(48)
  • 大数据和智能数据应用架构系列教程之:大数据挖掘与机器学习

    作者:禅与计算机程序设计艺术 随着互联网的普及、移动互联网的爆炸性增长以及电子商务的兴起,传统的基于数据库的数据分析已不能满足当前信息社会对海量数据的处理需求。如何有效地进行大数据分析已经成为众多行业面临的共同难题。而数据挖掘和机器学习(Machi

    2024年02月08日
    浏览(48)
  • 机器学习和数据挖掘04-PowerTransformer与 MinMaxScaler

    PowerTransformer 是用于对数据进行幂变换(也称为Box-Cox变换)的预处理工具。幂变换可以使数据更接近正态分布,这有助于某些机器学习算法的性能提升。它支持两种常用的幂变换:Yeo-Johnson变换和Box-Cox变换。 MinMaxScaler 是用于将数据进行最小-最大缩放的预处理工具。它将数据

    2024年02月10日
    浏览(49)
  • 机器学习和数据挖掘03-模型性能评估指标

    概念:模型正确预测的样本数量与总样本数量的比例。 公式:Accuracy = (TP + TN) / (TP + TN + FP + FN) TP (True Positives):正确预测为正例的样本数。即模型正确地将正例判定为正例。 TN (True Negatives):正确预测为负例的样本数。即模型正确地将负例判定为负例。 FP (False Positives):错误

    2024年02月10日
    浏览(150)
  • 机器学习和数据挖掘02-Gaussian Naive Bayes

    贝叶斯定理: 贝叶斯定理是概率中的基本定理,描述了如何根据更多证据或信息更新假设的概率。在分类的上下文中,它用于计算给定特征集的类别的后验概率。 特征独立性假设: 高斯朴素贝叶斯中的“朴素”假设是,给定类别标签,特征之间是相互独立的。这个简化假设

    2024年02月10日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包