机器学习_聚类分析_K-mens
K-means聚类的方法也叫K均值聚类,聚类的方法有许多中,其中K-mens可能是最常用到的方法。
- 算法的优缺点
- 算法的核心思想
- 算法的实现
1 算法的优缺点
优点 | 缺点 |
---|---|
使用简单 | 因为它使用了一个随机的元素,所以它不能保证找到最佳的类 |
无 | 需要一个合理初始化要聚类的个数:即要初始化K |
.. | 对极值敏感 |
2.算法的核心思想
物以类聚、人以群分。
K-means算法的核心思想主要是:假设数据的记录是N,该算法首先任意选择K个聚类中心点,那么其它的(N-K)个记录中每一条记录,计算出到初始化的K个记录的距离(其它距离函数也可以)并比较其大小,选择最小的距离。
然后,剩余的(N-K)条记录,都能找到自己的“家”,形成了初步的K类。
进一步,对上一步聚成K类的数据,计算其每一类的均值,形成新的K个中心点
循环,所有的N个记录从新开始找“家”,按照距离最近的方法,
结束,当K个中心点变化不大,或者每次每家的成员固定不变时候,算法结束。
R语言基础包使用:Kmeas()这个函数,函数的参数形式如下:
kmeans(x, centers, iter.max = 10, nstart = 1,
algorithm = c("Hartigan-Wong", "Lloyd", "Forgy",
"MacQueen"), trace=FALSE)
一鸢尾花为例:
data("iris") #加载数据
table(iris$Species) #确定聚类中的个数,
![这里写图片描述](http://img.blog.csdn.net/20171018210331414?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTWFyb18xM3Ro/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
df1 <- subset(iris,select=-Species) #聚类矩阵
df <- kmeans(df1,3) #算法开始,其他参数采用默认值
table(df$cluster) #查看聚类结果
基本上就是这个流程了
print (doc)
“”“
come from sklearn
“””
import numpy as np
from sklearn import datasets
iris = datasets.load_iris()
iris_X = iris.data
iris_Y = iris.target
Split iris data in train and test data
indices = np.random.permutation(len(iris_X))
iris_X_train = iris_X[indices[:-10]]
iris_Y_trian = iris_Y[indices[:-10]]
iris_X_test = iris_X[indices[-10:]]
iris_Y_test = iris_Y[indices[-10:]]
load knn alogrithm
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import confusion_matrix
knn = KNeighborsClassifier()
knn.fit(iris_X,iris_Y)
out_put = knn.predict(iris_X_test)
cm = confusion_matrix(iris_Y_test,out_put)
print (cm)
“`
参考文献:
[1] http://home.deib.polimi.it/matteucc/Clustering/tutorial_html/kmeans.html