機器學習 | 對K-Means聚類假設的研究演示及實踐示例

我們在Scikit-learn對K-means假設的調查中探索了揭示算法優勢和局限性的場景。我們研究了K-means對不正確的聚類大小的敏感性,它在各向異性分布中面臨的困難,它在不同的聚類方差中面臨的困難,以及使用合成數據集的大小不均勻的聚類問題。我們希望這些假設的這種可視化表示將澄清K-means的適用性,并強調選擇特定于數據特征的聚類算法的重要性。

K-Means聚類

一種稱為K-means聚類的無監督機器學習技術用于根據數據中的相似性模式將數據集劃分為離散的組或聚類。該方法包括迭代地將數據點分配到聚類中,并優化每個聚類的質心,以減少每個數據點與分配的質心之間的總平方距離。K-means是一種可擴展且有效的方法來發現數據中的底層結構,它被廣泛用于分割和模式識別任務。K-means雖然簡單,但對于一些具有復雜結構的數據集可能很困難,因為它對初始聚類質心很敏感,并且假設球形,大小相等的聚類。

K-Means聚類中的假設

在我們深入研究代碼之前,讓我們徹底解釋K-Means聚類的幾個基本假設:

  • 球形和各向同性:K-means假設集群是球形和各向同性的,這意味著它們的半徑在所有方向上近似相等。聚類中心被分配給算法根據聚類內數據點的平均值確定的均值。由于這種假設,K-means容易受到非球形或細長聚類的影響。
  • 方差相等:所有聚類都被假設為具有相同的方差。這表明對于每個聚類,聚類中心周圍的數據點分布大致相同。如果聚類的方差差異明顯,則K-means可能無法很好地工作。
  • 聚類大小:聚類大小相似性由K-means算法假設。具有更多數據點的聚類對聚類均值的影響更大,因為算法會將每個數據點分配給具有最接近均值的聚類。如果聚類的大小嚴重失衡,則算法可能無法正確描述底層數據分布。
  • 各向異性分布數據:當K均值聚類中的數據點具有各向異性分布時,它們表示各個維度具有不同擴展的非球形細長聚類。因此,K-means的球形聚類假設被打破,這降低了準確性。對于這種復雜的數據結構,其他技術(如高斯混合模型)可能更合適。

在Scikit Learn中實現k-means假設的演示

導入庫

# immporting Libraries
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobsplt.figure(figsize=(10, 10))# Custom parameters
n_samples_custom = 1600
random_state_custom = 42

合成數據

# Generate blobs with different characteristics
X_custom, y_custom = make_blobs(n_samples=n_samples_custom, random_state=random_state_custom)

這段代碼使用scikit-learn的make_blobs來創建一個包含1600個樣本的合成數據集。然后對數據進行K均值聚類,其中n_clusters=3,聚類以散點圖顯示。為了重現性,參數random_state_custom和n_samples_custom調節數據集的大小和隨機性。

# Incorrect number of clusters
kmeans_1 = KMeans(n_clusters=2, random_state=random_state_custom)
y_pred_custom_1 = kmeans_1.fit_predict(X_custom)plt.subplot(221)
plt.scatter(X_custom[:, 0], X_custom[:, 1], c=y_pred_custom_1)
plt.title("Incorrect Number of Blobs")

在這里插入圖片描述
此代碼將n_clusters=2的K-means聚類應用于合成數據集X_custom。接下來,使用plt.scatter,最終的聚類分配(y_pred_custom_1)顯示在散點圖中。“Incorrect Number of Blobs”子圖是由子圖(221)制成的較大圖的一部分。

各向異性地分布簇

# Anisotropicly distributed data
transformation_custom = [[0.5, -0.8], [-0.3, 0.6]]
X_aniso_custom = np.dot(X_custom, transformation_custom)
kmeans_2 = KMeans(n_clusters=3, random_state=random_state_custom)
y_pred_custom_2 = kmeans_2.fit_predict(X_aniso_custom)plt.subplot(222)
plt.scatter(X_aniso_custom[:, 0], X_aniso_custom[:, 1], c=y_pred_custom_2)
plt.title("Anisotropicly Distributed Blobs")

在這里插入圖片描述
將線性變換(transformation_custom)應用于數據集的原始特征,此代碼將向其添加各向異性。接下來,使用n clusters=3,

K-means對變換后的數據進行聚類(X_aniso_custom)。在名為“Anisotropically Distributed Blobs”的子圖中包含的散點圖中,將顯示最終的聚類指定(y_pred_custom_2)。

不等方差

# Different variance
X_varied_custom, _ = make_blobs(n_samples=n_samples_custom, cluster_std=[1.0, 3.0, 0.5], random_state=random_state_custom)
kmeans_3 = KMeans(n_clusters=3, random_state=random_state_custom)
y_pred_custom_3 = kmeans_3.fit_predict(X_varied_custom)plt.subplot(223)
plt.scatter(X_varied_custom[:, 0], X_varied_custom[:, 1], c=y_pred_custom_3)
plt.title("Unequal Variance")

在這里插入圖片描述
此代碼使用make_blobs函數創建具有不同聚類標準差的數據集(X_varied_custom)。接下來,將n_clusters=3的K均值聚類應用于數據集,并使用標題為“Unequal Variance”的散點圖來可視化聚類分配(y_pred_custom_3)。

大小不一致的blobs

# Unevenly sized blobs
X_filtered_custom = np.vstack((X_custom[y_custom == 0][:500], X_custom[y_custom == 1][:100], X_custom[y_custom == 2][:10]))
kmeans_4 = KMeans(n_clusters=3, random_state=random_state_custom)
y_pred_custom_4 = kmeans_4.fit_predict(X_filtered_custom)plt.subplot(224)
plt.scatter(X_filtered_custom[:, 0],X_filtered_custom[:, 1], c=y_pred_custom_4)
plt.title("Unevenly Sized Blobs")plt.show()

在這里插入圖片描述
此代碼獲取原始數據集(X_custom),并從每個聚類中選擇不同數量的樣本,以創建大小不均勻的數據集(X_filtered_custom)。修改數據集后,應用n_clusters=3的K-means聚類。然后,在名為“Unevenly sized blobs”的子圖中使用散點圖顯示產生(y_pred_custom_4)的聚類分配。plt.show()顯示完整的圖形。

結論

在Scikit-Learn對K-means假設的演示中,我們系統地研究了算法假設可能被打破的場景。當我們從大小不正確的聚類開始時,首次觀察到K均值對聚類數量的敏感性。各向異性分布的引入突出了K-means在管理非球形聚類方面的局限性,因為該算法默認形成球形聚類。對具有不同方差的聚類的調查突出了K均值在處理不均勻分布的聚類時所面臨的困難。最后,不同大小的blob顯示了算法對集群大小變化的敏感程度。每個場景都顯示了可能的危險,強調理解K-means假設并根據數據集的特征選擇合適的聚類方法是多么重要。更可靠的解決方案可以通過替代技術提供,如高斯混合模型,用于各向異性或大小不均勻的簇等復雜結構。該演示強調了根據數據屬性仔細選擇算法的重要性,并為從業者導航聚類算法的微妙之處提供了有用的見解。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/43866.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43866.shtml
英文地址,請注明出處:http://en.pswp.cn/web/43866.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

準備工作+1、請求和響應+2、模型和管理站點

Django快速入門——創建一個基本的投票應用程序 準備工作1、創建虛擬環境2、安裝django 1、請求和響應(1)創建項目(2)用于開發的簡易服務器(3)創建投票應用(4)編寫第一個視圖1、編寫…

家用激光投影儀品牌排行榜:這幾個品牌口碑好產品好最適合家用

現在人們生活水平提升,對投影這類產品的認知接受度也提升,有條件的家庭都想在家里整一個家庭影院,對于這些消費者來說挑選一臺性價比高的家用投影至關重要,既省到錢又買對了產品;投影市場發展迅速目前市面上大大小小的…

華為機考真題 -- 多段線數據壓縮

題目描述: 下圖中,每個方塊代表一個像素,每個像素用其行號和列號表示,但可以發現,這種表示不是最簡的,其實只需要存儲 6 個藍色的關鍵點即可,它們是線段的起點、拐點、終點,而剩下 4 個點是冗余的。現在,請根據輸入的包含有冗余數據的多段線坐標列表,輸出其最簡化的…

mongo數據庫遷移

前言 mongo數據庫遷移的方式目前常見的有兩種: 1,mongodump與mongorestore 2,mongoimport與mongoexport 二者主要區別有: 1、mongoexport 可以導出json和csv格式, mongodump導出的是bson可讀性不如前者 2,…

在Windows 10上快速顯示桌面的幾種方法,總有一種適合你

序言 有時你需要在Windows 10中快速查看你的桌面,但你不想乏味地最小化每個打開的應用程序窗口,或者移動它們并丟失它們的布局。幸運的是,有幾種方法可以讓你快速查看桌面,然后從你停止的地方重新開始。 如何使用任務欄按鈕顯示桌面 假設你正在隨意瀏覽你最喜歡的網站,…

服了,jenkins找不到advanced

新手下載的最新版本,過新手入門的時候一直過不去,就跳過了。 想下載一個漢化,還下載不了。根據提示搜索,結果大家讓去advanced找url,也找不到。

