K-Means聚类算法

分类与聚类

分类:分类其实是从特定的数据中挖掘模式,做出判断的过程。

分类学习的主要过程:

1)训练数据集存在一个类标记号,判断它是正向数据集还是负向数据集;

2)然后需要对数据集进行学习训练,并构建一个训练的模型;

3)通过该模型对预测数据集进行预测,并计算其结果的性能

聚类:将数据集中在某些方面相似的数据成员放在一起,这些数据是没有标签的,是无监督学习。

聚类的目的也是把数据分类,但是事先不知道如何去分的,完全是算法自己来判断各条数据之间的相似性,相似的就放在一起。

聚类算法分为三类:原型聚类、层次聚类、密度聚类

K-Means聚类

K-Means聚类是属于原型聚类类型的,是较常用的聚类算法,其目标是将数据点划分为K个类簇,该算法的最大优点是简单、便于理解、运算速度较快,缺点是在聚类前指定聚集的类簇数。

算法流程:

  • 确定K值,即将数据聚集成K个类簇或者小组
  • 从数据集中随机选择K个数据点作为质心或数据中心
  • 分别计算每个点到质心之间的距离,并将每个点划分到离最近质心的小组
  • 当每个质心都聚集一些点后,重新定义算法选出新的质心(对于每个簇,计算其均值,即得到新的K个质心点)
  • 迭代执行上面两个步骤,直到迭代终止条件满足为止(聚类结果不再变化)

K-Means算法应用代码举例:

from sklearn.cluster import KMeans
'''
第一部分数据集
X表示二维矩阵数据,篮球运动员比赛数据
总共20行,每行两列数据
第一列表示球员每分钟助攻数
第二列表示球员每分钟得分数
'''
X = [[0.0888,0.5885],
    [0.1399,0.8291],
    [0.0747,0.4974],
    [0.0983,0.5772],
    [0.1276,0.5703],
    [0.1671,0.5835],
    [0.1306,0.5276],
    [0.1061,0.5523],
    [0.2446,0.4007],
    [0.1670,0.4770],
    [0.2485,0.4313],
    [0.1227,0.4909],
    [0.1240,0.5668],
    [0.1461,0.5113],
    [0.2315,0.3788],
    [0.0494,0.5590],
    [0.1107,0.4799],
    [0.1121,0.5735],
    [0.1007,0.6318],
    [0.1956,0.4280],

    ]
#输出数据集
print(X)
'''
第二部分:K-Means聚类
clf = KMeans(n_clusters=3)表示类簇数为3,聚类成三类数据
y_pred = clf.fit_predict(X)载入数据集X,并且将聚类的结果赋值给y_pred
'''
clf = KMeans(n_clusters=3)  #输出完整的KMeans函数
y_pred = clf.fit_predict(X)  #输出聚类预测结果
print(clf)
print("y_pred = ",y_pred)
'''
第三部分:可视化绘图
'''
import numpy as np
import matplotlib.pyplot as plt
x = [n[0] for n in X]
print(x)
y = [n[1] for n in X]
print(y)
'''
绘制散点图
参数:x横轴  y纵轴  c=y_pred聚类预测结果  marker类型  o表圆点  *表示星型  x表示点
'''
plt.scatter(x,y,c=y_pred,marker='x')
plt.title("Kmeans-Basketball Data")  #绘制标题
#绘制x轴和y轴坐标
plt.xlabel("assists_per_minute")
plt.ylabel("points_per_minute")
#设置右上角图例
plt.legend(["A","B","C"])
#显示图形
plt.show()

结果:

K-Means聚类算法_第1张图片

 

你可能感兴趣的:(计算机视觉,算法,聚类,kmeans)