算法原理
k-means算法是一种聚类算法,所谓聚类,即根据相似性原则,将具有较高相似度的数据对象划分至同一类簇,将具有较高相异度的数据对象划分至不同类簇。聚类与分类最大的区别在于,聚类过程为无监督过程,即待处理数据对象没有任何先验知识,而分类过程为有监督过程,即存在有先验知识的训练数据集。
k-means算法中的k代表类簇个数,means代表类簇内数据对象的均值(这种均值是一种对类簇中心的描述),因此,k-means算法又称为k-均值算法。k-means算法是一种基于划分的聚类算法,以距离作为数据对象间相似性度量的标准,即数据对象间的距离越小,则它们的相似性越高,则它们越有可能在同一个类簇。数据对象间距离的计算有很多种,k-means算法通常采用欧氏距离来计算数据对象间的距离。
实验内容
1、随机生成100个数,并对这100个数进行k-mean聚类(k=3,4,5,6)(并用matplot画图)
import numpy as np
import matplotlib
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
matplotlib.rcParams['font.family'] = 'SimHei' # 中文显示
dataSet = np.random.rand(100, 3) # 生成一个随机数据,样本大小为100, 特征数为3
for k in range(3, 7):
clf = KMeans(n_clusters=k) # 设定k
s = clf.fit(dataSet) # 加载数据集合
numSamples = len(dataSet)
centroids = clf.labels_
print(centroids, type(centroids)) # 显示中心点
print(clf.inertia_) # 显示聚类效果
mark = ['or', 'ob', 'og', 'ok', '^r', '+r', 'sr', 'dr', '<r', 'pr']
# 画出所有样例点 属于同一分类的绘制同样的颜色
for i in range(numSamples):
# markIndex = int(clusterAssment[i, 0])
plt.plot(dataSet[i][0], dataSet[i][1], mark[clf.labels_[i]]) # mark[markIndex])
mark = ['Dr', 'Db', 'Dg', 'Dk', '^b', '+b', 'sb', 'db', '<b', 'pb']
# 画出质点,用特殊图型
centroids = clf.cluster_centers_
for i in range(k):
plt.plot(centroids[i][0], centroids[i][1], mark[i], markersize=12)
# print centroids[i, 0], centroids[i, 1]
plt.title(str(k)+"-mean聚类")
plt.show()




实验结果分析
由实验结果可以直观看出选择类簇个数不同,分类效果不同,当分为三类时每个点到其簇的质心距离之和最大,随簇数增加,每个点到其簇的质心距离之和减小,但有图可以看出当簇增大时分类较杂乱
2、对鸢尾花数据进行K-means算法聚类(并用matplot画图)
import matplotlib
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import load_iris
matplotlib.rcParams['font.family'] = 'SimHei' # 中文显示
# 鸢尾花K-means聚类散点图
iris = load_iris().data
K_means = KMeans(n_clusters=3) # 三个聚类中心
result = K_means.fit(iris) # means 自动分类
kc = result.cluster_centers_ # 自动分类后的聚类中心
y_means = K_means.predict(iris) # 预测y值
plt.title("鸢尾花数据集的K-means聚类散点图", fontsize=16)
plt.scatter(iris[:,0],iris[:,2],c=y_means, marker='.',label='see')
plt.show()
实验结果分析
通过数据集iris的属性值将鸢尾花分为3类,即K值为3,可视化图形后可直观明了的看出3类鸢尾花的散点图,进而基于K均值模型可进一步预测鸢尾花类型。
本文深入探讨了K-means聚类算法的原理,解释了无监督学习中如何通过计算数据对象间的距离来实现数据的自动分类。通过实例演示,包括随机数据点和鸢尾花数据集的聚类分析,展示了不同类簇数量对聚类效果的影响。
960

被折叠的 条评论
为什么被折叠?



