银行客户分组画像
一、原理分析
运用k-means方法求解关于银行客户分组画像问题
1.k-means算法:
通过把样本分离成n个具有相同方差的类的方式来聚集数据,最小化称为簇内平方和的标准。该算法需要指定簇的数量。
簇的数量可以通过肘部法解决
2.误差平方和:
![O4 Y$0N6A(K1RH$]SRNZ`XR](https://pic.tmxbk39.com/images/2023/01/04/O4_Y0N6AK1RHSRNZXR.png)
3.肘部法:
(1)对于n个点的数据集,迭代计算k from 1 to n,每次聚类完成后计算每个点到其所属的簇中心的距离的平方和
(2)平方和是会逐渐变小的,直到k==n时平方和为0,因为每个点都是它所在的簇中心本身。
(3)在这个平方和变化过程中,会出现一个拐点也即“肘”点,下降率突然变缓时即认为是最佳的k值。
二、实验步骤设计(主要程序的原理)
1.先用肘部法确定k值。
2.k-means算法流程:
首先在数据当中随机生成k个聚类中心,后计算数据当中每个样本到这个k个聚类中心的距离,并将对应的样本分到距离最小的聚类中心所对应的簇当中,将所有样本归类之后,对于每个k个簇重新计算每个簇的聚类中心,也就是每个簇中的所有样本的质心,重复上述操作知道聚类中心不发生改变为止。
代码如下:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib; matplotlib.use('TkAgg')
from sklearn.cluster import KMeans
dataset = pd.read_csv(r'Customer_Info.csv')
print(dataset)
X=dataset.iloc[:,[4,3]].values
sumDs=[]
for i in range(1,11):
kmeans=KMeans(n_clusters=i)
kmeans.fit(X)
sumDs.append(kmeans.inertia_)
print(kmeans.inertia_)
plt.plot(range(1,11),sumDs)
plt.title('the Elbow method')
plt.xlabel('number of cluster k')
plt.ylabel('SSE')
plt.show()
kmenas1=KMeans(n_clusters=3,init='k-means++',max_iter=300,n_init=10,random_state=0)
y_kmeans=kmenas1.fit_predict(X)
plt.scatter(X[y_kmeans==0,0],X[y_kmeans==0,1],s=100,marker='^',c='red',label='poor')
plt.scatter(X[y_kmeans==2,0],X[y_kmeans==2,1],s=100,marker='o',c='green',label='middle')
plt.scatter(X[y_kmeans==1,0],X[y_kmeans==1,1],s=100,marker='*',c='blue',label='rich')
plt.scatter(kmenas1.cluster_centers_[:,0],kmenas1.cluster_centers_[:,1],s=250,c='yellow',label='Centroids')
plt.title('clusters of customer info')
plt.xlabel('deposit')
plt.ylabel('age')
plt.legend()
plt.show()
三、实验结果
![9LDD4TC@M9I]S5`GG[KC`7T](https://pic.tmxbk39.com/images/2023/01/04/9LDD4TCM9IS5GGKC7T.png)
k-means算法求得银行客户分组画像如下所示:
![Q0~}53EG5]I6A6CN`WRJYMH](https://pic.tmxbk39.com/images/2023/01/04/Q053EG5I6A6CNWRJYMH.png)
微信扫一扫打赏
支付宝扫一扫打赏