ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-02-04 11:31:31  阅读:226  来源: 互联网

标签:plt d13 python means kmeans 算法 Means 100 scatter


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

标签:plt,d13,python,means,kmeans,算法,Means,100,scatter
来源: https://blog.csdn.net/qq_51059141/article/details/122772177

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有