3.K均值算法

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

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

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

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

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

 

1)

①随机选初始中心为(3,9,11)

 

新聚类中心为(4,9,12),8.6向上取整)。

 

新聚类中心为(4,9,12),结束

 

(2)

import numpy as np
from sklearn.datasets import load_iris
iris = load_iris()

x=iris.data[:, 2]
y = np.zeros(len(x))
k=3
oldcenter=np.random.choice(x,k)#随机选k个中心
newcenter = np.zeros(k)

#求距离
while True:
    for i in range(len(x)):
        temp = []
        for j in oldcenter:
            temp.append(abs(x[i] - j))
        # 归类
        for l in range(k):
            if temp[l]==np.min(temp):
                y[i]=l
                break

#新的类中心
    for m in range(k):
        n = np.where(y == m)
        newcenter[m] = np.mean(x[n])

#看看停了没
    if np.all(sorted(oldcenter)==sorted(newcenter)):
        break
    else:
        oldcenter=newcenter

#画图
import matplotlib.pyplot as plt
plt.scatter(x,x,c=y,s=50,cmap='rainbow',marker='p',alpha=0.5)

 

 

 

(3)和(4)

import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
iris = load_iris()
plt.rcParams['font.sans-serif'] = 'SimHei'# 设置中文显示
p = plt.figure(figsize=(10, 10))
a1 = p.add_subplot(2, 1, 1)
s1=iris.data[:,2]

X=s1.reshape(-1,1)
est = KMeans(n_clusters=3)#配置构造模型
est.fit(X)#训练
y_kmeans = est.predict(X)#预测每个样本的聚类索引
plt.scatter(X[:,0],X[:,0],c=y_kmeans,s=50,cmap='rainbow')
plt.title("鸢尾花花瓣长度数据做聚类")
#4
a2 = p.add_subplot(2, 1, 2)
X1 = iris.data#数据
est1 = KMeans(n_clusters=3)#配置构造模型
est1.fit(X1)#训练
y_kmeans1 = est1.predict(X1)#预测
plt.scatter(X1[:,2],X1[:,3],c=y_kmeans1,s=100,cmap='rainbow')
plt.title("鸢尾花完整数据做聚类")

 

 

 

(5)

 对无特征的数据进行分类,寻找隐藏结构。

例如对知识点分门别类。

posted @ 2020-04-14 13:13  seele233  阅读(191)  评论(0)    收藏  举报