聚類-一種無監督分類算法

目錄

?1、聚類任務

2、性能度量

(1)外部指標

(2)內部指標

?3、具體聚類方法

(1)原型聚類

(2)密度聚類

(3)層次聚類


“無監督學習”(unsupervised learning):訓練樣本的標記信息是未知的,目標是通過對無標記訓練樣本的學習來揭示數據的內在性質及規律,為進一步的數據分析提供基礎。“聚類”(clustering)是無監督任務中研究最多,應用最廣
聚類:試圖將數據集中的樣本劃分為若干個通常是不相交的子集聚類既能作為一個單獨過程,用于找尋數據內在的分布結構,也可作為分類等其他學習任務的前驅過程。它本著的是物以類聚,人以群居的這個方式來進行的,它并不需要標簽,但是它能夠把相似的樣本聚成一類
?

?1、聚類任務

2、性能度量

????????原來的時候是帶有標簽的,預測結果和標簽結果進一個比較。這樣的話我就知道我這個聚類到底是分對了還是我分類器是分對了分錯了,但是聚類任務中它是沒有標簽的話我怎么去度量我們這個分類的結果好壞?性能度量主要有兩個,一個是外部指標,一個是內部指標


(1)外部指標

? ? ? ? ? 外部指標是指的是我們在進行對具體方法的好壞進行評價的時候,我們要找一個參考模型

有 了a,b,c,d這些值,就可以計算:

越大越好

(2)內部指標

????????不參考任何模型,只根據聚類結果進行判斷:類內相似度越高越好,類間相似度越差越好。簇內緊湊,簇間分散”

?輪廓系數

?

DB指數?

?距離計算:

????????如果這個屬性中它是離散的,而且它的屬性定義為飛機,火車和輪船。那么,我們怎么去計算飛機和火車之間的距離,怎么去計算火車和輪船之間的距離?通過分布形式比例的形式計算:

?3、具體聚類方法

(1)原型聚類

k-means算法 ※

學習向量量化算法:結合監督信息,通過原型向量(可理解為 “代表性樣本”)學習樣本的類別劃分,適用于帶有標簽的訓練數據。用監督信息輔助優化 “原型簇” 的劃分,核心邏輯仍是通過相似度分組(聚類的本質),因此屬于結合監督信號的聚類算法,監督信息是優化手段,而非改變其聚類的本質屬性。

高斯混合聚類

(2)密度聚類

DBSCAN

(3)層次聚類

????????層次聚類通過構建 “層次樹”( dendrogram )劃分簇,分為凝聚式(自底向上)和分裂式(自頂向下),常用凝聚式方法。

AGNES算法-自底向上

????????現在有一共有30個樣本,那么這30個樣本首先我們去選擇兩兩之間去選擇。兩兩之間進行計算,首先要計算出來最近的兩個樣本,我們發現1和29最近,就把1和29進行合并。合并之后計算它的一個向量均值,得到了一個新的樣本那這樣的話,這個樣本數量從30就變到了29,因為1和29合并了。那么我們再計算這29個和另外的這些兩兩計算它的一個距離。找到其中的最小的值再把它變成合并成為一個新的,那就29變成了28...........這樣兩兩計算的最后越來越小,越來越少,最后就變成了這兩個進行合并變成一類了。

4、代碼實現

