K-means 算法【python,算法,機器學習】

K-means 算法試圖將數據集中的樣本劃分為若干個子集,每個子集稱為一個簇,通過該算法使得每個聚類內的數據點盡可能相似(即距離該聚類的中心點最近),而不同聚類之間的數據點盡可能不相似。

算法步驟如下:

  1. 從樣例數據中隨機選擇k個點作為初始質心,k表示簇的個數。

  2. 根據質心點循環進行計算分類。當質心點不發生變化時,結束循環,返回最終的質心點。詳細計算步驟如下:

    1. 根據質心計算每個點到質心的歐氏距離。
    2. 對于每個數據點,尋找距離最近的質點歸類。
    3. 計算每個簇中數據點的平均距離。
    4. 以該平均值作為新的質點,繼續計算。

    舉個例子,假設計算得到的歐式距離數據如下:

    [[1,2,3],[2,3,1],[4,5,6],[7,6,4]....[3,1,2]]
    

    表示有 3 個簇,樣本數據的第一個點距離這三個質點的距離分別為 1、2、3,第二個點距離三個質點的距離分別為 2、3、1,后邊的數據依次類推。那么會將第一個點分類到簇 1,第二點分類到簇 3,依次類推。

  3. 根據第 2 步驟得到的質心點,計算獲取簇數據。參考 2.1-2.2 步驟。

如下是根據你的需求給出的 Python 示例代碼,請在你的環境上提前安裝pandas庫和numpy庫。

import random
import numpy as np
import pandas as pd# 計算歐氏距離
def euclidean_distance(dataset, centroids, k):clalist = []for data in dataset:# 平鋪數據,計算每個點到質心的距離diff = np.tile(data, (k, 1)) - centroidssquared_diff = diff ** 2squared_dist = np.sum(squared_diff, axis=1)distance = squared_dist ** 0.5clalist.append(distance)# 返回一個每個點到質點的距離的數組clalist = np.array(clalist)return clalist# 分類并計算變化量
def classify(dataset, centroids, k):# 計算單個點到每個質心的的距離# 數據結構為:[[1,2,3],[2,3,1],[4,5,6],[7,6,4]....[3,1,2]]# 表示有三個質心,數組中的第一個元素表示樣本的第一個點分別到三個質心的距離clalist = euclidean_distance(dataset, centroids, k)# 對于每個點,將會分配到距離它最近的質心,這里給出的是分類結果的索引min_dist_indices = np.argmin(clalist, axis=1)# 按照 min_dist_indices 進行統計分類,對分類結果求均值new_centro_ids = pd.DataFrame(dataset).groupby(min_dist_indices).mean()new_centro_ids = new_centro_ids.values# 計算變化量changed = new_centro_ids - centroidsreturn changed, new_centro_ids# k-means 算法
def kmeans(dataset, k):# 隨機取質心centroids = random.sample(dataset, k)# 更新質心,直到變化量全為 0changed, new_centro_ids = classify(dataset, centroids, k)while np.any(changed != 0):changed, new_centro_ids = classify(dataset, new_centro_ids, k)centroids = sorted(new_centro_ids.tolist())# 根據質心計算每個集群cluster = []clalist = euclidean_distance(dataset, centroids, k)min_dist_indices = np.argmin(clalist, axis=1)for _ in range(k):cluster.append([])for data_idx, cluster_idx in enumerate(min_dist_indices):cluster[cluster_idx].append(dataset[data_idx])return centroids, cluster# 創建數據集
dataset = [[1, 1], [1, 2], [2, 1], [6, 4], [6, 3], [5, 4]]
# k-means 算法
centroids, cluster = kmeans(dataset, 2)
print('質心為:{}'.format(centroids))
print('集群為:{}'.format(cluster))

上述代碼中,定義了一個主函數kmeans和兩個輔助函數classifyeuclidean_distance,創建了一個數據集dataset,主函數接受數據集dataset和聚類的類別數k作為輸入,然后調用兩個輔助函數實現聚類計算的功能。

需要注意的是,K-means 算法雖然有效,但是容易受到初始簇質心的情況而影響,有可能陷入局部最優解。

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

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

相關文章

Kubernetes 的命令行工具kubectl介紹

