網頁

2019年7月26日 星期五

Data Science K-means Clustering – In-depth Tutorial with Example

最流行的機器學習算法之一是K-means clustering。 它是一種無監督學習算法,意味著它用於未標記的數據集。 想像一下,你有幾個點分佈在一個n維空間。 為了根據它們的相似性對這些數據進行分類,您將使用K-means clustering演算法。 在本文中,我們將詳細介紹此演算法。 然後,我們將討論基本Python函式庫可用於實現此演算法。

K-means clustering演算法是一種無監督技術,按照它們的相似性順序對數據進行分組。 然後,我們在有k-clusters數據中找到模式。 這些集群基本上是基於它們的相似性聚合的數據點。 讓我們開始K-means Clustering教學,簡要介紹一下群集。

K-means Clustering-01

What is Clustering?
想像一下,你有一組巧克力和甘草糖。 你需要將兩個食物分開。 直觀地,您可以根據它們的外觀將它們分開。 將對象基於它們各自的特徵分成團的過程稱為集群(Clustering)。

集群用於各種領域,如圖像識別,模式分析,醫學信息學,基因組學,數據壓縮等。它是機器學習中無監督學習算法的一部分。 這是因為存在的數據點沒有標記,並且沒有輸入和輸出的顯式映射。 因此,基於內部存在的模式,發生集群。

What is K-means Clustering?
根據K-means clustering的形式定義 -  K-means clustering是一種迭代演算法,它將包含n個值的一組數據劃分為k個子組。 n值中的每一個都屬於具有最接近平均值的k cluster。

這意味著給定一組對象,我們將該組分成幾個子組。 這些子組基於它們的相似性以及子組中每個數據點的距離與它們的質心的平均值所形成。 K-means clustering是無監督學習演算法裡最流行的形式。 它易於理解和實施。

K-means clustering的目的是最小化歐幾里德距離,也就是每個點與cluster質心的距離。 這稱為intra-cluster variance,可以使用以下平方誤差函數進行最小化 -

Squared Error Function

其中J是cluster質心的目標函數。 K是cluster的數量,n是個案的數量。 C是質心數,j是cluster數。 X是給定的數據點,我們必須決定X與質心的歐幾里德距離。 讓我們看一下K-means clustering的演算法 -
(i) 首先,我們隨機初始化並選擇k點。 這些k點是工具。
(ii) 我們使用歐幾里德距離來找到最接近cluster中心的數據點。
(iii) 然後我們計算cluster中所有點的平均值來找到其質心。
(iv) 我們迭代地重複步驟1,2和3,直到將所有點分配給它們各自的clusters。

K-Means是一種非層次clustering方法。

K-Means in Action
在本節中,我們將利用Python函式庫產生隨機數據來執行K-means。

首先,我們導入基本Python庫來執行k-means演算法 -

  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. from sklearn.cluster import KMeans
然後,我們隨機生成200個值,每個值分為兩個clusters,每個cluster擁有100個數據點。

  1. x = -2 * np.random.rand(200,2)
  2. x0 = 1 + 2 * np.random.rand(100,2)
  3. x[100:200, :] = x0
我們繼續繪製生成的隨機值並獲得下圖。

  1. plt.scatter(x[ : , 0], x[ :, 1], s = 25, color='r')
  2. plt.grid()
K-means clustering

從上圖中,我們觀察到在兩個clusters中劃分了大約200個數據點,其中每個cluster包含100個數據點。

在繪製了兩個clusters之後,我們繼續執行我們的k-means學習演算法來為我們的cluster建立質心。 我們啟動k,它代表隨機值為3的集群。

  1. Kmean = KMeans(n_clusters=3)
  2. Kmean.fit(x)
在此之後,我們繼續找到兩個clusters的質心的位置。 輸入以下代碼後,我們獲得以下結果 -

  1. Kmean.cluster_centers_
然後我們繼續可視化我們兩個clusters的質心:

  1. plt.scatter(2.03078996, 2.05446538, s=100, color='green')
  2. plt.show()
我們獲得以下圖表 -

Centroids for two clusters

在上面的可視化中,我們獲得了兩個clusters的質心。 現在,我們將測試我們的模型。 在測試階段,首先我們將顯示兩個標籤(0,1)分佈代表兩個clusters。

  1. Kmean.labels_
我們可以從上面的輸出中清楚地看到,100個值屬於標籤0,100個值屬於標籤1。

現在,我們預測一個給定數據點位於二維空間中位置(4,5)的cluster。

  1. sample_test=np.array([4.0,5.0])
  2. second_test=sample_test.reshape(1, -1)
  3. Kmean.predict(second_test)
從上面的代碼中,我們可以得出結論,K-means clustering是一種容易理解,並且容易執行的演算法。 我們現在來看一下K-means clustering的一些實際應用。

Applications of K-Means Clustering Algorithm
(i) K-means演算法用於商業領域來識別用戶進行購買部分。 它還用於網站上的群集活動。
(ii) 它被用於破壞性資料壓縮技術(lossy image compression technique)的一種形式。 在圖像壓縮中,K-means用於群集圖像的像素,從而減小其整體尺寸。
(iii) 它也用於文件分群來查找相關文檔。
(iv) K-means用於保險和欺詐檢測領域。 根據以前的歷史數據,可以根據欺詐模式的集群接近程度來分群欺詐行為和索賠。
(v) 它還用於根據聲音的相似模式對聲音進行分類,並隔離語音中的瑕疵。
(vi) K-means clustering用於通聯記錄(Call Detail Record, CDR)分析。 它可以根據當天的通話量和場所的人口統計信息深入了解客戶需求。

Summary
因此,在這個K-means clustering教學中,我們了解了它的基礎知識。 我們理解它的定義和使用的演算法。 我們還使用Python函式庫進行代碼。 最後,我們經歷了K-means clustering的實際應用。 作為數據科學家,了解這種clustering演算法至關重要。 因為它教你處理未標記的數據,所以對於任何嶄露頭角的數據科學家來說,它都是必備的技能。

K-means是一種機器學習演算法,它構成了一個更大的數據操作池的一部分,稱為數據科學(Data Science)。 現在是探索數據科學一切的最佳時機。



參考
https://data-flair.training/blogs/k-means-clustering-tutorial/?fbclid=IwAR0rba-RVvye4VQBtCi8z9I-8mpsvi6-VBpOoBz1sfmhDieSFMbG5Cx-Vhg

沒有留言:

張貼留言