import numpy as np
import matplotlib.pyplot as plt# 兩點歐氏距離
def distance(e1, e2):return np.sqrt((e1[0] - e2[0]) ** 2 + (e1[1] - e2[1]) ** 2)# 集合中心
def means(arr):return np.array([np.mean([e[0] for e in arr]), np.mean([e[1] for e in arr])])  # mean用于求取均值   arr存放某一個簇中的點if __name__ == "__main__":## 生成二維隨機坐標(如果有數據集就更好)arr = np.random.randint(0, 100, size=(100, 2))## 初始化聚類中心和聚類容器m = 5  # 聚類個數k_arr = np.random.randint(0, 100, size=(5, 2))  # 隨機初始5個中心cla_temp = [[], [], [], [], []]  # 存放每個簇中的點## 迭代聚類n = 20  # 迭代次數for i in range(n):  # 迭代n次for e in arr:  # 把集合里每一個元素聚到最近的類ki = 0  # 假定距離第一個中心最近min_d = distance(e, k_arr[ki])for j in range(1, k_arr.__len__()):if distance(e, k_arr[j]) < min_d:  # 找到更近的聚類中心min_d = distance(e, k_arr[j])ki = jcla_temp[ki].append(e)# 迭代更新聚類中心for k in range(k_arr.__len__()):if n - 1 == i:breakk_arr[k] = means(cla_temp[k])cla_temp[k] = []## 可視化展示col = ['HotPink', 'Aqua', 'Chartreuse', 'yellow', 'LightSalmon']  # 僅提供了5種顏色for i in range(m):plt.scatter(k_arr[i][0], k_arr[i][1], linewidth=10, color=col[i])  # 畫中心的散點圖plt.scatter([e[0] for e in cla_temp[i]], [e[1] for e in cla_temp[i]], color=col[i])  # 畫簇中的點plt.show()if __name__ == "__main__":## 1. 生成隨機數據# 生成100個二維隨機點,坐標范圍在0-100之間arr = np.random.randint(0, 100, size=(100, 2))  # 形狀為(100, 2),100個樣本,每個樣本2個特征(x,y)## 2. 初始化聚類參數m = 5  # 聚類的簇數(K=5)# 隨機初始化5個聚類中心(從0-100中隨機取坐標)k_arr = np.random.randint(0, 100, size=(5, 2))  # 形狀為(5, 2),每個中心是一個二維坐標# 初始化5個空列表,用于存放每個簇中的點cla_temp = [[], [], [], [], []]  # 索引0-4對應5個簇## 3. 迭代執行K-Means聚類n = 20  # 迭代次數(可調整,次數越多結果越穩定)for i in range(n):  # 迭代n次優化聚類結果# 步驟1:將每個數據點分配到最近的簇for e in arr:  # 遍歷每個數據點ki = 0  # 初始假設最近的簇是第0個min_d = distance(e, k_arr[ki])  # 計算當前點到第0個中心的距離# 遍歷其他簇中心,找到更近的中心for j in range(1, k_arr.__len__()):d = distance(e, k_arr[j])if d < min_d:  # 發現更近的簇中心min_d = dki = j  # 更新最近簇的索引cla_temp[ki].append(e)  # 將點分配到最近的簇# 步驟2:更新每個簇的中心(最后一次迭代不需要更新,直接保留結果)for k in range(k_arr.__len__()):if n - 1 == i:  # 如果是最后一次迭代,不更新中心,直接跳出break# 計算當前簇的新中心(均值)k_arr[k] = means(cla_temp[k])# 清空當前簇的點列表,為下一次迭代做準備cla_temp[k] = []## 4. 可視化聚類結果# 定義5種顏色,用于區分不同的簇col = ['HotPink', 'Aqua', 'Chartreuse', 'yellow', 'LightSalmon']for i in range(m):# 繪制每個簇的中心(用大圓點表示)plt.scatter(k_arr[i][0], k_arr[i][1], linewidth=10, color=col[i])# 繪制每個簇中的數據點(用小圓點表示)plt.scatter([e[0] for e in cla_temp[i]],  # 所有點的x坐標[e[1] for e in cla_temp[i]],  # 所有點的y坐標color=col[i])plt.show()  # 顯示圖像

聚成五類

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

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

相關文章

ES6 標簽模板:前端框架的靈活利器

ES6&#xff08;ECMAScript 2015&#xff09;引入的模板字符串&#xff08;Template Literals&#xff09;為 JavaScript 開發者提供了更簡潔的字符串處理方式&#xff0c;而模板字符串標簽&#xff08;Tagged Template Literals&#xff09;則進一步擴展了其功能性。通過標簽函…

解鎖編程核心能力:深入淺出數據結構和算法

——為什么它們是你代碼效率的終極武器&#xff1f; &#x1f31f; 引言&#xff1a;程序世界的基石 想象你正在建造摩天大樓&#xff1a;數據結構是鋼筋骨架&#xff0c;決定建筑的結構與承重能力&#xff1b;算法則是施工藍圖&#xff0c;指導如何高效完成建造。兩者結合&am…

Jenkins運行pytest時指令失效的原因以及解決辦法

錯誤收集 Started by user 偷走晚霞的人 Running as SYSTEM Building in workspace C:\Users\Administrator\.jenkins\workspace\TestAAA [TestAAA] $ cmd /c call C:\Users\Administrator\AppData\Local\Temp\jenkins5821160869728612887.bat C:\Users\Administrator\.jenkins…

MySQL數據庫本地遷移到云端完整教程

一、準備工作 安裝MySQL客戶端工具獲取云端數據庫連接信息&#xff1a; 主機地址端口號用戶名密碼數據庫名二、本地數據庫導出 mysqldump -h 127.0.0.1 -P 4406 -u root -p 數據庫名 > backup.sql執行后會提示輸入密碼&#xff0c;完成后會在當前目錄生成backup.sql文件 三、…

InvokeRepeating避免嵌套調用

InvokeRepeating嵌套這會導致指數級增長的重復調用堆疊。使用單一協程PeriodicActionRoutine替代所有InvokeRepeating避免方法間相互調用造成的堆疊如果需要多層級時間控制&#xff08;如主循環子循環&#xff09;&#xff1a;IEnumerator MultiLevelTimer() {float mainInterv…

【工具】好用的瀏覽器AI助手

&#x1f9e8; 一、什么是 Sider&#xff1f; Sider 是一個 Chrome 瀏覽器插件&#xff0c;你可以把它看作一個「網頁邊上的 AI 小助手」。 &#x1f5e3;? 它就像你網頁旁邊的 AI 機器人&#xff0c;可以幫你回答問題、總結文章、翻譯、寫文案、改寫內容、甚至幫你學習英文&…

C++:list(2)list的模擬實現

list的模擬實現一.list與vector1.底層結構的本質區別2.模擬實現的核心差異2.1數據存儲的方式2.2 初始化的過程2.3 插入元素的操作2.4 刪除元素的操作2.5 訪問元素的效率3.總結二.頭文件list.h1. **命名空間與模板**2. **核心數據結構**3. **構造函數**4. **模板參數設計**5. **…

【595驅動8*8點陣】2022-9-11

緣由LED點陣屏只能一次亮一列-嵌入式-CSDN問答 #include "REG52.h" sbit dsP1^0;//數據線 595的14腳 sbit shP1^1;//數據輸入時鐘線 595的11腳 sbit stP1^2;//輸出存儲器鎖存時鐘線 595的12腳 void QuDong595(unsigned char sj) {unsigned char aa8;while(aa--){ds…

AI總結視頻以及谷歌瀏覽器插件安裝步驟

本篇介紹用AI一鍵總結全網視頻內容的獨家方法&#xff0c;支持B站、抖音、小紅書等任何平臺的視頻&#xff0c;提高學習效率&#xff0c;幫助一鍵提取視頻文案、劃分章節&#xff0c;還能生成雙語翻譯&#xff0c;這個方法直接在線總結所有視頻。 一.準備工作&#xff1a; 需要…

網絡協議HTTP、TCP

概述如何讓數據具有自我描述性?為什么網絡有層級的劃分?交換機、路由器要不要閱讀一個信息的頭部&#xff1f;要不要閱讀數據部分&#xff1f; 網卡&#xff1a;網卡可以完成幀的封裝和解封裝&#xff0c;工作在數據鏈路層。 中繼器&#xff1a;中繼器以比特方式將網絡信號進…