目錄 1. 查看資源狀態2. 創建資源3. 描述資源4. 更新資源5. 刪除資源6. 暴露服務7. 狀態檢查與故障排查8. 擴縮容9. 自動補全10. 上下文管理11. 查看事件12. 資源編輯 kubectl 是 Kubernetes 的命令行工具,它用于與 Kubernetes 集群進行交互,執行各種管理…

Vu2之使用provide與inject傳遞數據案例

Vu2之使用provide與inject傳遞數據案例 在Vue 2中,provide 和 inject 是一對用于在組件樹中傳遞數據的高級選項。它們允許祖先組件向其所有子孫后代組件提供數據,而無需顯式地通過 props 或事件進行傳遞。 provide 選項是在祖先組件中聲明的,…

運維別卷系列 - 云原生監控平臺 之 03.prometheus label 實踐

文章目錄 [toc]label 簡介自定義標簽relabel_configsregexrelabel_action metric_relabel_configs兩者的區別 實踐 label 簡介 label 對于 Prometheus 來說,屬于數據處理的方式,Prometheus 是通過指定的 label 來查詢數據 Prometheus 的 target 中實例&…

css 步驟條虛線漸變色效果實現

效果如圖所示&#xff1a; 思路&#xff1a; 使用元素覆蓋的方式實現視覺上虛線的效果 實現代碼&#xff1a; html布局 <ul class"details-cont"><li class"details-li" v-for"item in 3" :key"item"><div class&qu…

(教程)gpt-4o如何使用,怎么體驗?gpt-4o和gpt-4-turbo的區別

今天OpenAI發布了gpt-4o&#xff0c;我體驗之后&#xff0c;gpt-4o簡直逆天了。中文能力也挺別強。速度比現在的gpt4還要快。 早在 5 月 11 日&#xff0c;Sam 就在推文中表示&#xff1a;OpenAI 并沒有推出 GPT-5&#xff0c;或搜索引擎&#xff0c;但團隊一直在努力研發一些…

Git版本控制工具的原理及應用詳解(一)

本系列文章簡介&#xff1a; 隨著軟件開發的復雜性不斷增加&#xff0c;版本控制成為了開發團隊中不可或缺的工具之一。在過去的幾十年里&#xff0c;版本控制工具經歷了各種發展和演變&#xff0c;其中Git無疑是目前最受歡迎和廣泛應用的版本控制工具之一。 Git的出現為開發者…

Nodejs 第七十章(OSS)

OSS OSS&#xff08;Object Storage Service&#xff09;是一種云存儲服務&#xff0c;提供了一種高度可擴展的、安全可靠的對象存儲解決方案 OSS 對象存儲以對象為基本存儲單元&#xff0c;每個對象都有唯一的標識符&#xff08;稱為對象鍵&#xff09;和數據。這些對象可以…

【保姆級介紹下運維】

&#x1f308;個人主頁: 程序員不想敲代碼啊 &#x1f3c6;CSDN優質創作者&#xff0c;CSDN實力新星&#xff0c;CSDN博客專家 &#x1f44d;點贊?評論?收藏 &#x1f91d;希望本文對您有所裨益&#xff0c;如有不足之處&#xff0c;歡迎在評論區提出指正&#xff0c;讓我們共…

編譯安裝Python3

1、源碼安裝 1、安裝依賴軟件包 yum -y install gcc gcc-c zlib-devel bzip2-devel openssl-devel sqlite-devel readline-devel libffi-devel # python3.7版本安裝 2、下載 curl -o python3.6.5.tgz https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz // 或者 w…

2024年小學生古詩文大會備考:吃透歷年真題和知識點(持續)

根據往年的安排&#xff0c;2024年小學生古詩文大會預計這個月就將啟動。該如何備考2024年小學生古詩文大會呢&#xff1f;根據往期的經驗&#xff0c;只要吃透這些真題和背后的知識點&#xff0c;通過上海小學生古詩文大會的初選&#xff08;初賽&#xff09;一點問題都沒有。…

數據庫SQL語言實戰(八)

目錄 練習題 題目一 題目二 題目三 題目四 題目五 題目六 題目七 題目八 題目九 題目十 練習題 題目一 找出年齡小于20歲且是“物理學院”的學生的學號、姓名、院系名稱,按學號排序 create or replace view test6_01 as select S.sid,S.name,S.dname fr…

