聚类 kmeans | 机器学习

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

1、算法原理:

是一种无监督学习算法,其主要目的是将数据点分为k个簇,距离近的样本具有更高的相似度,距离近的划分为一个簇,一共划分k个簇,**让簇内距离小,簇间距离大。**距离是样本点到之心的距离。所有样本点到质心距离之和最小,就认为样本越相似。

  • 聚类和分类区别
    聚类 kmeans | 机器学习
    优化目标函数
    簇内平方和:
    聚类 kmeans | 机器学习
    其中,ci表示第 i​ 个簇的质心,即该簇中所有数据点的均值。SSE 的含义是所有簇内数据点与其质心的距离平方和,SSE 越小表示同一簇内的数据点越相似。
    SSE(簇内平方和)是用来评估聚类算法的好坏的一个指标。它表示每个簇内部数据点到该簇质心的距离平方和。对于 K-Means 算法,我们需要不断地调整簇的分配和质心的位置,以最小化 SSE 的值。

下面用一个具体的例子来解释如何计算 SSE 的值。假设我们有如下的二维数据集:
我们使用 K-Means 算法将这些数据点分为两个簇。经过多次迭代,最终得到的聚类结果如下:

其中,红色和蓝色点分别表示两个簇的质心。可以看出,第一个簇包含了 ( 1 , 0 ) (1, 0) (1,0) ( 2 , 0 ) (2, 0) (2,0) ( 2 , 1 ) (2, 1) (2,1) ( 1 , 2 ) (1, 2) (1,2) ( 2 , 2 ) (2, 2) (2,2) 这五个数据点,第二个簇包含了 ( 5 , 4 ) (5, 4) (5,4) ( 4 , 5 ) (4, 5) (4,5) ( 5 , 5 ) (5, 5) (5,5) 这三个数据点。因此,我们可以根据 SSE 的计算公式计算出每个簇的 SSE 值。
对于第一个簇,它的质心为 ( 1.6 , 1 ) (1.6, 1) (1.6,1)。我们可以计算出该簇内每个数据点到质心的距离平方和:

S S E 1 = ( 1 − 1.6 ) 2 + ( 0 − 1 ) 2 + ( 2 − 1.6 ) 2 + ( 1 − 1 ) 2 + ( 2 − 1.6 ) 2 = 11 SSE_1 = (1-1.6)^2 + (0-1)^2 + (2-1.6)^2 + (1-1)^2 + (2-1.6)^2 = 11 SSE1=(11.6)2+(01)2+(21.6)2+(11)2+(21.6)2=11

同理,对于第二个簇,它的质心为 ( 4.67 , 4.67 ) (4.67, 4.67) (4.67,4.67)。我们可以计算出该簇内每个数据点到质心的距离平方和:

S S E 2 = ( 5 − 4.67 ) 2 + ( 4 − 4.67 ) 2 + ( 5 − 4.67 ) 2 = 3.33 SSE_2 = (5-4.67)^2 + (4-4.67)^2 + (5-4.67)^2 = 3.33 SSE2=(54.67)2+(44.67)2+(54.67)2=3.33

因此,整个数据集的 SSE 值为 S S E 1 + S S E 2 = 11 + 3.33 = 14.33 SSE_1 + SSE_2 = 11 + 3.33 = 14.33 SSE1+SSE2=11+3.33=14.33。可以看出,当数据点被划分到不同的簇中时,SSE 的值会增大,而当同一簇内的数据点越相似时,SSE 的值会减小。因此,我们可以通过最小化 SSE 的值来优化聚类效果。

聚类 kmeans | 机器学习
质心 :簇中所有data的均值为质心
k:簇的个数

2、聚类流程

