银行客户分组画像
一、原理分析
运用k-means方法求解关于银行客户分组画像问题
1.k-means算法:
通过把样本分离成n个具有相同方差的类的方式来聚集数据,最小化称为簇内平方和的标准。该算法需要指定簇的数量。
簇的数量可以通过肘部法解决
2.误差平方和:
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()
三、实验结果
k-means算法求得银行客户分组画像如下所示: