機器學習演算法實踐 K均值聚類的實用技巧

2021-09-23 10:06:06 字數 2402 閱讀 2538

bilal mahmood:我們最常做的分析之一,便是在資料中提取模式。 比方說,某公司的客戶可被劃分入哪些細分市場? 我們如何在使用者網路中找到特定群體的聚類?

通過機器學習的方式,我們可以得到這些問題的答案。 即使當我們不知道需要查詢哪些特定資料段,亦或我們的資料格式是非結構化資料,我們都可以有這麼一種技術手段,在演算法上,分析出資料中合理的資料模式,合適的資料段和分類結果。

在本文中,我們將會詳細介紹一種演算法,k-means clustering(k均值聚類),包括如何衡量其效果,以及如何確定我們要生成的資料段集數量。

在資料分類領域裡,有兩種有效的機器學習方式。

通過監督學習,如果你搞清楚哪些輸入能對映到哪些離散資料段,便可以對結果的分類做**。 但在許多情況下,實際上不會有這些預定義好的標籤,而只有非結構化資料——根本沒有定義好的資料段。這時,您可能就需要借助無監督學習,從未標記的資料中推理出目標資料段。

為了更清楚一些,我們以分類t恤尺寸為例

如果我們拿到如圖1a所示資料集,我們將有一組寬度(x1)和長度(x2)的輸入,以及他們對應的t恤衫尺寸(s(藍色)l(綠色)) 。 在這種情況下,我們就可以通過監督學習的技術,如邏輯回歸,來繪製乙個明確的決策邊界,並分離出各類t恤。

但如果我們得到乙個如圖1b所示的資料集,我們得到一組寬度(x1)和長度(x2)的輸入,但沒有對應的t恤衫尺寸標籤。 在這種情況下,我們就需要使用k均值聚類等無監督式學習技術,來找到相似的t恤衫,並將它們聚集到小(藍色圓圈)和大(綠色圓圈)的各個類中。

在現實世界的許多應用中,你將面臨如圖2a所示的情況,因此搞明白如何從非結構化的資料中提取出結構,會有很大的用處。

k均值聚類給無監督機器學習提供了乙個非常直觀的應用,在非結構化的資料中歸納出結構,

k均值聚類,正如其名,會將您的資料中相似的觀察結果,分配到同組簇中。 它包括4個簡單重複的步驟,迭代地評估對每個觀察值有最近(平均)距離的簇。 因此,如果一組觀察結果彼此接近,它們可能屬於一組簇。

讓我們逐步細細了解該演算法。 第一步,隨機初始化一組聚類中心(上面圖2a中的x),或者說,是各組簇的中心。在開始之前,你可以將這些聚類中心設定在任何地方,但我們建議,在你對其初始化的時候,用與你設定的觀察值相匹配的隨機點。您將依次利用這些類中心,來對你的觀察值進行分組,將那些與類中心平均距離最近的觀察值(圖2b中的藍色和綠色圓圈)確定乙個聚類歸屬。

該步驟會將資料初始化成幾組簇,將你的資料中與類中心最接近的觀察值聚集到一起。 但是這些第一次分配後的資料簇,可能不是十分合適的。 所以下一步,你會將你的聚類好的資料簇移動到乙個更接近,更合適的位置。即在每個當前已有的各個簇中 找到它們的平均觀察值,然後你的聚類中心移動到該位置來(圖2c)。 然後,以新的聚類中心為基準,找到的平均距離最近的觀察值,並將其分配到新的簇(圖2d)

您可以重複進行此過程:簇分配-查詢平均距離-移動聚類中心,直到達到收斂。 一旦你找到了一組簇,而且其中所有的觀察值都能找到最接近的聚類中心,那就不需要再繼續評估最近的平均距離和移動了。 那些分組在一起的觀察值將被聚類,這樣的話它們可以在輸入中共享相似性(如由它們對同一聚類中心所表現出的接近度),你也為你的資料找到了一組合適的聚類方式。

k均值聚類是一種有效的方法,可以為你的資料找到乙個良好的聚類方式。 但仍然有乙個問題,一開始你如何決定要使用多少組簇?

當你不清楚非結構化資料集的標籤或者分類時,需要無監督學習的方式(如k均值聚類)來輔助。 因此,資料本身不會告訴你,簇的正確數量(或標籤)是多少。

那麼,你該如何衡量自己資料用多少組簇呢? 最簡單的方法是利用測量簇的誤差,具體如下:

此函式通過比較觀察值(x)與其指定的聚類中心(μ)之間的距離來評估簇的誤差。 如果每個對應的聚類中心均呈現最低距離,或者最低總體誤差最低,那麼這些聚類中心就是與資料最符合的聚類結果。

回到我們t恤衫尺寸的示例,我們如何使用該誤差函式來確定正確的簇的數目? 一種方法是「肘部法則」,如上圖3所示。 通過繪製資料相對於你初始化的簇的數量的誤差,你可以發現誤差變化率最尖銳的點。 圖3中似乎是在兩個簇的地方,表明我們應該可能去劃分為小和大兩種。

雷鋒網提醒,該方法需要注意:通常在你的誤差曲線中沒有明顯的拐點。 因此,不可能總是使用肘部法則來確定合適數量的簇。

在這種情況下,建議依靠你的直覺或者待解決的問題的上下文。 例如,在t恤尺寸案例中,你可能很清楚你想將t恤分為5種尺寸 - 超小型,小型,中型,大型和超大型。但這並不是資料給你提示清楚的,但基於你的直覺,你可以初始化為五個簇數量,並得到合適的聚類。

總而言之,對於到乙個聚類問題,k均值聚類提供了一種可迭代的並且有效的演算法來發掘資料中的結構。

機器學習實戰 K均值聚類

1.概述 聚類是一種無監督學習,它將相似的物件歸到同乙個簇中。聚類方法幾乎可以應用於所有物件,簇內的物件越相似,聚類的效果越好。k 均值聚類之所以稱為是因為它可以發現k個不同的簇,且每個簇的中心採用簇中所含值的均值計算而成。2.簇識別 cluster identification 簇識別給出聚類結果...

k均值聚類演算法

輸入 簇的數目k和包含n個物件的資料庫。輸出 k個簇,使平方誤差準則最小。演算法步驟 1.為每個聚類確定乙個初始聚類中心,這樣就有k 個初始聚類中心。2.將樣本集中的樣本按照最小距離原則分配到最鄰近聚類 3.使用每個聚類中的樣本均值作為新的聚類中心。4.重複步驟2.3直到聚類中心不再變化。5.結束,...

K 均值聚類演算法

from numpy import 建立元組 dataset 與我們所熟悉的矩陣類似,最終我們將獲得n 2的矩陣,filein open home zengxl pycharmprojects test3 機器學習實戰 ch10 testset.txt 是正斜槓 for line in filein...