Kmeans

k-means聚类算法的实现和可视化

2019-01-13  本文已影响4人  何同尘

非监督算法

k-means是一个非监督算法,以前我们学的都是监督算法或者半监督算法,例如多元回归,贝叶斯判别,支持向量机,随机森林算法等。而这种距离算法则是非监督算法。

PS:常见的聚类方法有:系统聚类法,k均值聚类法
系统聚类法是计算所有数据之间的距离,根据不同的分类数,迭代,直到全部不能分为止,意思是你想要多少类都能分给你。

聚类算法

聚类算法根据数据之间的相似性或者距离将数据分为几个簇,簇与簇之间不同。

k-means 聚类算法

在这个算法中,我们需要提前指定数据可能分成的堆数,每个数据对象在不同的堆里都不同。

两个距离:(距离体现了他们之间的差异性)
个体与个体之间的距离
类与类之间的距离
距离的计算种类:马氏距离,欧氏距离,明氏距离等

每一个簇都有聚类中心,根据数据到聚类中心的距离,把它归为哪一类。

算法实施流程

利用python实施

工具:python3.6 sklearn iris

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

iris = pd.read_csv('iris.csv')

X = iris.iloc[:,1:5]
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3,random_state=0)
kmeans.fit(X)

labels = kmeans.labels_
labels = pd.DataFrame(labels,columns=['labels'])
X.insert(4,'labels',labels)

from sklearn.manifold import TSNE
tsne = TSNE()
a = tsne.fit_transform(X)
liris = pd.DataFrame(a,index=X.index)

d1 = liris[X['labels']==0]
#plt.plot(d1[0],d1[1],'r.')
d2 = liris[X['labels']==1]
#plt.plot(d2[0],d2[1],'go')
d3 = liris[X['labels']==2]
#plt.plot(d3[0],d3[1],'b*')
plt.plot(d1[0],d1[1],'r.',d2[0],d2[1],'go',d3[0],d3[1],'b*')
聚类结果

结论

结果不太理想,因为我用的是鸢尾花的数据,该数据适合用来做判别分析。
sklearn里还有很多好用的功能,这倒是一个新发现。

上一篇下一篇

猜你喜欢

热点阅读