kmeans python_k-means python实践
#coding=utf-8
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
import sklearn.datasets as ds
import matplotlib
matplotlib.rcParams['font.sans-serif'] = [u'SimHei']
matplotlib.rcParams['axes.unicode_minus'] = False
#生成測試數據
#生成維度為2,個數為200個的樣本點。其中有4個聚類中心。每一個簇的方差分別為1,2,2,1
data,y = ds.make_blobs(200,n_features=2,centers=4, cluster_std=[1,2,2,1], random_state=3)
#繪制樣本點
colors=['red','yellow','blue','black']
plt.title(u"原始數據")
plt.subplot(211)
for i in range(4):
plt.scatter(data[y==i][:,0],data[y==i][:,1],color=colors[i])
#開始聚類
model = KMeans(n_clusters=4,init="k-means++")
model.fit(data,y)
#pre_y = model.fit(data,y)
#分類結果
pre_y = model.labels_
#對比分類效果
plt.title(u"聚類數據")
plt.subplot(212)
for i in range(4):
plt.scatter(data[pre_y==i][:,0],data[pre_y==i][:,1],color=colors[i])
plt.show()
#假設我們不知道有幾個簇,可以通過下面的方法來解決
a = []
for i in range(1,10):
model = KMeans(n_clusters=i,init="k-means++")
model.fit(data)
#model.inertia_ 表示每一個樣本點到自己的聚類中心的距離的平方和的和。越小表示聚類效果越好
a.append(model.inertia_)
a = np.array(a)
plt.plot(range(1,10),a/100)
plt.show()
#根據最后的圖形可知最好的簇中心數為4
總結
以上是生活随笔為你收集整理的kmeans python_k-means python实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: json取数据怎么取_干货速递丨书名应该
- 下一篇: java list初始值null_关于l