k-平均演算法(英文:k-means clustering,以下简称为 k-means )是一种非监督式的学习方法,其主要的目标是对未标记的资料进行分群。什麽意思呢?
k-means 的判断逻辑其实跟 KNN 一样,都是物以类聚。我们在介绍 KNN 的时候曾经举例:假设你的邻居都是有钱人,那麽你有十之八九也是有钱人。
那麽 k-means 在做的事情就是:我们不知道谁是有钱人,但是有钱人肯定会聚在一起,穷人也是。
但是资料并不会自己长脚然後凑成一堆,这个时候我们该怎麽将他们分群呢?
答案是找出群集中心。这就像是一群人刚刚凑在一起大家都不熟,但过了一阵子之後便会有一些小团体出现,而在每个团体中总会有人成为领头羊,而这几只领头羊就是我们要找的群集中心了。
(当然,随着时间推进,各个团体内的领头羊也可能会换人,直到最适合的领导者出现为止。)
步骤如下:
我们将资料分为 k 群,自然就会有 k 个群集中心。而我们会希望每一群的资料都能跟群集中心距离愈短愈好,因此:
已知观测集,其中每个观测都是一个 d 维的实向量,而我们在做的就是要想办法求出各个群组内部最小的均方误差总和。
代表群集中心,‖‖就是算欧式距离,而S为分割的群组集合。
计算每个群集内的资料,其中每个都只被分配到一个确定的聚类中
更新群集中心。
我们随机生成 200 个点,然後用 k-means 将他们分成 5 群:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
x = np.random.rand(200,2) # 将200个值随机分布在2维上
clf = KMeans(n_clusters=5) # 分成5类
clf.fit(x)
# 将点逐一染色
for i in range(0,100):
if clf.labels_[i] == 0:
plt.scatter(x[i][0], x[i][1], color='red')
elif clf.labels_[i] == 1:
plt.scatter(x[i][0], x[i][1], color='blue')
elif clf.labels_[i] == 2:
plt.scatter(x[i][0], x[i][1], color='green')
elif clf.labels_[i] == 3:
plt.scatter(x[i][0], x[i][1], color='pink')
elif clf.labels_[i] == 4:
plt.scatter(x[i][0], x[i][1], color='orange')
plt.autoscale()
plt.grid() # grid()用来显示网格
plt.show()
https://chih-sheng-huang821.medium.com/%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92-%E9%9B%86%E7%BE%A4%E5%88%86%E6%9E%90-k-means-clustering-e608a7fe1b43
https://zh.wikipedia.org/wiki/K-%E5%B9%B3%E5%9D%87%E7%AE%97%E6%B3%95
其实机器学习还有很多可以讲的内容,但是碍於篇幅的关系,机器学习的部份将先告一段落。明天将开始进入深度学习的环节!
>>: IT 铁人赛 k8s 入门30天 -- day24 k8s Expose Pod Information to Containers by Environment Variables
【前言】均一的程序码基础 junyiacademy 从 2013 年 fork Khan Acad...
团队如果有一两个人能力仅免强胜任 会拉低团队所有人的表现. IF 你团队有五名优秀的下属 那这两个...
您的订阅是我制作影片的动力 订阅点这里~ 影片程序码 ## 应用三: 相异点侦测 #### libr...
更新 我把从第一天到现在每天的 Home 目录都放上 GitHub 了,README.md 里面有...
今天来实作身分验证的部分,笔者此前是用 ASP.NET Core Web API 搭配 Blazor...