iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 19
1
AI & Data

大數據的世代需學會的幾件事系列 第 19

Day19-Scikit-learn介紹(11)_K-Means

  • 分享至 

  • xImage
  •  

今天要來講解K-Means,它是一個常見的非監督式(unsupervised)分群的演算法,他是利用向量距離來做聚類,演算法步驟如下:
https://ithelp.ithome.com.tw/upload/images/20181102/20107244yq8fxlqJST.png

  1. 首先,在n個向量任選m個向量為資料聚類中心的向量
    如上圖,n=300、m=4
  2. 計算每個物件與這個m個中心物件向量的距離
  3. 把計算出來的向量將他與距離他最近的物件向量歸類在一個類叢集
    如上圖其中一點為例,該點距離中心向量A的距離為1;
    距離中心向量B的距離為9;
    距離中心向量C的距離為11;
    距離中心向量D的距離為28
  4. 重新計算每個群集的聚類中心向量位置
  5. 重複計算3、4,直到類聚叢集的向量歸類變化極少為止(代表要確保該點屬於該中心向量的群集)

  • 跟之前一樣,先匯入今天範例的資料集與模組
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
  • 依照剛開始介紹k-means algorithm,我們來建立有300個樣本點,4個中心點
from sklearn.datasets.samples_generator import make_blobs
X, y_true = make_blobs(n_samples=300, centers=4,
                       cluster_std=0.60, random_state=0)
plt.scatter(X[:, 0], X[:, 1], s=50);

https://ithelp.ithome.com.tw/upload/images/20181102/20107244kps4DY3Y1o.png

  • 再來利用SKlearn的KMeans模組,挑出4個中心數據聚類中心
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)

plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')

centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='black', s=200, alpha=0.5);

由上圖,可以看到中心向量物件的位置(陰影部分)
https://ithelp.ithome.com.tw/upload/images/20181102/201072449iGQMePVSI.png

  • 當然有時候資料數據離聚類的中心距離最近,並不一定為同一類別資料,反而會因為鄰居(neighbors)的關係,將資料分類為該類別,而我們匯入SKlearn中SpectralClustering模組來實作:
from sklearn.cluster import SpectralClustering
model = SpectralClustering(n_clusters=2, affinity='nearest_neighbors',
                           assign_labels='kmeans')
labels = model.fit_predict(X)
plt.scatter(X[:, 0], X[:, 1], c=labels,
            s=50, cmap='viridis');

https://ithelp.ithome.com.tw/upload/images/20181102/201072448WaRVn7rVW.png

下一節要講解Gaussian Mixture Models,他是K-mean的延伸,所以這一節要先看懂ㄛ/images/emoticon/emoticon01.gif/images/emoticon/emoticon01.gif


上一篇
Day18-Scikit-learn介紹(10)_ Principal Component Analysis
下一篇
Day20-Scikit-learn介紹(12)_Gaussian Mixture Models
系列文
大數據的世代需學會的幾件事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言