美赛python学习d13——K_means聚类算法

2022/2/4 11:43:01

本文主要是介绍美赛python学习d13——K_means聚类算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

K-Means算法的作用

基于数据间距离的远近,将若干离散的数据分成多个类

聚类遇到的问题

  1. 分成多少个类?
    手肘法则:在这里插入图片描述
    畸变程度之和:通俗地说就是每个类内的数据与类耳朵中心点的距离平方和,再将所有的组内平方和相加
    聚合系数折线图:随着类的个数增加,聚合系数(畸变程度之和)减少,总折线图像人的手肘一样,找到最像肘部的点,确定为最终的分类个数
  2. 每一类包括哪些元素

算法的步骤

  1. 选择类的个数K
  2. 选择K个随机点作为中心点(不一定要在原数据集中)
  3. 对于数据集中的每一个点,找到与其最近的中心点,作为这个中心点的类
  4. 找到每个类的新中心点
  5. 重新聚类,如聚类结果不变,则算法停止
    在这里插入图片描述

实例

将商场客户分类,为商场确定销售策略和目标客户

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++算法的步骤如下
在这里插入图片描述



这篇关于美赛python学习d13——K_means聚类算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程