聚类分析(K-means) python代码实现

本文介绍了K-means聚类分析的基本原理和在Python中的实现,通过实例展示了如何对二维数据进行聚类,并提供了详细的代码过程。强调了相似性度量的选择和中心点选取的重要性。
摘要由CSDN通过智能技术生成

聚类分析(K-means) python代码实现

​ 今天在课程上再一次系统接触到了聚类分析,当然,以前在使用spss时也解决过此类问题(这还要追溯到18年),但不得不说,软件的便利化使得我对于原理又疏忽了很多。所以,空想不如实干,今天抽出一些时间用python对聚类分析的最基础的一种(K-means)进行了实现,下面,我将就原理、案例及代码进行分析。

​ 首先,提到聚类分析,我们会想到:群体划分、客户分类、基因聚类等应用,它的原理简单来说归纳为一句话“物以类聚,人以群分”,确实,我们在运用此方法时,所需做到的最终结果就是将具有相同特征的归为一类,不同则分组。

​ 那么,作为一种无监督学习方法(无标签、数据驱动),它不需要类别标柱,我们可以直接从数据中探索数据间的结构联系。在解决此类问题时,我们会有基于分割和基于层次的两类方法,再细化来说,可以有KMeans、Sequential Leader、Density Based Methods等方法。对于K-means方法来说,可以说是聚类分析中最经典的算法,同时运用也最为普遍。

​ 其中,我们在利用K-means解决聚类问题时,需要明确最重要的两点

  • 相似性度量(可分为数值型、二值属性和包含分类属性数值属性的混合属性三种情况来进行分析),

    • 对于数值型,可使用距离度量(欧氏距离、曼哈顿距离);
    • 对于二值属性,可利用冗余矩阵来进行不变相似性的测量**(对于不对称的二值变量,如果取值1比0重要,那么这样的二值变量就只有一种状态。)**
    • 对于混合属性,若属性f为二元属性或标称属性,二者相同距离为0,不同距离为1;若属性f为序数型属性,那么d(p,q)=|p-q|/(n-1);若属性f为数值型属性,那么d(p,q)=distance(p,q)(注意距离和相似性的倒数关系)
  • 对于中心点的选取,我们领域专家知识,这也是此类方法的缺点之一。

    整个算法的详细步骤呢,我从课程ppt中截取了一张图,供大家参考:
    (所有权归老师)
    在这里插入图片描述

以上就是我对于原理的简要阐述,那么回到案例

​ 对表中二维数据使用k-means算法进行聚类,划分为2个簇,假设初始簇中心选择P7(4,5)和P10(5,5)。

P1 P2 P3 P4 P5 P6 P7 P8 P9 P10
x 3 3 7 4 3 8 4 4 7 5
y 4 6 3 7 8 5 5 1 4 5

​ 针对上述这个题目呢,我的编程思路如下所述:

  1. 初始化数据,并进行初始图像的绘制(未分类的散点图);
  2. 进行K-means步骤的编程(其中距离度量采用欧氏距离)
  3. 更新图像,进行两次聚类后结果已趋于不变

​ 下面就是整体的代码实现过程(由于时间紧迫,没有采用线程进行动态模拟,知识利用循环进行了迭代):

import numpy as np
import matplotlib.pyplot as plt
import math

# 数据初始化
train = np.array([[3, 4], [3, 6], [7, 3], [4, 7], [3, 8], [8, 5], [4, 5], [4, 1], [7, 4], [5, 5]])

# 初始簇中心选择(4,5),(5,5)
center = np.array([[4, 5], [5, 5]], dtype=
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值