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)
对无特征的数据进行分类,寻找隐藏结构。
例如对知识点分门别类。
浙公网安备 33010602011771号