博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
k均值聚类算法考试例题_K-means 聚类算法
阅读量:4569 次
发布时间:2019-06-08

本文共 1624 字,大约阅读时间需要 5 分钟。

39a4033cd88e5431d69329420a8fcd25.png

1. K-means 聚类算法的基本原理

Kmeans是无监督学习的代表,没有所谓的Y。主要目的是分类,分类的依据就是样本之间的距离。比如要分为K类。步骤是:

  1. 随机选取K个点。
  2. 计算每个点到K个质心的距离,分成K个簇。
  3. 计算K个簇样本的平均值作新的质心
  4. 循环2、3
  5. 位置不变,距离完成

2. 关于聚类的距离

Kmeans的基本原理是计算距离。一般有三种距离可选:

曼哈度距离:

c023bfab8c74a6cbcde33a780e864842.png
曼哈度距离

欧式距离:

7f4dc3f9b5b70b66f4842da4824012e1.png
欧式距离

余弦距离:

0cbf5b5e566ae58209bb3f616a07dbb8.png
余弦距离

3. Inertia的概念

每个簇内到其质心的距离相加,叫inertia。各个簇的inertia相加的和越小,即簇内越相似。(但是k越大inertia越小,追求k越大对应用无益处)

4. 在sklearn中用实现代码

导入模拟数据,并绘图查看其分布

#导入数据from sklearn.datasets import make_blobsimport matplotlib.pyplot as pltX, y = make_blobs(n_samples=500, # 500个样本                 n_features=2, # 每个样本2个特征                 centers=4, # 4个中心                 random_state=1 #控制随机性                 )#画出对应的图像位置color = ['red', 'pink','orange','gray']fig, axi1=plt.subplots(1)for i in range(4):    axi1.scatter(X[y==i, 0], X[y==i,1],               marker='o',               s=8,               c=color[i]               )plt.show()

fd1590f044c84fafbc517321f6323fb9.png

使用Sklearn中的K-means进行建模:

from sklearn.cluster import KMeansn_clusters=4  #划分类别的数量cluster = KMeans(n_clusters=n_clusters,random_state=0).fit(X)

利用训练的模型进行预测:

y_pred=cluster.predict(X)y_pred.shape#数字比较多,只查看其形状(500,)

查看质心及Inertia

centroid=cluster.cluster_centers_centroid # 查看质心array([[ -6.08459039,  -3.17305983],       [ -1.54234022,   4.43517599],       [ -7.09306648,  -8.10994454],       [-10.00969056,  -3.84944007]])inertia=cluster.inertia_inertia908.3855684760613

5. 通过绘图查看分类后的分布

color=['red','pink','orange','gray']fig, axi1=plt.subplots(1)for i in range(n_clusters):    axi1.scatter(X[y_pred==i, 0], X[y_pred==i, 1],               marker='o',               s=8,               c=color[i])axi1.scatter(centroid[:,0],centroid[:,1],marker='x',s=100,c='black')

07286d578cdc1023267f5e87df4fb703.png

6. 总结

以上是本周对KMeans聚类算法的原来的初步讲解,并对通过代码来实现。

转载地址:http://nwyms.baihongyu.com/

你可能感兴趣的文章
HTML Music Entities/音乐符号
查看>>
Linux signal 处理
查看>>
Oracle中merge into语法
查看>>
Vue2.x + vux2.x + vux-loader + typescript 搭建第一个环境
查看>>
MySQL的binlog日志
查看>>
vagrant The specified host network collides with a non-hostonly network!
查看>>
0x59 单调队列优化DP
查看>>
mysql中的union用法
查看>>
利用python爬取龙虎榜数据及后续分析
查看>>
Git和GitHub使用总结
查看>>
php array_multisort对数据库结果多个字段进行排序
查看>>
关于大型网站技术演进的思考(十六)--网站静态化处理—前后端分离—下(8)...
查看>>
Python中dict详解
查看>>
[LeetCode][JavaScript]House Robber
查看>>
java经典算法四十题
查看>>
(转载) MTK flash
查看>>
Python 序列化之json、pickle
查看>>
python3 多线程笔记
查看>>
无尽的控件-GridView复合表头
查看>>
Luogu4726 【模板】多项式指数函数(NTT+多项式求逆)
查看>>