【sklearn练习】KMeans
一、数据集探索
iris数据集是常用的分类实验数据集,由Fisher,1936收集整理。iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据样本,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。
# 1.加载数据集 iris_data = load_iris() x = iris_data.data y = iris_data.target # 特征 columns = iris_data.feature_names # ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'] 123456
X:
Y:
返回顶部
二、数据预处理
不同特征之间往往具有不同的量纲,由此所造成的数值间的差异可能很大,在涉及空间距离计算或梯度下降法等情况的时候不对其进行处理会影响到数据分析结果的准确性。为了消除特征之间的量纲和取值范围差异可能会造成的影响,需对数据进行标准化处理,也可以称为规范化处理。在这里我们对数据集进行标准差标准化处理。# 2.数据预处理 --- 标准差标准化 MMS = MinMaxScaler().fit(x) data = MMS.transform(x) 123
处理后的数据集:
返回顶部
三、构建模型获取结果
# 3.构建KMeans模型训练数据 cluster = KMeans(n_clusters=3,random_state=123).fit(data) # 3.1 获取聚类结果 y_pred = cluster.labels_ # 3.2 获取质心 centers = cluster.cluster_centers_ # [[0.70726496 0.4508547 0.79704476 0.82478632], # [0.19611111 0.595 0.07830508 0.06083333], # [0.44125683 0.30737705 0.57571548 0.54918033]] # 3.3 查看簇内平方和 inertia = cluster.inertia_ # 6.982216473785234 1234567891011
返回顶部
四、聚类结果可视化
这里我们的数据集是四维(包含四个特征),我们需要对其进行降维处理,降到二维平面使用散点图来进行展示。这里的降维采用TSNE。t-SNE(t-distributed stochastic neighbor embedding)是用于降维的一种机器学习算法,是由 Laurens van der Maaten 等在08年提出来。此外,t-SNE 是一种非线性降维算法,非常适用于高维数据降维到2维或者3维,进行可视化。# 4.聚类结果可视化 from sklearn.manifold import TSNE # 进行数据降维处理 tsne = TSNE(n_components=2,init='random',random_state=177).fit(data) df = pd.DataFrame(tsne.embedding_) df['labels'] = y_pred 123456 降维后的数据集
df1 = df[df['labels']==0] df2 = df[df['labels']==1] df3 = df[df['labels']==2] # 绘制画布 fig = plt.figure(figsize=(9,6)) plt.plot(df1[0],df1[1],'bo',df2[0],df2[1],'r*',df3[0],df3[1],'gD') plt.show() 1234567
返回顶部
五、聚类模型评估
KMeans聚类模型评估指标参见:【skLearn 聚类算法】KMeans
① 轮廓系数
# 5.1 使用轮廓系数法评价K-Means聚类模型 --- 畸变程度 from sklearn.metrics import silhouette_score silhouetteScore = [] for i in range(2,15): # 构建并训练模型 kmeans = KMeans(n_clusters=i,random_state=123).fit(data) score = silhouette_score(data,kmeans.labels_) silhouetteScore.append(score) plt.figure(figsize=(10,6)) plt.plot(range(2,15),silhouetteScore,linewidth=1.5,linestyle='-') plt.show() 1234567891011 在这里我们获取轮廓系数score是所有样本的轮廓系数均值,如果要获取每个样本的轮廓系数应当使用silhouette_samples。这里是针对超参数k(n_cluster),所以采用轮廓系数均值进行评估。聚类数目为2、3和4、5的时候,图形的畸变程度最大。本身数据集就是关于3种鸢尾花的,侧面说明了聚类为3的时候效果较好。
返回顶部
② 卡林斯基 - 哈拉巴斯指数
# 5.2 卡林斯基-哈拉巴斯指数 from sklearn.metrics import calinski_harabasz_score chs = [] for i in range(2,15): # 构建聚类模型 kmeans = KMeans(n_clusters=i,random_state=112).fit(data) chsScore = calinski_harabasz_score(data,kmeans.labels_) chs.append(chsScore) plt.figure(figsize=(10, 8)) plt.plot(range(2, 15), chs, linewidth=1.5, linestyle='-') plt.show() 1234567891011 由图可以看出,当n_cluster=3的时候,FMI评分最高,聚类效果较好。
返回顶部
③ FMI评价法
# 5.3 FMI评价法 --- 需要有真实标签 from sklearn.metrics import fowlkes_mallows_score fms = [] for i in range(2,15): # 构建聚类模型 kmeans = KMeans(n_clusters=i,random_state=112).fit(data) fmsScore = fowlkes_mallows_score(y,kmeans.labels_) fms.append(fmsScore) plt.figure(figsize=(10, 8)) plt.plot(range(2, 15), fms, linewidth=1.5, linestyle='-') plt.show() 123456789101112 由图可以看出,当n_cluster=3的时候,FMI评分最高,聚类效果较好。
返回顶部
本文章相关源码下载:https://download.csdn.net/download/qq_45797116/74865557
相关知识
sklearn
利用sklearn库应用K
鸢尾花三种聚类算法(K
鸢尾花的分类(四种方法)
实践
Python实现Iris数据集(鸢尾花卉数据集)meanshift聚类
对鸢尾花数据集和月亮数据集,分别采用线性LDA、k
机器学习数据集之鸢尾花
如何练习星体投射
使用K
网址: 【sklearn练习】KMeans https://www.huajiangbk.com/newsview546228.html
上一篇: Iris鸢尾花数据集可视化、线性 |
下一篇: 机器学习项目实践——鸢尾花分类 |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039