模型亮点
- 初始测试集上评分为0.36,调参后测试集上评分为0.77
- 数据集由sklearn生成
-----------------------------------------以下为模型具体实现-----------------------------------------
Step1.数据读取
from sklearn.datasets import make_blobs x,y=make_blobs(n_samples=600,n_features=10,centers=6,random_state=1) #10个特征值,可分为6簇
Step2.数据整理
import pandas as pd df_x=pd.DataFrame(x) df_x.columns=['feature1','feature2','feature3','feature4','feature5','feature6','feature7','feature8','feature9','feature10'] df_y=pd.DataFrame(y) df_y.columns=['class'] df_x.head()
Step3.划分训练集和测试集
from sklearn.model_selection import train_test_split x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=1)
Step4.启动聚类分析
from sklearn.cluster import KMeans n=2 #初始参数设定 def kmeans(n,x_train,y_train): model=KMeans(n_clusters=n) model.fit(x_train,y_train) return model model=kmeans(n,x_train,y_train)
Step5.模型评估-无标签(其实严格来说不算)
from sklearn.metrics import silhouette_score dic={} #定义空字典,存放轮廓系数 def lunkuo(model,x_test): y_pred=model.predict(x_test) print("轮廓系数:",round(silhouette_score(x_test,y_pred),2)) dic[n]=(round(silhouette_score(x_test,y_pred),2)) return model print("-----初始聚成 2 簇-----") model=lunkuo(model,x_test)
Step6.优化参数
for n in range(3,9): print("-----聚成",n,"簇-----") model=kmeans(n,x_train,y_train) #训练模型 model=lunkuo(model,x_test) #评估模型 print("-----最优参数-----") print("最优簇数:",list(dic.keys())[list(dic.values()).index(max(dic.values()))]) #字典由value反查key print("最优轮廓系数",max(dic.values())) #字典value中最大值
Step7.保存最优模型
n=list(dic.keys())[list(dic.values()).index(max(dic.values()))] #最优簇数 model=kmeans(n,x_train,y_train) #训练最优模型 from sklearn.externals import joblib joblib.dump(model,'d:\kmeans_nolabels.pkl') new_model=joblib.load('d:\kmeans_nolabels.pkl') new_model.predict(x_test)
-END