栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python机器学习之K-means

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python机器学习之K-means

Python机器学习之K-means
    • K-means原理
      • K-means步骤如下:
    • 性能评估
    • 案例分析
      • 结果展示
    • 优缺点

K-means原理

K-means算法解决的问题是:在不知道如何分类的情况下,让程序根据距离的远近,把N个对象划分为k类(局部最优)。它是无监督算法中较常见的一种,原理比较简单易懂。本质就是通过循环,迭代类的中心点,计算每个对象到中心点的距离,根据距离重新分类。

K-means步骤如下:

1.指定聚类的个数k;
2.随机选定k个对象作为聚类中心;
3.计算每个对象到这k个聚类中心的距离,并将其进行分类:分到距离最近的聚类中心;
4.重新计算每个聚类的中心(求均值),得到新的聚类中心;
5.重复3和4,直到满足迭代终止条件;
终止条件一般为:①迭代次数达到上限;②聚类中心点不发生变化或没有对象被分配给新的类;③误差平方和局部最小。
K-means算法使用:
1.导包from sklearn.cluster import KMeans
2.sklearn.cluster.KMeans(n_clusters=8,init=‘k-means++’),其中
n_clusters是开始的聚类中心数量,init是初始化方法,默认为’k-means++’

性能评估

此处介绍的是轮廓系数法:
S = b − a m a x ( a , b ) , − 1 ≤ S ≤ 1 Large {S} = frac{b-a}{max(a,b)},-1 le S le 1 S=max(a,b)b−a​,−1≤S≤1
a = x 与类内其他对象聚类的和 x 所在类的对象数 − 1 Large{a} = frac{x与类内其他对象聚类的和}{x所在类的对象数-1} a=x所在类的对象数−1x与类内其他对象聚类的和​
b = m i n x 与其他某一个类内所有对象距离和 该类对象数 large{b} = min frac {x与其他某一个类内所有对象距离和}{该类对象数} b=min该类对象数x与其他某一个类内所有对象距离和​
S越接近1,说明包含x的类越紧凑且离其他类较远,聚类效果较好;S小于0时,说明x距离其他类的对象比距离自己所在类的对象更近,聚类效果差。
因而可以使用X中所有对象的轮廓系数均值来评估聚类好坏。

案例分析

此处通过对sklearn自带的数据集鸢尾花进行分类,简单熟悉一下K-means算法的流程。

代码如下:

from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.metrics import silhouette_score
#导入数据
iris = load_iris().data
#建立聚类
estimator = KMeans(n_clusters=3)#此处取k为3
estimator.fit(iris)
pred = estimator.predict(iris)
#绘制聚类结果
x_label = iris[:,1]
y_label = iris[:,2]
plt.scatter(x_label,y_label,c=pred)
plt.show()
#模型评估
S = silhouette_score(iris,pred)
print(S)
结果展示


最终的S=0.5528190123564091
因为sklearn自带的鸢尾花数据集较小,最终这个S相对来说还是可以接受的。

优缺点

优点:
1.采用迭代式算法,直观易懂且实用
2.可解释性较强

缺点:
1.k的取值难以确定
2.容易收敛到局部最优解
3.对孤立点敏感,如数据集存在异常突出点,会影响聚类结果
4.不适合差别较小的数据

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1026966.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号