美赛python学习d13——K_means聚类算法
作者:互联网
K-Means算法的作用
基于数据间距离的远近,将若干离散的数据分成多个类
聚类遇到的问题
- 分成多少个类?
手肘法则:
畸变程度之和:通俗地说就是每个类内的数据与类耳朵中心点的距离平方和,再将所有的组内平方和相加
聚合系数折线图:随着类的个数增加,聚合系数(畸变程度之和)减少,总折线图像人的手肘一样,找到最像肘部的点,确定为最终的分类个数 - 每一类包括哪些元素
算法的步骤
- 选择类的个数K
- 选择K个随机点作为中心点(不一定要在原数据集中)
- 对于数据集中的每一个点,找到与其最近的中心点,作为这个中心点的类
- 找到每个类的新中心点
- 重新聚类,如聚类结果不变,则算法停止
实例
将商场客户分类,为商场确定销售策略和目标客户
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
dataset = pd.read_csv("Mall_Customers.csv")
x = dataset.iloc[:, 3:5].values
# 运用手肘法确定需要的分类数
from sklearn.cluster import KMeans
wcss=[]
#循环可能的分类数
for i in range(1,11):
kmeans=KMeans(n_clusters=i,max_iter=300,n_init=10,init='k-means++',random_state=0)
kmeans.fit(x)
wcss.append(kmeans.inertia_)
plt.plot(range(1,11),wcss)
plt.title('The Elbow Method')
plt.xlabel('Number of Clusters')
plt.ylabel('wcss')
plt.show()
# 确定分类数后进行聚类分析
kmeans=KMeans(n_clusters=5,max_iter=300,n_init=10,init='k-means++',random_state=0)
y_kmeans=kmeans.fit_predict(x)
#将分类结果可视化
plt.scatter(x[y_kmeans==0,0],x[y_kmeans==0,1],s=100,c='red',label='Cluster 0')
plt.scatter(x[y_kmeans==1,0],x[y_kmeans==1,1],s=100,c='blue',label='Cluster 1')
plt.scatter(x[y_kmeans==2,0],x[y_kmeans==2,1],s=100,c='green',label='Cluster 2')
plt.scatter(x[y_kmeans==3,0],x[y_kmeans==3,1],s=100,c='cyan',label='Cluster 3')
plt.scatter(x[y_kmeans==4,0],x[y_kmeans==4,1],s=100,c='magenta',label='Cluster 4')
plt.scatter(kmeans.cluster_centers_[:,0],kmeans.cluster_centers_[:,1],s=300,c='yellow')
plt.legend()
plt.show()
K–Means算法的初值陷阱及K–Means++算法
K–Means算法选取的初值不同,分类结果也可能不同,需要决出最优的分类结果
K–Means++算法选择初始聚类中心的基本原则是:初始的聚类中心的距离要尽可能地远
K–Means++算法的步骤如下
标签:plt,d13,python,means,kmeans,算法,Means,100,scatter 来源: https://blog.csdn.net/qq_51059141/article/details/122772177