模型训练
将之前处理好的数据拿来就进行模型训练,这里用的聚类算法为K-Means算法。K-Means算法主要就在于k=n_cluster参数的确定上面,到底是将k确定为几能进行更好的分类了。这里我采用了SSE手肘法来确定k值,SSE值代表了每一个数据点离聚类中心的距离的评分,即为误差平方。当k小于真实聚类数时,随着k增大数据之间的聚合度会增加,SSE下降幅度会很大,当k快达到真实聚类值时,SSE下降幅度会变平稳,就想一个手肘的形状,肘点即为最优k值,相关代码如下:
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
input_file = '../tmp/std2.xls'
data = pd.read_excel(input_file)
SSE = []
for k in range(1,9):
estimator = KMeans(n_clusters=k)
estimator.fit(data)
SSE.append(estimator.inertia_)#样本到最近的聚类中心的距离平方之和
X = range(1,9)
plt.xlabel('k')
plt.ylabel('SSE')
plt.plot(X,SSE,'o-')
plt.show()
结果如下:
从图中可以看出k的取值应该在4,5之间,这只有通过验证来确定到底是4还是5了,