随机选取k个质心点,形成初始簇,定义代价函数(簇内平方和)开始计算每个样本点到初始质心的距离,定义迭代轮数或者(函数收敛,簇新不发生变化)再次形成新的簇,又会形成新的质心点,反复迭代。
质心:样本集所有data的均值
K:簇的个数
1、初始化聚类中心:随机选取k个样本点作为初始质心位置,计算每个质心点周边点到该点的距离,
2、根据距离分组:计算每个数据点与聚类中心之间的距离,把每个样本点分配到距离最近的初始质心上,形成最初的簇。
3、重新计算聚类中心:对每个组重新计算聚类中心,求解簇中所有样本点的均值点,作为新的质心
4、判断是否结束:把每个样本点重新分配到距离最近的质心上,再形成新的簇。(类中心的位置不断地被更新,直到聚类中心的位置不再发生变化或达到最大迭代次数。当两次迭代的聚类中心位置趋于相同时,其欧氏距离之和会逐渐减小。因此,如果两次迭代的聚类中心位置趋于稳定时,其欧氏距离之和会小于预设的阈值(如0.0001),可以认为本次迭代已经趋近于收敛,算法可以终止。)
5、输出:输出聚类结果,即每个数据点所属的组别。
聚类 kmeans | 机器学习

3、模型评估指标

轮廓系数
簇内差异小,簇外差异大,样本与自身所在簇内其他点的平均距离要永远小于,与簇外所有样本点的平均距离。
聚类 kmeans | 机器学习
聚类 kmeans | 机器学习

4、Kmeans 与knn区别

kmeans是无监督,没有样本输出,knn不需要训练,对测试集的点,只需要找到在训练集中最近的k个点,用最近的k个点来决定测试点的类别。
相似之处都是最近邻思想,找出和某一个点最近的点。

5、K-means算法有哪些优缺点?有哪些改进的模型?

1、优点:

(1)计算简单,聚类效果好
(2)算法可解释性较强,调参容易,仅仅是k

2、缺点:

(1)初始聚类中心的选择标准
k值不好把握,人工预先确定初始K值
改进方法:
对初始聚类中心的选择的优化。一句话概括为:选择批次距离尽可能远的K个点。具体选择步骤如下。

首先随机选择一个点作为第一个初始类簇中心点,然后选择距离该点最远的那个点作为第二个初始类簇中心点,然后再选择距离前两个点的最近距离最大的点作为第三个初始类簇的中心点,以此类推,直至选出K个初始类簇中心点。

(2)无法对噪音和异常点有效区分
如果噪声点在空间上离各个聚簇中心都比较远,那么将其单独分为一个簇可能是合理的。但是,通常情况下,噪声点是不相关的或者异常的,如果将其单独分配到某个簇中,可能会影响其他簇的正确性和一致性,从而导致聚类结果不准确。
(3)不是凸的数据集比较难收敛,
(4)计算量大

6、常见的聚类算法

1 DBSCN 基于密度的聚类算法,按密度聚类,低密度为噪声,簇的个数由k确定。

7、python实现

import numpy as np
import matplotlib.pyplot as plt

class KMeans:
    def __init__(self, n_clusters, max_iters=100, random_state=42):
        self.n_clusters = n_clusters
        self.max_iters = max_iters #迭代次数
        self.random_state = random_state

    def fit(self, X):
        # 随机初始化中心点
        random_state = np.random.RandomState(self.random_state)
        self.centers = X[random_state.choice(range(X.shape[0]), self.n_clusters, replace=False)]

        it = 0
        while it < self.max_iters:
            # 计算每个样本到各个聚类中心的欧氏距离
            dists = np.sqrt(((X[:, np.newaxis, :] - self.centers) ** 2).sum(axis=-1))

            # 找到距离最近的聚类中心
            labels = dists.argmin(axis=-1)

            new_centers = np.empty_like(self.centers)
            # 更新聚类中心
            for i in range(self.n_clusters):
                new_centers[i] = X[labels == i].mean(axis=0)

            # 判断聚类中心是否发生变化
            if np.allclose(new_centers, self.centers, rtol=1e-4, atol=1e-4):
                break

            self.centers = new_centers
            it += 1

    def predict(self, X):
        dists = np.sqrt(((X[:, np.newaxis, :] - self.centers) ** 2).sum(axis=-1))
        return dists.argmin(axis=-1)
