KMeans聚类描述
聚类是无监督学习,它将相似对象归到同一个簇中,簇内对象越相似,聚类的效果越好。KMeans算法中k表示聚类为多少个簇,means代表取每一个聚类中数据的均值作为该簇的中心或称为质心。
-
KMeans算法的流程:
(1)随机确定k个质心
(2)将数据集中每一个点找到距离其最近的质心,并将其分配到对应的簇
(3)每一个簇的质心更新为该簇中所有点的均值
(4)重复2,3直到质心无法再更新
3.图解
假设有九个点分位三类 k=3
(1)图中随机选择三个点
(2)把距离这三个点最近的其他点归为一类(簇)
(3)取当前类的所有点均值,作为中心点
(4)更新距离中心点最近的点
(5)再次计算被分类点的均值作为新的中心点
(6)再次更新距离中心点最近的点
(7)计算中心点
(8)直到所有点无法再更新到其他分类时,算法结束。
sklearn实现鸢尾花的KMeans聚类
from sklearn import datasets
iris = datasets.load_iris()
#print(iris)
#print(iris.data,type(iris.data))
#print(iris.target,type(iris.target))
#print(iris.target_names,type(iris.target_names))
#print(iris.feature_names,type(iris.feature_names))
#使用交叉验证,把数据集分位训练样本和测试样本集
from sklearn.model_selection import train_test_split
xtrain,xtest,ytrain,ytest = train_test_split(iris.data,iris.target,test_size=0.1)
#建立模型
from sklearn.cluster import KMeans
model = KMeans(n_clusters=3)
model.fit(xtrain)
pre = model.predict(xtrain)
center = model.cluster_centers_
print(pre,center)