Myql 數據庫采用RAID存儲帶來電池充放電問題原因以及處理方式

一. 背景 Mysql作為數據庫, 在某些特定情況下會采用RAID&#xff08;冗余磁盤陣列&#xff09;進行存儲. 以保證數據庫的性能以及可靠性. 1.1. RAID種類 RAID&#xff08;冗余磁盤陣列&#xff0c;Redundant Array of Independent Disks&#xff09;是一種用于數據存儲的技術…

淺析Free RTOS中Queue的應用

目錄 概述 1 認識Queue 1.1 Queue定義 1.2 FreeRTOS中的Queue 1.3 Queue狀態 1.4 Queue內容 1.5 發送和接收Message 1.5.1 發送message 1.5.2 接收Message 2 Queue的特性 2.1 數據存儲 2.2 可被多任務存取 2.3 讀Queue時阻塞 2.4 寫Queue時阻塞 3 使用Queue 3.1…

怎么把圖片上的字去掉

將圖片上的字去掉通常需要使用圖像編輯軟件或在線工具。以下是一些常用的方法和步驟&#xff1a; 使用Adobe Photoshop&#xff1a; 打開Photoshop&#xff0c;導入需要編輯的圖片。 選擇“橡皮擦工具”或“克隆圖章工具”。 如果使用“橡皮擦工具”&#xff0c;調整橡皮擦的…

YOLOv9改進策略 | 低照度圖像篇 | 2024最新改進CPA-Enhancer鏈式思考網絡(適用低照度、圖像去霧、雨天、雪天)

一、本文介紹 本文給大家帶來的2024.3月份最新改進機制&#xff0c;由CPA-Enhancer: Chain-of-Thought Prompted Adaptive Enhancer for Object Detection under Unknown Degradations論文提出的CPA-Enhancer鏈式思考網絡&#xff0c;CPA-Enhancer通過引入鏈式思考提示機制&am…

【提示學習論文】TCP:Textual-based Class-aware Prompt tuning for Visual-Language Model

TCP:Textual-based Class-aware Prompt tuning for Visual-Language Model&#xff08;CVPR2024&#xff09; 基于文本的類感知提示調優的VLMKgCoOp為baseline&#xff0c;進行改進&#xff0c;把 w c l i p w_{clip} wclip?進行投影&#xff0c;然后與Learnable prompts進行…

樹莓派|角速度和加速度傳感器

角速度傳感器和加速度傳感器是常見的慣性傳感器&#xff0c;常用于測量物體的旋轉和線性運動。 角速度傳感器&#xff08;Gyroscope&#xff09;用于測量物體繞三個軸&#xff08;X、Y、Z&#xff09;的旋轉速度或角速度。它可以提供關于物體在空間中的旋轉方向和角度變化的信…

時光知識付費系統,如何制定適合自己的課程?該如何做?

在線教育平臺的網課非常多&#xff0c;而且課程之間的相似度非常高&#xff0c;不同是教的老師不同。很多人在制定課程的時候&#xff0c;通常都是被廣告吸引的&#xff0c;之后發現課程不是自己想要的&#xff0c;并不適合自己。 想要制定適合自己的課程&#xff0c;首先要清楚…

計算機視覺與深度學習實戰:以Python為工具,基于特征匹配的英文印刷字符識別

注意:本文的下載教程,與以下文章的思路有相同點,也有不同點,最終目標只是讓讀者從多維度去熟練掌握本知識點。 下載教程:計算機視覺與深度學習實戰-以MATLAB和Python為工具_基于特征匹配的英文印刷字符識別_項目開發案例教程.pdf 一、引言 隨著人工智能技術的飛速發展,計…

用爬蟲解決問題

使用爬蟲解決問題是一個常見的技術手段&#xff0c;特別是在需要自動化獲取和處理大量網頁數據的情況下。以下是一個詳細的步驟說明&#xff0c;包括如何使用 Python 和常用的爬蟲庫&#xff08;如 requests 和 BeautifulSoup&#xff09;來構建一個簡單的爬蟲&#xff0c;解決…