機器學習-----K-means算法介紹

一、為什么需要 K-Means?

在監督學習中,我們總把數據寫成
(x, y),讓模型學習 x → y 的映射。
但現實中很多數據根本沒有標簽 y,例如:

  • 啤酒:熱量、鈉含量、酒精度、價格

  • 用戶:訪問時長、點擊次數、消費金額

我們只想知道“這些樣本天然能分成幾類?”
這就是無監督學習——聚類。
K-Means 就是最經典、最易懂、跑得最快的聚類算法之一。

二、K-Means 的思想

隨機撒 k 個“種子”當類中心,
把每個樣本分給最近的種子,
再把種子移到新類的中心,
重復直到種子不再動。

三、算法流程圖解

  1. 選 k:先決定想聚幾類。

  2. 初始化:隨機或 k-means++ 選 k 個質心。

  3. 分配:每個樣本找最近的質心,形成 k 個簇。

  4. 更新:把每個簇的均值當成新質心。

  5. 收斂:質心移動小于閾值或達到最大迭代次數。

四、Python 實戰:啤酒聚類

項目目的:

在沒有人工標簽的情況下,把 20 種啤酒自動分成若干類別,并告訴你到底分幾類最合適

1. 數據準備

我們有一份啤酒數據,只有 4 個數值特征:

表格

啤酒熱量(cal)鈉(mg)酒精(%)價格($)
A150154.52.3
B100103.01.8
2.讀取 & 選特征
import pandas as pd
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import matplotlib.pyplot as pltdata = pd.read_table("data.txt", sep=r'\s+', engine='python')
x = data[['calories', 'sodium', 'alcohol', 'cost']]
3.選 k:輪廓系數法

輪廓系數 (Silhouette Coefficient)

  • 每個樣本計算:

    • a:到同簇其它點的平均距離

    • b:到最近外簇的平均距離

    • s = (b - a) / max(a, b)

  • 取值范圍:[-1, 1]

    • ≈ 1:聚得緊湊且遠離它簇

    • ≈ 0:邊界模糊

    • < 0:可能分錯了簇

用平均輪廓系數挑 k

# 1. 準備一個空列表,用來存放不同 k 值對應的輪廓系數
scores = []# 2. 依次嘗試 k=2,3,...,9,看看聚成幾類效果最好
for k in range(2, 10):# 2-1 用當前 k 值做 K-Means 聚類#     random_state=42 保證結果可重復labels = KMeans(n_clusters=k, random_state=42).fit(x).labels_# 2-2 計算聚類結果的平均輪廓系數(-1~1,越大越緊湊)scores.append(silhouette_score(x, labels))# 3. 把 k 與對應的輪廓系數畫成折線圖,方便肉眼找“峰值”
plt.plot(range(2, 10), scores, marker='o')# 4. 給圖加上坐標軸和標題
plt.xlabel("k")                    # 橫軸:聚類個數
plt.ylabel("Silhouette Score")     # 縱軸:平均輪廓系數
plt.title("選擇最佳 k")             # 圖標題
plt.show()                         # 顯示圖形

規則:選“峰值”對應的 k。

k=2  → 0.69  ← 最高 
k=3  → 0.67   
k=4  → 0.65

那么 k=2?最合適。

④ 正式聚類 & 結果保存

k-means算法中的重要參數:

參數作用常用值
n_clusters類個數根據業務或輪廓系數
init質心初始化'k-means++'(默認)更快更穩
n_init隨機初始化跑幾次10(默認)
random_state復現實驗任意整數
best_k = 2
km = KMeans(n_clusters=best_k, init='k-means++', n_init=10, random_state=42)
data['cluster'] = km.fit_predict(x)
print(data.head())

現在每一行都了一個標簽 cluster = 0 1后續可以做市場細分、推薦策略等。

具體如圖所示:

20種啤酒被聚類成 0,1兩類

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

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

相關文章

Spring Security自動處理/login請求,后端控制層沒有 @PostMapping(“/login“) 這樣的 Controller 方法

一&#xff1a;前言 &#xff08;1&#xff09;Spring Security概念&#xff1a; Spring Security 是屬于 Spring 生態下一個功能強大且高度可定制的認證和授權框架&#xff0c;它不僅限于 Web 應用程序的安全性&#xff0c;也可以用于保護任何類型的應用程序。 &#xff08…

idea開發工具中git如何忽略編譯文件build、gradle的文件?

idea開發工具中&#xff1a; git顯示下面這個文件有變更&#xff1a; ~/Documents/wwwroot-dev/wlxl-backend/java/hyh-apis/hyh-apis-springboot/build/resources/main/mapping/AccountRealnameMapper.xml 我git的根路徑是&#xff1a; ~/Documents/wwwroot-dev/wlxl-backend/…

狀態機淺析

狀態機是處理狀態依賴型行為的高效工具&#xff0c;通過結構化建模狀態轉換&#xff0c;解決了傳統條件判斷的冗余和混亂問題。它在設備控制、流程管理、協議解析等場景中表現優異&#xff0c;核心優勢在于邏輯清晰、可擴展性強和易于調試。 一、介紹 1. 概念 狀態機&#x…

Windows 手動病毒排查指南:不依賴殺毒軟件的系統安全防護

Windows 手動病毒排查指南&#xff1a;不依賴殺毒軟件的系統安全防護 在數字時代&#xff0c;電腦病毒就像潛伏的"網絡幽靈"&#xff0c;從竊取隱私的木馬到消耗資源的蠕蟲&#xff0c;時刻威脅著系統安全。當殺毒軟件失效或遭遇新型威脅時&#xff0c;手動排查病毒便…

GPT-5 is here

GPT-5 is here https://openai.com/index/introducing-gpt-5/ — and it’s #1 across the board! #1 in Text, WebDev, and Vision Arena #1 in Hard Prompts, Coding, Math, Creativity, Long Queries, and more Tested under the codename “summit”, GPT-5 now holds the …

【華為機試】55. 跳躍游戲

文章目錄55. 跳躍游戲題目描述示例 1&#xff1a;示例 2&#xff1a;提示&#xff1a;解題思路一、問題本質與建模二、方法總覽與選擇三、貪心算法的正確性&#xff08;直觀解釋 循環不變式&#xff09;四、反向貪心&#xff1a;等價但有啟發的視角五、與動態規劃的對比與誤區…

RabbitMQ面試精講 Day 18:內存與磁盤優化配置

【RabbitMQ面試精講 Day 18】內存與磁盤優化配置 開篇&#xff1a;內存與磁盤優化的重要性 歡迎來到"RabbitMQ面試精講"系列的第18天&#xff01;今天我們將深入探討RabbitMQ的內存與磁盤優化配置&#xff0c;這是面試中經常被問及的高頻主題&#xff0c;也是生產環…

【C++】string 的特性和使用

Ciallo&#xff5e; (∠?ω< )⌒★ string&#xff08;1&#xff09;1. 構造函數1.1 string();1.2 string(const char* s);1.3 string(const string& str);1.4 string(size_t n, char c);1.5 string(const string& str, size_t pos, size_t len npos);1.6 string(…

創始人IP的精神修煉:于成長中積蓄力量

IP 經濟席卷之下&#xff0c;眾多企業家常被 “是否入局 IP”“能否做好 IP” 的焦慮裹挾。這種潛藏的精神內耗&#xff0c;對企業根基的侵蝕往往勝過業績的起伏。著名文化學者于丹在全球創始人 IP 領袖高峰論壇上的洞見&#xff0c;為創始人 IP 的精神成長照亮了前路&#xff…

gbase8s數據庫中對象元數據查詢

最近整理了gbase8s數據庫中常見的元數據的查詢&#xff0c;包括表、視圖、序列、包、類型、觸發器、plsql等等&#xff0c;僅供參考。set environment sqlmode oracle; drop package DBMS_METADATA; create or replace package DBMS_METADATA is function GET_DDL(objtype varc…

常用hook鉤子函數

爬蟲Hook技術常用字段和勾子函數 目錄 Hook技術概述網絡請求相關Hook瀏覽器環境HookJavaScript引擎Hook加密算法Hook反爬蟲檢測Hook實際應用示例Hook工具和框架 Hook技術概述 Hook&#xff08;鉤子&#xff09;技術是一種在程序運行時攔截和修改函數調用的技術。在爬蟲中&a…

【解決方法】華為電腦的亮度調節失靈

華為電腦的亮度調節失靈 參考文章&#xff1a; 華為電腦屏幕亮度怎么調不了&#xff1f;華為電腦調節亮度沒反應解決教程 親測&#xff0c;在控制面板中卸載HWOSD&#xff0c;再重裝有用。

【軟考中級網絡工程師】知識點之 DCC 深度剖析

目錄一、DCC 是什么1.1 定義闡述1.2 作用講解二、DCC 工作原理2.1 撥號觸發機制2.1.1 感興趣流量定義2.1.2 觸發撥號過程2.2 鏈路建立流程2.2.1 物理鏈路連接2.2.2 數據鏈路層協議協商三、DCC 配置要點3.1 基礎配置步驟3.1.1 接口配置3.1.2 撥號映射配置3.2 高級配置參數3.2.1 …

W5500之Socket寄存器區介紹

W5500之Socket寄存器區介紹1)、Socket n模式寄存器(Socket n Mode Register&#xff0c;簡寫Sn_MR)偏移地址為0x0000&#xff0c;可讀寫&#xff0c;復位值為0x00&#xff1b;Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0MULTI/MFENBCASTBND/MC/MMBUCASTB/MIP6BP3P2P1P0MULTI/MFEN占用“S…

酉矩陣(Unitary Matrix)和隨機矩陣

先討論酉矩陣&#xff08;Unitary Matrix&#xff09;的性質。1. 酉矩陣定義酉矩陣&#xff08;Unitary Matrix&#xff09;是復數域上的方陣&#xff0c;滿足以下條件&#xff1a;其中&#xff1a;是 的共軛轉置&#xff08;即 Hermitian 轉置&#xff0c; &#xff09;。是單…

「iOS」————單例與代理

iOS學習單例代理代理模式的原理代理的循環引用設計模式單例 優點&#xff1a; 全局訪問&#xff1a;單例模式確保一個類只有一個實例&#xff0c;并提供全局訪問點&#xff0c;方便在整個應用中共享數據或功能。節省資源&#xff1a;由于只創建一個實例&#xff0c;可以減少內…

Microsoft Dynamics AX 性能優化解決方案

一、方案背景Microsoft Dynamics AX 是功能強大的企業ERP系統&#xff0c;雖然Microsoft 已推出基于云的現代化 ERP 平臺 Dynamics 365 Finance and Operations&#xff0c;提供了更高的性能和持續更新&#xff0c;用來替代Dynamics AX。在考慮升級到Dynamics 365之前&#xff…

ARM保留的標準中斷處理程序入口和外設中斷處理程序入口介紹

在ARM架構中&#xff0c;中斷處理是一個關鍵機制&#xff0c;它允許CPU在執行主程序時能夠響應外部或內部的事件。對于ARM MCU&#xff08;微控制器單元&#xff09;而言&#xff0c;中斷處理程序入口通常分為兩類&#xff1a;ARM保留的標準中斷處理程序入口和外設中斷處理程序…

防火墻環境下的全網服務器數據自動化備份平臺搭建:基于 rsync 的完整實施指南

一、項目總覽 1.內容介紹 本文以 3 臺 CentOS 7.9 服務器&#xff08;Web 服務器、NFS 服務器、備份服務器&#xff09;為載體&#xff0c;詳解如何在全防火墻開啟的前提下&#xff0c;搭建一套自動化數據備份平臺&#xff1a;每日自動打包 Web 站點、NFS 共享數據及系統關鍵…

Spring之【Import】

目錄 Import注解 源碼分析 使用示例 ImportSelector 源碼分析 使用示例 DeferredImportSelector 源碼分析 使用示例 ImportBeanDefinitionRegistrar 源碼分析 使用示例 Import注解 源碼分析 處理組件類上的Import注解 將Import引入類對應的BeanDefinition對象添加…