nginx重啟命令linux步驟是什么?

1、驗證nginx配置文件是否正確 方法一:進入nginx安裝目錄sbin下,輸入命令./nginx -t 看到如下顯示nginx.conf syntax is ok nginx.conf test is successful 說明配置文件正確! 方法二:在啟動命令-c前加-t 2、重啟Nginx服務 方法一&#xff1a…

FreeRTOS 隊列

隊列是一種任務到任務、任務到中斷、中斷到任務數據交流的一種機制。在隊列中可以存 儲數量有限、大小固定的多個數據,隊列中的每一個數據叫做隊列項目,隊列能夠存儲隊列項 目的最大數量稱為隊列的長度,在創建隊列的時候,就需要指…

揭秘與應對:病毒偽裝文件夾的數據恢復策略

在數字時代,數據安全是每個人不可忽視的重要議題。而偽裝文件夾,作為一種狡猾的數據安全威脅,正逐漸浮出水面,成為用戶需要警惕的對象。這些偽裝文件夾看似普通,實則隱藏著不為人知的秘密,它們通過模仿正常…

linux系統操作/基本命令/vim/權限修改/用戶建立

Linux的目錄結構: 一:在Linux系統中,路徑之間的層級關系,使用:/來表示 注意:1、開頭的/表示根目錄 2、后面的/表示層級關系 二:在windows系統中,路徑之間的層級關系,使用:\來表示 注意:1、D:表示…

數電票真偽查驗接口、發票查驗接口

數電發票是現代稅務系統升級的重要體現,因其開票流程簡化、發票信息全面數字化、票面版式簡潔化、高效環保等優勢,深受納稅人好評。但隨之而來的數電票真偽查驗問題也讓各位財務小伙伴頭疼不已,那么,數電票如何實現快速、批量、精…

移動應用性能收集工具原理解析

性能收集分析相關工具總覽 收集、分析、展示移動應用性能數據的工具很多,大致可以分為如下幾類。例如可收集多項性能指標的移動性能工具,perfdog,Solopi,其中Solopi開源,pefdog商業工具。可進行Crash分析的工具&#x…

貓超卡怎么使用?

天貓超市卡好像只能買天貓的東西 但是有時候淘寶、京東打折比天貓的單價還便宜 這樣的話,貓超卡好像也沒多大用處 這不,上個月618湊單的東西比在天貓超市買劃算多了 最后我直接把貓超卡在收卡云上折現了,超劃算

Chmod 特殊權限舉例

chmod 4777 的例子: 比如,在安裝某些服務如PostgreSQL時,服務的初始化腳本(如initdb)可能需要以超級用戶(root)的權限運行,以執行一些系統級的操作。在這種情況下,如果你設置 initdb 腳本為 ch…

flink 大數據處理資源分配

Flink在大數據處理中的資源分配是一個復雜但至關重要的過程,它直接影響到作業的性能和穩定性。以下將從幾個方面詳細闡述Flink的資源分配機制和優化策略: 一、資源分配概述 Flink是一個用于無界和有界數據流處理的分布式計算框架,它通過集群…

Git-Updates were rejected 解決

Updates were rejected 1. 雜話2. 問題3. 解決3.1 拉去遠程的最新版本(AC)3.2 解決可能的沖突3.3 提交3.4 再次推送 1. 雜話 大伙兒應該都用過Git吧,具體是個啥東西我就不說了哈。之前我在用git push的時候遇到了這個報錯,我仔細思…

C/C++開發,IniFile源碼下載

C/C開發,IniFile源碼下載。 地址:CIniFile download | SourceForge.net

編程學單詞:delta(希臘字母Δ/δ)

希臘字母表的第四個字母,大寫為Δ,小寫為δ。 (筆記模板由python腳本于2024年07月11日 12:32:56創建,本篇筆記適合喜歡寫代碼,更喜歡鼓搗Python的coder翻閱) 【學習的細節是歡悅的歷程】 Python 官網:https://www.pyth…

算法 | NOIP1999 Cantor表

算法篇——Cantor的數表 - SteveWang - 博客園 (cnblogs.com) #include <bits/stdc.h> using namespace std; int high(int n) {return n*(n1)/2; } int main() {int k;cin>>k;int n1;while(1){if(high(n)>k){break;}n;} int mhigh(n);int wm-k1;if(n%20){cout…

Arcgis Api 三維聚合支持最新版API

Arcgis Api 三維聚合支持最新版API 最近有同學問我Arcgis api 三維聚合&#xff0c;官方還不支持三維聚合API&#xff0c;二維可以。所以依舊是通過GraphicLayers 類來實現&#xff0c;可支持最新Arcgis Api版本 效果圖&#xff1a;