机器学习之K-mean算法理解及实现

K-mean算法及实现

目录

  • K-mean算法及实现
    • [1 K-mean算法理解](#1 K-mean算法理解)
      • [1.1 概念](#1.1 概念)
      • [1.2 基本概念](#1.2 基本概念)
      • [1.3 算法流程](#1.3 算法流程)
      • [1.4 聚类效果评价](#1.4 聚类效果评价)
      • [1.5 算法特点](#1.5 算法特点)
      • [1.6 限制](#1.6 限制)
    • [2 函数理解](#2 函数理解)
      • [2.1 函数导入](#2.1 函数导入)
      • [2.2 函数的参数和属性](#2.2 函数的参数和属性)
        • [2.2.1 参数](#2.2.1 参数)
        • [2.2.2 属性](#2.2.2 属性)
    • [3 实际测试](#3 实际测试)
      • [3.1 数据理解](#3.1 数据理解)
      • [3.2 代码测试](#3.2 代码测试)

1 K-mean算法理解


1.1 概念

K-means算法是一种基于距离的聚类算法,其核心思想是将数据集中的点分为K个簇(Cluster),每个簇内的点尽可能相似,而不同簇之间的点尽可能不同。K-means算法的目标是最小化簇内的平方误差,即最小化每个点到其簇中心的距离的平方和。

1.2 基本概念

  • 簇(Cluster)
    簇是一组数据点的集合,这些点在某种度量标准下彼此相似或接近。
  • 聚类(Clustering)
    聚类是将数据集分成若干个簇的过程,目的是使得同一个簇内的数据点尽可能相似,而不同簇的数据点尽可能不同。
  • 聚类中心(Centroid)
    聚类中心是代表一个簇的数据点,通常是该簇内所有数据点的均值位置。

1.3 算法流程

  1. 初始化:随机选择K个数据点作为初始的聚类中心。
  2. 分配:对于每个数据点,计算它与各个聚类中心的距离,并将其分配到最近的聚类中心所代表的簇。
  3. 更新:重新计算每个簇的中心点,通常是取簇内所有点的均值作为新的聚类中心。
  4. 迭代:重复分配和更新的步骤,直到满足停止条件,如聚类中心的变化小于某个阈值或达到预设的迭代次数。

1.4 聚类效果评价

1.5 算法特点

  • 简单性:算法易于理解和实现。
  • 自适应性:不需要预先指定簇的结构或形状。
  • 无监督学习:不需要训练数据或标签,直接对数据进行处理。
  • 迭代优化:通过迭代过程不断优化聚类结果。

1.6 限制

  • K值的选择:需要预先指定K值,而在实际应用中K值的选取并不总是直观的。
  • 对初始中心敏感:算法结果可能受到初始聚类中心选择的影响。
  • 假设簇形状:假设簇是凸形的,可能不适用于非球形簇的数据。
  • 噪声和异常值敏感:噪声和异常值可能会对聚类结果产生较大影响。

2 函数理解


2.1 函数导入

python 复制代码
from sklearn.cluster import KMeans

2.2 函数的参数和属性

2.2.1 参数
  • n_clusters : int, default=8,类中心的个数,就是要聚成几类,默认是8个。
  • init :参数初始化的方法,默认k-means++
    (1)'k-means++':用一种特殊的方法选定初始质心从而能加速迭代过程的收敛.
    (2)'random':随机从训练数据中选取初始质心。
    (3)如果传递的是一个ndarray,则应该形如(n_clusters,n_features)并给出初始质心
  • n_init : init:整形,缺省值=10,用不同的质心初始化值运行算法的次数,最终解是在inertia意义下选出的最优结果。
  • max_iter : int, default=300,执行一次k-means算法所进行的最大迭代数。
  • Tol:与 inertia结合来确定收敛条件。
  • verbose:整形,默认值=0
  • random state :随机状态←
  • copy_x:布尔型,默认值=True
    当我们precomputing distances时,将数据中心化会得到更准确的结果。如果把此参数值设为True,则原始数据不会被改变。如果是False,则会直接在原始数据上做修改并在函数返回值时将其还原。但是在计算过程中由于有对数据均值的加减运算,所以数据返回后,原始数据和计算前可能会有细小差别。
  • algorith'm:算法auto、full、elkan,默认为'auto'
    full:采用经典的EM算法↓
    elkan:通过使用三角不等式从而更有效,但不支持稀疏数据
    auto:数据稀疏选择full 模式,数据稠密选择elkan 模式
2.2.2 属性
  • cluster_centers_:一个 n-clusters*n_features的矩阵,表示聚类中心的坐标
  • labels_:每个点的分类标签
  • inertia_: float形
    每个点到其簇的质心的距离之和。
  • n_iter_:int迭代次数。

3 实际测试


3.1 数据理解

对酒进行分类,除第一列都是特征数据,结果类别根据K-mean算法自动识别分组

3.2 代码测试

代码展示:

python 复制代码
from sklearn.cluster import KMeans
import pandas as pd
from sklearn import metrics

beer = pd.read_table('data.txt',sep = ' ',encoding='utf-8',engine='python')
x = beer[['calories','sodium','alcohol','cost']]

scores = []
# 交叉验证选最优
for i in range(2,10):
    labels = KMeans(n_clusters=i).fit(x).labels_
    score = metrics.silhouette_score(x,labels)
    scores.append(score)
print(scores)
import matplotlib.pyplot as plt

plt.plot(list(range(2,10)),scores)
plt.xlabel('Number of Clusters Initialized')
plt.xlabel('Sihouette Score')
plt.show()
km = KMeans(n_clusters=2).fit(x)
beer['cluster'] = km.labels_
labels = km.labels_
score = metrics.silhouette_score(x,beer.cluster)
print(labels)
print(score)

运行结果:

调试labels


相关推荐
Nil_cxc38 分钟前
机器学习周报-GNN模型学习
人工智能·学习·机器学习
爱思德学术-IAAST40 分钟前
CCF推荐-C类:ACM主办,录用率23.8%,计算机学术会议截稿信息2条
人工智能·网络安全·ccf推荐会议
QQ27437851091 小时前
django基于Python对西安市旅游景点的分析与研究
java·后端·python·django
打不了嗝 ᥬ᭄1 小时前
P3884 [JLOI2009] 二叉树问题
数据结构·算法·蓝桥杯
AI明说1 小时前
CancerGPT :基于大语言模型的罕见癌症药物对协同作用少样本预测研究
人工智能·语言模型·自然语言处理·大模型·rag
说私域2 小时前
信息时代的消费者行为变迁与应对策略:基于链动2+1模式、AI智能名片及S2B2C商城小程序的分析
大数据·人工智能·小程序
小团团02 小时前
Python编程中的两种主要的编程模式
开发语言·python
蹦蹦跳跳真可爱5892 小时前
Python----Python高级(函数基础,形参和实参,参数传递,全局变量和局部变量,匿名函数,递归函数,eval()函数,LEGB规则)
开发语言·python
cooldream20092 小时前
推理规则库的构建与应用
人工智能·知识图谱
shichaog3 小时前
第四章 神经网络声码器
人工智能·深度学习·神经网络·语音合成·声码器