04聚類演算法-程式碼案例一-K-means聚類
本案例資料來源:基於scikit包中的建立模擬資料的API建立聚類資料。
使用__K-means演算法__對資料進行分類操作,並獲得聚類中心點以及總的樣本簇中心點距離和值。
引入包:from sklearn.cluster import KMeans
相關API:https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html
常規操作:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import sklearn.datasets as ds
import matplotlib.colors
from sklearn.cluster import KMeans#引入kmeans
## 設定屬性防止中文亂碼
mpl.rcParams[`font.sans-serif`] = [u`SimHei`]
mpl.rcParams[`axes.unicode_minus`] = False
一、產生模擬資料:
我們用make_blobs方法生成了2組資料:(data,y) 和 (data2,y2)
N = 1500 # 1500個樣本
centers = 4 # 4個聚簇中心點
data,y = ds.make_blobs(N, n_features=2, centers=centers, random_state=28)
data2,y2 = ds.make_blobs(N, n_features=2, centers=centers, random_state=28)
data3 = np.vstack((data[y == 0][:200], data[y == 1][:100],
data[y == 2][:10], data[y == 3][:50]))
y3 = np.array([0] * 200 + [1] * 100 + [2] * 10 + [3] * 50)
二、資料前期處理跟前面模型是一樣
這裡由於資料是自己生成的,所以不做資料預處理了
三、模型的構建
n_clusters就是K值,也是聚類值,本例中定義了centers = 4;
init初始化方法,可以是kmeans++,隨機,或者自定義的ndarray
km = KMeans(n_clusters=centers, init=`random`,random_state=28)
km.fit(data, y)
y_hat = km.predict(data)
print ("所有樣本距離聚簇中心點的總距離和:", km.inertia_)
print ("距離聚簇中心點的平均距離:", (km.inertia_ / N))
cluster_centers = km.cluster_centers_
print ("聚簇中心點:", cluster_centers)
y_hat2 = km.fit_predict(data2)
y_hat3 = km.fit_predict(data3)
四、畫圖
def expandBorder(a, b):
d = (b - a) * 0.1
return a-d, b+d
cm = mpl.colors.ListedColormap(list(`rgbmyc`))
plt.figure(figsize=(15, 9), facecolor=`w`)
1、原始資料
plt.subplot(241)
plt.scatter(data[:, 0], data[:, 1], c=y, s=30, cmap=cm, edgecolors=`none`)
x1_min, x2_min = np.min(data, axis=0)
x1_max, x2_max = np.max(data, axis=0)
x1_min, x1_max = expandBorder(x1_min, x1_max)
x2_min, x2_max = expandBorder(x2_min, x2_max)
plt.xlim((x1_min, x1_max))
plt.ylim((x2_min, x2_max))
plt.title(u`原始資料`)
plt.grid(True)
2、K-Means演算法聚類結果
plt.subplot(242)
plt.scatter(data[:, 0], data[:, 1], c=y_hat, s=30, cmap=cm, edgecolors=`none`)
plt.xlim((x1_min, x1_max))
plt.ylim((x2_min, x2_max))
plt.title(u`K-Means演算法聚類結果`)
plt.grid(True)
m = np.array(((1, 1), (0.5, 5)))
data_r = data.dot(m)
y_r_hat = km.fit_predict(data_r)
3、資料旋轉後原始資料圖
plt.subplot(243)
plt.scatter(data_r[:, 0], data_r[:, 1], c=y, s=30, cmap=cm, edgecolors=`none`)
x1_min, x2_min = np.min(data_r, axis=0)
x1_max, x2_max = np.max(data_r, axis=0)
x1_min, x1_max = expandBorder(x1_min, x1_max)
x2_min, x2_max = expandBorder(x2_min, x2_max)
plt.xlim((x1_min, x1_max))
plt.ylim((x2_min, x2_max))
plt.title(u`資料旋轉後原始資料圖`)
plt.grid(True)
4、資料旋轉後預測圖
plt.subplot(244)
plt.scatter(data_r[:, 0], data_r[:, 1], c=y_r_hat, s=30, cmap=cm, edgecolors=`none`)
plt.xlim((x1_min, x1_max))
plt.ylim((x2_min, x2_max))
plt.title(u`資料旋轉後預測圖`)
plt.grid(True)
5、不同方差的原始資料
plt.subplot(245)
plt.scatter(data2[:, 0], data2[:, 1], c=y2, s=30, cmap=cm, edgecolors=`none`)
x1_min, x2_min = np.min(data2, axis=0)
x1_max, x2_max = np.max(data2, axis=0)
x1_min, x1_max = expandBorder(x1_min, x1_max)
x2_min, x2_max = expandBorder(x2_min, x2_max)
plt.xlim((x1_min, x1_max))
plt.ylim((x2_min, x2_max))
plt.title(u`不同方差的原始資料`)
plt.grid(True)
6、不同方差簇資料的K-Means演算法聚類結果
plt.subplot(246)
plt.scatter(data2[:, 0], data2[:, 1], c=y_hat2, s=30, cmap=cm, edgecolors=`none`)
plt.xlim((x1_min, x1_max))
plt.ylim((x2_min, x2_max))
plt.title(u`不同方差簇資料的K-Means演算法聚類結果`)
plt.grid(True)
7、不同簇樣本數量原始資料圖
plt.subplot(247)
plt.scatter(data3[:, 0], data3[:, 1], c=y3, s=30, cmap=cm, edgecolors=`none`)
x1_min, x2_min = np.min(data3, axis=0)
x1_max, x2_max = np.max(data3, axis=0)
x1_min, x1_max = expandBorder(x1_min, x1_max)
x2_min, x2_max = expandBorder(x2_min, x2_max)
plt.xlim((x1_min, x1_max))
plt.ylim((x2_min, x2_max))
plt.title(u`不同簇樣本數量原始資料圖`)
plt.grid(True)
8、不同簇樣本數量的K-Means演算法聚類結果
plt.subplot(248)
plt.scatter(data3[:, 0], data3[:, 1], c=y_hat3, s=30, cmap=cm, edgecolors=`none`)
plt.xlim((x1_min, x1_max))
plt.ylim((x2_min, x2_max))
plt.title(u`不同簇樣本數量的K-Means演算法聚類結果`)
plt.grid(True)
plt.tight_layout(2, rect=(0, 0, 1, 0.97))
plt.suptitle(u`資料分佈對KMeans聚類的影響`, fontsize=18)
plt.show()
05 聚類演算法 – 二分K-Means、K-Means++、K-Means||、Canopy、Mini Batch K-Means演算法
相關文章
- 14聚類演算法-程式碼案例六-譜聚類(SC)演算法案例聚類演算法
- K-means聚類演算法聚類演算法
- k-means 聚類演算法聚類演算法
- k-means聚類聚類
- 【Python機器學習實戰】聚類演算法(1)——K-Means聚類Python機器學習聚類演算法
- K-Means聚類演算法原理聚類演算法
- 【機器學習】K-means聚類分析機器學習聚類
- 聚類演算法與K-means實現聚類演算法
- 07 聚類演算法 - 程式碼案例三 - K-Means演算法和Mini Batch K-Means演算法效果評估聚類演算法BAT
- 聚類之K均值聚類和EM演算法聚類演算法
- 聚類(part3)--高階聚類演算法聚類演算法
- 聚類演算法聚類演算法
- 演算法雜貨鋪:k均值聚類(K-means)演算法聚類
- 第十三篇:K-Means 聚類演算法原理分析與程式碼實現聚類演算法
- 聚類分析-案例:客戶特徵的聚類與探索性分析聚類特徵
- 機器學習—聚類5-1(K-Means演算法+瑞士捲)機器學習聚類演算法
- 機器學習之k-means聚類演算法(python實現)機器學習聚類演算法Python
- 06聚類演算法-程式碼案例二-K-Means演算法和MiniBatchK-Means演算法比較聚類演算法BAT
- 09聚類演算法-層次聚類-CF-Tree、BIRCH、CURE聚類演算法
- 演算法金 | 一文讀懂K均值(K-Means)聚類演算法演算法聚類
- OPTICS聚類演算法原理聚類演算法
- 初探DBSCAN聚類演算法聚類演算法
- 聚類演算法綜述聚類演算法
- DBSCAN密度聚類演算法聚類演算法
- BIRCH聚類演算法原理聚類演算法
- 聚類之dbscan演算法聚類演算法
- Meanshift,聚類演算法聚類演算法
- 分類 和 聚類聚類
- 各類聚類(clustering)演算法初探聚類演算法
- 聚類分析聚類
- Python+sklearn使用DBSCAN聚類演算法案例一則Python聚類演算法
- k-medoids與k-Means聚類演算法的異同聚類演算法
- 資料分析與挖掘 - R語言:K-means聚類演算法R語言聚類演算法
- 用K-means聚類演算法實現音調的分類與視覺化聚類演算法視覺化
- 可伸縮聚類演算法綜述(可伸縮聚類演算法開篇)聚類演算法
- 深度聚類演算法淺談聚類演算法
- 深度聚類演算法敘談聚類演算法
- Spark中的聚類演算法Spark聚類演算法