機器學習之無監督演算法k means(聚類)

2021-10-04 23:33:08 字數 2774 閱讀 6616

什麼叫做無監督學習?

資料集只有特徵值但是缺少目標值。不知道自己做得**值是正確或不正確。

k-means

如上圖,每個人的衣著作為每個人特徵,我們將相似的特徵作為乙個類別進行分析。簡稱:「物以類聚,人以群分」。

舉例

k:把資料劃分為多少個類別。例:k=2,則劃分為2個類別;k=3,則劃分為3個類別;k=4,則劃分為4個類別…

一般情況下,我們需要提前知道類別的個數。若不知道類別個數時,則k就是乙個超引數。

當k=3時,

隨機在資料中抽取三個樣本,當作三個樣本的中心點(k1,k2,k3)。

計算其餘的點分別到這三個中心點的距離,每個樣本有三個距離(a,b,c),從中選出距離最近的乙個點作為自己的標記。形成三個族群。

分別計算這三個族群的平均值,把三個平均值與之前三個舊中心點進行比較。如果比較相同,結束聚類;如果不相同,把這三個平均值當作新的中心點。重複第2步。

知識儲備

sklearn.cluster.kmeans(n_clusters=8,init=『k-means++』)

**演示:

import pandas as pd

from sklearn.decomposition import pca

from sklearn.cluster import kmeans

import matplotlib.pyplot as plt

from sklearn.metrics import silhouette_score

defmeans()

:# 讀取四張表的資料

prior = pd.read_csv(

"./data/instacart/order_products__prior.csv"

) products = pd.read_csv(

"./data/instacart/products.csv"

) orders = pd.read_csv(

"./data/instacart/orders.csv"

) aisles = pd.read_csv(

"./data/instacart/aisles.csv"

)# 合併四張表到一張表 (使用者-物品類別)

_mg = pd.merge(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[

:500

]# 假設使用者一共分為四個類別

km = kmeans(n_clusters=4)

km.fit(x)

predict = km.predict(x)

# 顯示聚類的結果

plt.figure(figsize=(10

,10))

# 建立四個顏色的列表

colored =

['orange'

,'green'

,'blue'

,'purple'

] colr =

[colored[i]

for i in predict]

plt.scatter(x[:,

1], x[:,

20], color=colr)

plt.xlabel(

"1")

plt.ylabel(

"20"

)

plt.show(

)# 評判聚類效果,輪廓係數

聚類評估標準

對於每乙個樣本

計算藍1到自身類別的點距離的平均值a_i

計算藍1分別到紅色類別,綠色類別所有的點的距離,求出平均值

藍1:輪廓係數[-1, 1]

通過極端情況考慮:

b1, b2,取其中最小的值當做b_ i

b_i>>a_i: 1 完美

a_i>>b_i:-1 最差

機器學習之無監督聚類問題

通過判斷彼此間的距離來實現聚類 無監督 資料沒有明確說明屬於哪一類,無需去訓練模型 import pandas as pd votes pd.read csv d test machinelearning 114 congress.csv print votes party value counts...

機器學習之無監督聚類問題

無監督 資料沒有明確說明屬於哪一類,無需去訓練模型 import pandas as pd votes pd.read csv d test machinelearning 114 congress.csv print votes party value counts print votes.mea...

機器學習個人筆記(三)之無監督學習

前言 宣告 本定義僅為個人理解,並非是官方專業定義 無監督學習即,讓機器通過某種演算法,自動的從一堆資料集裡區分開來不同屬性的資料,然後當機器具有區分類別的能力之後,再給他乙個他沒見過的樣本,讓他用他的能力來識別這個樣本屬於哪一類。這部分會給出幾個例子來幫助理解什麼是無監督學習。吳恩達的課程裡沒有貓...