Linux選擇題

第12題&#xff08;多選題&#xff09;原題: 能夠為邏輯卷增加容量的命令有( )。A. lvresize: 此命令可以用來調整邏輯卷的大小&#xff0c;既可以增大也可以縮小。例如&#xff0c;lvresize -L 1G /dev/vgname/lvname 會增加1GB&#xff0c;lvresize -L 10G /dev/vgname/lvnam…

使用釘釘開源api發送釘釘工作消息

在工作管理系統場景中&#xff0c;上下級和不同部門之間常常有請假&#xff0c;餐補等流程操作&#xff0c;而這些操作通常需要人員手動進行&#xff0c;這里我們引入一個釘釘的api&#xff0c;可以基于釘釘來發送工作消息通知1、導入釘釘sdk<dependency><groupId>…

拒絕SQL恐懼:用Python+pyqt打造任意Excel數據庫查詢系統

一、引言 在數字化轉型浪潮中&#xff0c;超過76%的基層業務人員仍被困在"SQL恐懼癥"的泥潭里——他們精通業務邏輯卻受限于技術門檻&#xff0c;面對海量數據時只能反復請求IT部門協助。本項目通過PythonPyQt來構建基于Excel風格的查詢系統&#xff0c;從而打破這種…

KubeKey安裝KubeSphere、部署應用實踐問題總結

使用KubeSphere的KubeKey 安裝K8s 集群過程中&#xff0c;碰到了一些問題&#xff0c;現在都一一解決了&#xff0c;以此記錄一下。 kubekey 安裝k8s 集群報錯 execute task timeout, Timeout1m error: Pipeline[CreateClusterPipeline] execute failed: Module[GreetingsModul…

基于粒子群優化的PID控制在藥液流量控制系統中的應用

基于粒子群優化的PID控制在藥液流量控制系統中的應用 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家,覺得好請收藏。點擊跳轉到網站。 1. 引言 在現代工業控制系統中,精確的流量控制是許多生產過程的關鍵環節。本文針對藥液流量控制…

不用電腦要不要關機?

1. 短時間不用&#xff08;午休、臨時外出&#xff09;&#xff1a;建議「睡眠」或「休眠」睡眠&#xff1a;電腦暫停工作&#xff0c;喚醒速度快&#xff0c;耗電較少適合需要快速恢復工作的場景休眠&#xff1a;整機斷電&#xff0c;喚醒速度比睡眠慢&#xff0c;但完全不耗電…

【Spring AI】SiliconFlow-硅基流動

硅基流動 https://docs.siliconflow.cn/cn/userguide/introduction

swagger基本注解@Tag、@Operation、@Parameters、@Parameter、@ApiResponse、@Schema

swagger基本注解 Tag 介紹&#xff1a;用于給接口分組&#xff0c;用途類似于為接口文檔添加標簽。用于&#xff1a;方法、類、接口。常用屬性&#xff1a; name&#xff1a;分組的名稱 RestController RequestMapping("/sysUser") Tag(name "管理員接口&quo…

Unity 實現幀率(FPS)顯示功能

一、功能介紹本教程實現一個 FPS 顯示腳本&#xff0c;支持 TextMeshProUGUI 組件。腳本會每秒更新一次幀率&#xff0c;并顯示在 UI 上&#xff0c;便于開發和調試時觀察性能變化。二、完整代碼將以下代碼保存為 FPS.cs 腳本&#xff1a;using UnityEngine; using TMPro;[Requ…

【星野AI】minimax非活動時間充值優惠漏洞

點開發現有活動即將開啟。把手機時間修改為20250729&#xff0c;或者其它活動內時間。發現活動的充值接口未進行時間校驗。疊加新人首充優惠&#xff0c;充值六元&#xff0c;獲得1800鉆。在非活動時間獲取了優惠。