柚子快報邀請碼778899分享:聚類 機器學習
文章目錄
介紹機器學習下的分類K均值算法K值的選取:手肘法用聚類輔助理解營銷數據貼近項目實戰(zhàn)
介紹機器學習下的分類
以下介紹無監(jiān)督學習之聚類 聚類是最常見的無監(jiān)督學習算法。人有歸納和總結的能力,機器也有。聚類就是讓機器把數據集中的樣本按照特征的性質分組,這個過程中沒有標簽的存在。
聚類和監(jiān)督學習中的分類問題有些類似,其主要區(qū)別在于:傳統(tǒng)分類問題“概念化在前”。機器首先是學習概念,然后才能夠做分類、做判斷。
而聚類不同,雖然本質上也是“分類”,但是“概念化在后”或者“不概念化”,在給一堆數據分組時,沒有任何此類、彼類的概念。
聚類也有好幾種算法,K均值(K-means)是其中最常用的一種。
K均值算法
K均值算法是最容易理解的無監(jiān)督學習算法。算法簡單,速度也不差,但需要人工指定K值,也就是分成幾個聚類。具體算法流程如下。
(1)首先確定K的數值,比如5個聚類,也叫5個簇。(2)然后在一大堆數據中隨機挑選K個數據點,作為簇的質心(centroid )。這些隨機質心當然不完美,別著急,它們會慢慢變得完美。(3)遍歷集合中每一個數據點,計算它們與每一個質心的距離(比如歐氏距離)。數據點離哪個質心近,就屬于哪一類。此時初始的K個類別開始形成。(4)這時每一個質心中都聚集了很多數據點,于是質心說,你們來了,我就要“退役”了(這個是偉大的“禪讓制度”啊!),選一個新的質心吧。然后計算出每一類中最靠近中心的點,作為新的質心。此時新的質心會比原來隨機選的靠譜一些(等會兒用圖展示質心的移動)。(5)重新進行步驟(3),計算所有數據點和新的質心的距離,在新的質心周圍形成新的簇分配(“吃瓜群眾”隨風飄搖,離誰近就跟誰)。(6)重新進行步驟(4),繼續(xù)選擇更好的質心(一代一代地“禪讓”下去)。(7)一直重復進行步驟(5)和(6),不斷更新簇中的數據點,不斷找到新的質心,直至收斂。
通過下面這個圖,可以看到聚類中質心的移動和簇形成的過程。
K值的選取:手肘法
直觀的手肘法(elbow method )進行簇的數量的確定。手肘法是基于對聚類效果的一個度量指標來實現的,這個指標也可以視為一種損失。在K值很小的時候,整體損失很大,而隨著K值的增大,損失函數的值會在逐漸收斂之前出現一個拐點。此時的K值就是比較好的值。 大家看下面的圖,損失隨著簇的個數而收斂的曲線有點像只手臂,最佳K值的點像是手肘,因此取名為手肘法。
用聚類輔助理解營銷數據
1.問題定義:為客戶分組 (1)通過這個數據集,理解K均值算法的基本實現流程。 (2)通過K均值算法,給客戶分組,了解每類客戶消費能力的差別。
2.數據讀入
import numpy as np # 導入NumPy
import pandas as pd # 導入pandas
import warnings
warnings.filterwarnings("ignore")
dataset = pd.read_csv('../數據集/Customers Cluster.csv')
dataset.head() # 顯示一些數據
# 只針對兩個特征進行聚類,以方便二維的展示
X= dataset.iloc[:, [2,4]].values
Spending Score:消費分數(歸一化成一個0~1的分數)
3.聚類的擬合 下面嘗試用不同的K值進行聚類的擬合:
from sklearn.cluster import KMeans # 導入聚類模型
cost=[] # 初始化損失(距離)值
for i in range(1,11): # 嘗試不同的K值
kmeans = KMeans(n_clusters= i, init='k-means++', random_state=0)
kmeans.fit(X) # 擬合模型
cost.append(kmeans.inertia_) #inertia_是度量數據點到聚類中心的度量公式
4.繪制手肘圖
import matplotlib.pyplot as plt # 導入Matplotlib
import seaborn as sns # 導入Seaborn
%matplotlib inline
# 繪制手肘圖
plt.plot(range(1,11), cost)
plt.title('The Elbow Method')
plt.xlabel('no of clusters')
plt.ylabel('Cost')
plt.show()
從手肘圖上判斷,肘部數字大概是3或4,我們選擇4作為聚類個數
# 構建聚類模型
kmeansmodel = KMeans(n_clusters= 4, init='k-means++') # 選擇4作為聚類個數
y_kmeans= kmeansmodel.fit_predict(X) # 進行聚類的擬合和分類
5.把分好的聚類可視化
# 把分好的聚類可視化
plt.scatter(X[y_kmeans == 0, 0], X[y_kmeans == 0, 1], s = 100, c = 'red', label = 'Cluster 1')
plt.scatter(X[y_kmeans == 1, 0], X[y_kmeans == 1, 1], s = 100, c = 'blue', label = 'Cluster 2')
plt.scatter(X[y_kmeans == 2, 0], X[y_kmeans == 2, 1], s = 100, c = 'green', label = 'Cluster 3')
plt.scatter(X[y_kmeans == 3, 0], X[y_kmeans == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4')
# plt.scatter(X[y_kmeans == 4, 0], X[y_kmeans == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 300, c = 'yellow', label = 'Centroids')
plt.title('Clusters of customers')
plt.xlabel('Age')
plt.ylabel('Spending Score')
plt.legend()
plt.show()
這個客戶的聚類問題就解決了。其中,黃色高亮的大點是聚類的質心,可以看到算法中的質心并不止一個。
貼近項目實戰(zhàn)
可見 Python綜合數據分析_RFM用戶分組模型
學習機器學習的參考資料: (1)書籍 利用Python進行數據分析 西瓜書 百面機器學習 機器學習實戰(zhàn) 阿里云天池大賽賽題解析(機器學習篇) 白話機器學習中的數學 零基礎學機器學習 圖解機器學習算法 …
(2)機構 光環(huán)大數據 開課吧 極客時間 七月在線 深度之眼 貪心學院 拉勾教育 博學谷 …
柚子快報邀請碼778899分享:聚類 機器學習
相關文章
本文內容根據網絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉載請注明,如有侵權,聯系刪除。