【學習筆記】非監督學習-k-means


無監督學習,顧名思義,就是不受監督的學習,一種自由的學習方式。該學習方式不需要先驗知識進行指導,而是不斷地自我認知,自我鞏固,最后進行自我歸納,在機器學習中,無監督學習可以被簡單理解為不為訓練集提供對應的類別標識(label),其與有監督學習的對比如下: 有監督學習(Supervised Learning)。

在有監督學習中,我們把對樣本進行分類的過程稱之為分類(Classification),而在無監督學習中,我們將物體被划分到不同集合的過程稱之為聚類(Clustering)。

k-means

K-means通常被稱為勞埃德算法,這在數據聚類中是最經典的,也是相對容易理解的模型。算法執行的過程分為4個階段。

  • 1、隨機設置K個特征空間內的點作為初始的聚類中心
  • 2、對於其他每個點計算到K個中心的距離,從中選出距離最近的⼀個點作為⾃⼰的標記
  • 3、接着對着標記的聚類中心之后,重新計算出每個聚類的新中心點(平均值)
  • 4、如果計算得出的新中心點與原中心點一樣,那么結束,否則重新進行第二步過程

k-means API

sklearn.cluster.KMeans(n_clusters=8,init='k-means++')

  • k-means聚類
  • n_clusters:開始的聚類中心數量
  • init:初始化方法,默認為'k-means ++'
  • labels_:默認標記的類型,可以和真實值比較(不是值比較)

k-means對Instacart Market用戶聚類

import pandas as pd
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

products = pd.read_csv('data/instacart-market-basket-analysis/products.csv')
order_products__prior = pd.read_csv('data/instacart-market-basket-analysis/order_products__prior.csv', nrows=3000000)
orders = pd.read_csv('data/instacart-market-basket-analysis/orders.csv', nrows=3000000)
aisles = pd.read_csv('data/instacart-market-basket-analysis/aisles.csv')

# merge the four 
_mg = pd.merge(order_products__prior, products, on=['product_id', 'product_id'])
_mg = pd.merge(_mg, orders, on=['order_id', 'order_id'])
mt = pd.merge(_mg, aisles, on=['aisle_id', 'aisle_id'])

cross = pd.crosstab(mt['user_id'], mt['aisle'])

# 降緯
pca = PCA(n_components=0.9)
data = pca.fit_transform(cross)

# 把樣本數量減少
x = data[:1000]

km = KMeans(n_clusters=4)
km.fit(x)
predict = km.predict(x)

plt.figure(figsize=(20, 8))
colored = ['orange', 'green', 'blue', 'red']
colr = [colored[i] for i in predict]

plt.scatter(x[:, 1], x[:, 20], color=colr)
plt.xlabel("2")
plt.ylabel("10")

plt.show()

運行結果:

Kmeans性能評估指標

Kmeans性能評估指標API

sklearn.metrics.silhouette_score(X, labels)

  • 計算所有樣本的平均輪廓系數
  • X:特征值
  • labels:被聚類標記的目標值

計算上例中的輪廓系數:

# 輪廓系數
silhouette_score(x, predict)

輸出結果:

0.32277181074848377

Kmeans總結

特點分析:采用迭代式算法,直觀易懂並且非常實用

缺點:容易收斂到局部最優解(多次聚類)
需要預先設定簇的數量(k-means++解決)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM