3.K均值算法

1) 扑克牌手动演练k均值聚类过程:>30张牌,3类。

随机抽出中心点 5,10 ,8(红色数字为牌数量,蓝色数字为聚类中心点):

 再次聚类:

 最终聚类中心结果,为:4 ,12, 8

2)自主编写K-means算法 ,以鸢尾花花瓣长度数据做聚类,并用散点图显示。

代码:

import numpy as np
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt

k = int(input("请输入类中心个数:"))
iris = load_iris()
data = iris.data[:, 2]  # 获取鸢尾花花瓣长度
center = np.random.choice(data , k)  
n = len(data)
dist = np.zeros(n)  # 获取每个点到样本中心的距离

flag = True
while flag:
    new_center = np.zeros(k)  # 定义一个新的中心
    for i in range(n):
        d = np.zeros(k)  
        for j in range(k):
            d[j] = (abs(center[j] - data[i]))  # 计算这个点到中心点的距离
        dist[i] = np.argmin(d)  # 找出最小距离的下标

    # 计算各聚类新均值
    for c in range(k):  # 按照下标来聚类
        index = dist == c
        new_center[c] = np.mean(data[index])  # 计算新聚类中心

    # 判断新中心是否与原先中心相等,若相等,则结束聚类
    if np.all(center == new_center):
        break
    else:
        center = new_center
print('最终聚类结果为:
',dist)
plt.scatter(data, data, c=dist, s=50, cmap="Paired")
plt.show()

结果:

 可视化:

3)用sklearn.cluster.KMeans,鸢尾花花瓣长度数据做聚类,并用散点图显示。

代码:

from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

iris = load_iris()
data = iris.data[:, 2]
x = data.reshape(-1, 1)
km_model = KMeans(n_clusters=3)
km_model.fit(x)
y = km_model.predict(x)

plt.scatter(x[:, 0], x[:, 0], c=y, s=50, cmap="rainbow")
plt.show()

结果:

 4)鸢尾花完整数据做聚类并用散点图显示。

代码:

from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

iris = load_iris()
x = iris.data
km_model = KMeans(n_clusters=3)
km_model.fit(x)
y = km_model.predict(x)

plt.scatter(x[:, 2], x[:, 3], c=y, s=50, cmap="Paired")
plt.show()

结果:

 5)想想k均值算法中以用来做什么?

  行为细分:按购买历史记录细分 按应用程序,网站或平台上的活动进行细分, 根据兴趣定义角色, 根据活动监控创建配置文件

  库存分类:  按销售活动分组库存 ,按制造指标对库存进行分组

  分类传感器测量:  检测运动传感器中的活动类型 ,分组图像 ,单独的音频 ,确定健康监测中的群体  

  检测机器人或异常:  从机器人中分离出有效的活动组, 将有效活动分组以清除异常值检测

原文地址:https://www.cnblogs.com/wh008/p/12711145.html