基本原理

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

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

距离

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

  • 欧氏距离

    \[d(x,u)=\sqrt{\sum_{i=1}^n(x_i-\mu_i)^2}
    \]

  • 曼哈顿距离

    \[d(x,u)=\sum_{i=1}^n(|x_i-\mu|)
    \]

  • 余弦距离

    \[cos\theta=\frac{\sum_{i=1}^n(x_i*\mu)}{\sqrt{\sum_i^n(x_i)^2}*\sqrt{\sum_1^n(\mu)^2}}
    \]

inertia

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

代码

模拟数据:

from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
X, 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()

使用KMeans类建模:

from sklearn.cluster import KMeans
n_clusters=3
cluster = KMeans(n_clusters=n_clusters,random_state=0).fit(X)

也可先用fit, 再用predict,但是可能数据不准确。用于数据量较大时。

此时就可以查看其属性了:质心、inertia.

centroid=cluster.cluster_centers_
centroid # 查看质心

查看inertia:

inertia=cluster.inertia_
inertia

画出所在位置。

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')

最新文章

  1. ssh 与 irc
  2. spring 注入静态变量
  3. [Tex学习笔记]写文章需要规范、需要引用到位. [LaTeX代码]
  4. easyui中tree使用simpleData的形式加载数据
  5. [Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒
  6. thread_fork/join并发框架1
  7. C# 之屏幕找图
  8. Android系列之Fragment(二)----Fragment的生命周期和返回栈
  9. jQuery使用ajax跨域获取数据
  10. Java1.8.0_05 环境配置
  11. Android的事件处理机制详解(二)-----基于监听的事件处理机制
  12. js控制不同的时间段显示不同的css样式
  13. ora 32021 设置参数时参数值长度超过255处理办法
  14. Web前端常见问题处理
  15. [原创]python MySQLdb在windows环境下的安装、出错问题以及解决办法
  16. 编译lua5.3.2报错提示libreadline.so存在未定义的引用解决方法
  17. EF数据存贮问题二之“无法定义这两个对象之间的关系,因为它们附加到不同的 ObjectContext 对象”
  18. vue数组语法兼容问题
  19. nginx反向代理node.js获取客户端IP
  20. Android:更好的自定义字体方案

热门文章

  1. P 1028 人口普查
  2. UVA - 10384 The Wall Pusher(推门游戏)(IDA*)
  3. 创建简单web项目
  4. my97datepicker实现日期改变立刻触发函数
  5. Mac系统Snail SVN 精简版配置比较、合并工具:Beyond Compare及破解
  6. js 月份选择器(只选择到月)
  7. Python多线程,线程死锁及解决,生产者与消费者问题
  8. 进度4_家庭记账本App
  9. LeetCode随想------Single Number-----关于异或的性质
  10. Scheduled定时任务器在Springboot中的使用