天天看點

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

目錄

  • k-means
  • k-means API
    • k-means對Instacart Market使用者聚類
    • Kmeans性能評估名額
    • Kmeans性能評估名額API
  • Kmeans總結

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

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

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

  • 1、随機設定K個特征空間内的點作為初始的聚類中心
  • 2、對于其他每個點計算到K個中心的距離,從中選出距離最近的⼀個點作為⾃⼰的标記
  • 3、接着對着标記的聚類中心之後,重新計算出每個聚類的新中心點(平均值)
  • 4、如果計算得出的新中心點與原中心點一樣,那麼結束,否則重新進行第二步過程
【學習筆記】非監督學習-k-means

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

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

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()
           

運作結果:

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

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

sklearn.metrics.silhouette_score(X, labels)

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

計算上例中的輪廓系數:

# 輪廓系數
silhouette_score(x, predict)
           

輸出結果:

0.32277181074848377
           

特點分析:采用疊代式算法,直覺易懂并且非常實用

缺點:容易收斂到局部最優解(多次聚類)

需要預先設定簇的數量(k-means++解決)

本文來自部落格園,作者:coder-qi,轉載請注明原文連結:https://www.cnblogs.com/coder-qi/p/10617319.html

繼續閱讀