目錄
- 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、如果計算得出的新中心點與原中心點一樣,那麼結束,否則重新進行第二步過程
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()
運作結果:
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