热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于收支数据的聚类分析研究

通过对收支数据进行聚类分析,研究发现聚类结果的解释和验证是关键步骤。为了确保分群的合理性和有效性,需要结合业务背景和实际需求,灵活选择合适的聚类数量。该研究利用Python中的Pandas和Matplotlib库对数据进行了预处理和可视化,为决策提供了科学依据。

聚类方法仍需要对分群结果进行解读,通过业务合理性来选择分群的数量

import pandas as pd
import matplotlib.pyplot as plt

dataset=pd.read_csv("customers.csv")

dataset.head()CustomerID Genre Age Annual Income (k$) Spending Score (1-100)
0 1 Male 19 15 39
1 2 Male 21 15 81
2 3 Female 20 16 6
3 4 Female 23 16 77
4 5 Female 31 17 40

dataset.describe()CustomerID Age Annual Income (k$) Spending Score (1-100)
count 200.000000 200.000000 200.000000 200.000000
mean 100.500000 38.850000 60.560000 50.200000
std 57.879185 13.969007 26.264721 25.823522
min 1.000000 18.000000 15.000000 1.000000
25% 50.750000 28.750000 41.500000 34.750000
50% 100.500000 36.000000 61.500000 50.000000
75% 150.250000 49.000000 78.000000 73.000000
max 200.000000 70.000000 137.000000 99.000000

X = dataset.iloc[:, [3, 4]].values
#全部行,第四第五列 Annual Income (k$) 和 Spending Score (1-100)

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters = 5, init = 'k-means++', random_state = 42)#k=5
# random_state = 42设置完之后,建模生成的随机数都是一样的
# n_clusters分成多少组
# Kmeans随机选几个点,然后开始算距离,距离离得近的属于一类,给每个类别打上标签,算出聚类中心。离的很近或者小于阈值,聚类结束。
# Kmean++ 第一个随机选择。n+1是选择离第一个远的距离。
y_kmeans = kmeans.fit_predict(X) #每个记录x都给预测了一个聚类的值

plt.scatter(X[y_kmeans == 0, 0], X[y_kmeans == 0, 1], s = 100, c = 'red', label = 'Standard')
plt.scatter(X[y_kmeans == 1, 0], X[y_kmeans == 1, 1], s = 100, c = 'blue', label = 'Traditional')
plt.scatter(X[y_kmeans == 2, 0], X[y_kmeans == 2, 1], s = 100, c = 'green', label = 'Normal')
plt.scatter(X[y_kmeans == 3, 0], X[y_kmeans == 3, 1], s = 100, c = 'cyan', label = 'Youth')
plt.scatter(X[y_kmeans == 4, 0], X[y_kmeans == 4, 1], s = 100, c = 'magenta', label = 'TA')
#分成五类,分别把值选出来。0,1,2,3,4,5代表5类;0,1代表数字x的值;s点的大小。c是颜色,label是标签
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 300, c = 'black', label = 'Centroids')
#cluster_centers聚类中心
plt.title('Clusters of customers')
plt.xlabel('Annual Income (k$)')
plt.ylabel('Spending Score (1-100)')
plt.legend()
plt.show()

在这里插入图片描述

import matplotlib.pyplot as pltwcss = []for i in range(1, 11): #循环使用不同k测试结果kmeans = KMeans(n_clusters = i, init = 'k-means++', random_state = 42)kmeans.fit(X)wcss.append(kmeans.inertia_) #inertia簇内误差平方和plt.plot(range(1, 11), wcss)plt.title('The Elbow Method')plt.xlabel('Number of clusters')plt.ylabel('WCSS')plt.show()
#内核的数量应该怎么选比较合适,在课堂中是尝试 10 个内核,取值是1到11。反正就是多测试几次,出现最佳正确答案就可以了。取得这个值没有定数。

在这里插入图片描述
结论: 5个分群比较好


推荐阅读
author-avatar
久居我心入我怀
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有