# ```

# 使用示例:

# ```python
from sklearn.datasets import make_blobs

X, _ = make_blobs(n_samples=500, centers=4, cluster_std=0.60, random_state=0)

km = KMeans(n_clusters=4)
km.fit(X)

plt.scatter(X[:, 0], X[:, 1], c=km.predict(X))
plt.scatter(km.centers[:, 0], km.centers[:, 1], s=200, marker='x', c='red')
plt.show()
# ```

输出结果:
聚类 kmeans | 机器学习
参考链接:
聚类 刘建平文章来源地址https://www.toymoban.com/news/detail-406329.html

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

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

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

相关文章

  • 机器学习——Kmeans算法

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

    2024年02月11日
    浏览(41)
  • Matlab实现Kmeans聚类算法

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

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

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

    2024年02月15日
    浏览(40)
  • Python——Kmeans聚类算法、轮廓系数(算法理论、代码)

    目录 1 Kmeans模型理论 1.1 K-均值算法(K-means)算法概述 1.2 距离度量 1.3 K-means算法流程 1.4 K值的选择 1.5 K-means的优点 1.6 K-means的缺点 1.7 聚类的评价指标 2 代码解释 3 实操  3.1 构建聚类数目为3的KMeans模型 3.2 占比饼图 3.3 轮廓系数值 3.4 使用for循环计算聚类个数为2至9时的轮廓

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

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

    2023年04月16日
    浏览(40)
  • 聚类算法(KMeans)模型评估方法(SSE、SC)及案例

    一、概述         将相似的样本自动归到一个类别中,不同的相似度计算方法,会得到不同的聚类结果,常用欧式距离法;聚类算法的目的是在没有先验知识的情况下,自动发现数据集中的内在结构和模式。是 无监督学习 算法 二、分类 根据聚类 颗粒度 :细聚类、粗聚

    2024年01月20日
    浏览(42)
  • 机器学习15-1(无监督学习算法)

    此前,无论是回归问题还是分类问题,本质上其实都属于有监督学习范畴:即算法的学习是在标签的监督下进行规律学习,也就是学习那些能够对标签分类或者数值预测起作用的规律 而无监督学习,则是在没有标签的数据集中进行规律挖掘,既然没有标签,自然也就没有了规

    2024年02月09日
    浏览(76)
  • 【机器学习】第四节:监督学习算法对比评估

      作者 🕵️‍♂️:让机器理解语言か 专栏 🎇:机器学习sklearn 描述 🎨:本专栏主要分享博主学习机器学习的笔记和一些心得体会。 寄语 💓:🐾没有白走的路,每一步都算数!🐾          监督学习(英语:Supervised learning)是机器学习中最为常见、应用最为广泛的

    2024年02月02日
    浏览(52)
  • 【机器学习】机器学习上机作业聚类算法

    自编代码实现C均值聚类和FCM聚类,在“IRIS数据集(鸢尾花数据集)”上进行实验,验证所编代码是否正确,并计算准确率。 Iris鸢尾花数|据集:包含花萼长度、花萼宽度、花瓣长度、花瓣宽度四个属性,用于预测鸢尾花种类,标签0、1、2分别表示山鸢尾、变色鸢尾、维吉尼亚鸢

    2024年01月22日
    浏览(44)
  • 机器学习-无监督算法之降维

    降维:将训练数据中的样本从高维空间转换到低维空间,降维是对原始数据线性变换实现的。 为什么要降维?高维计算难,泛化能力差,防止维数灾难 优点:减少冗余特征,方便数据可视化,减少内存。 缺点:可能丢失数据,需要确定保留多少主成分 把一个矩阵拆成三个,

    2024年02月07日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包