练习: 使用年收入和花费分数进行聚类
# 提取出这两列
X2 = df[[\'年收入\', \'花费分数\']].values
# 使用 k 值进行调参
inertia = [] # 用于接收每次聚类后得到的样本距离平方和
for n in range(2, 11):
# 算法实例化
kmeans = KMeans( n_clusters= n , random_state=666)
# 学习数据
kmeans.fit(X2)
# 把簇内距离平方和指标 , 输出到列表中来
inertia.append(kmeans.inertia_)
plt.figure(figsize=(15,6))
plt.plot(range(2,11) ,inertia , \'o\' )
plt.plot(range(2,11) ,inertia , \'-\' , alpha = 0.5 )
plt.xlabel(\'聚类数量\') , plt.ylabel(\'距离平方和\')
# 使用k = 5 进行建模
kmeans = KMeans(n_clusters= 5 , random_state= 666)
kmeans.fit(X2)
# 获取聚类后样本的聚类集群情况
labels2 = kmeans.labels_
labels2
# 聚类的几个中心点
center2 = kmeans.cluster_centers_
center2
h = 0.02
x_min, x_max = X2[:, 0].min() - 1, X2[:, 0].max() + 1
y_min, y_max = X2[:, 1].min() - 1, X2[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = kmeans.predict(np.c_[xx.ravel(), yy.ravel()])
plt.figure(1 , figsize = (15 , 7) )
plt.clf()
# 画出原有的样本点
plt.scatter(data = df , x = \'年收入\' , y = \'花费分数\' , c = labels2 ,s = 200)
# 画出四个聚类中心点
plt.scatter(x = center2[:, 0] , y = center2[:, 1], s = 300 , c=\'red\' ,alpha = 0.5)
# 把预测值Z的形状变成和xx相同的形状
Z = Z.reshape(xx.shape)
plt.imshow(Z , interpolation=\"nearest\" , extent=(xx.min() , xx.max() , yy.min() ,yy.max()),
cmap = plt.cm.Pastel2 , aspect=\'auto\' , origin=\'lower\')
plt.ylabel(\'年收入\') , plt.xlabel(\'花费分数\')
plt.show()