[機器學習]基于K-means聚類算法的鳶尾花數據及分類

基于Kmeans,對鳶尾花數據集前兩個特征進行聚類分析

  • 通過迭代優化,將150個樣本劃分到K個簇中。

  • 目標函數:最小化所有樣本到其所屬簇中心的距離平方和。

  • 算法步驟:

    1. 隨機初始化K個簇中心。

    2. 將每個樣本分配到最近的中心。

    3. 計算均值確定每個簇的中心(均值)。

    4. 重復第2和3步直到穩定收斂。

程序代碼:

import mathimport numpy as np
from matplotlib import pyplot as plt
from sklearn import datasetsplt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = Falsedata = datasets.load_iris().data
labels = datasets.load_iris().target
print('數據維度',data.shape)
features = data[:,: 2]
print('特征',features)num_clusters = 6
epoch = 150
J_sum = []def J_calculate(features,divide_re,center):J = 0for s1 in range(150):distances = ((features[s1][0]-center[divide_re[s1]][0]) ** 2) + ((features[s1][1]-center[divide_re[s1]][1]) ** 2)#print(distances)J = J + distancesreturn Jdef decision(features,divide_re,center,epoch):J_best = []for _ in range(epoch):J_b = math.inffor s1 in range(150):best = Nonemin_J_now = math.inffor s2 in range(len(center)):divide_re[s1] = s2J_now = J_calculate(features,divide_re,center)if J_now < min_J_now:min_J_now = J_nowbest = s2divide_re[s1] = bestfor i in range(len(center)):xc = []yc = []for j in range(150):if (divide_re[j] == i):xc.append(features[j][0])yc.append(features[j][1])center[i] = [np.mean(xc), np.mean(yc)]if(min_J_now<J_b):J_b = min_J_nowJ_best.append(J_b)return features,divide_re,center,J_bestfor i in range(2,num_clusters+1):print(f'\n分{i}類:\n')center = features[np.random.choice(features.shape[0], i, replace=False)]print("初始中心點", center)distances = np.linalg.norm(features[:, np.newaxis, :] - center, axis=2)divide = np.argmin(distances,axis=1)divide_re = []for x in range(150):divide_re.append(divide[x])print("初始樣本分類", divide_re)features,divide_re,center,J_best = decision(features,divide_re,center,epoch)print(f'{i}類最佳J值為:',J_best[epoch-1])J_sum.append(J_best[epoch-1])plt.scatter(features[:, 0], features[:, 1], c=divide_re, cmap='viridis', edgecolors='k')plt.scatter(center[:, 0], center[:, 1], marker='x', s=30, linewidths=3, color='red')plt.title(f'{i}類C均值分類法結果')plt.xlabel('第一特征')plt.ylabel('第二特征')plt.show()
plt.figure()
plt.plot(range(2, num_clusters + 1), J_sum, marker='o')
plt.title('J與類別數量關系曲線')
plt.xlabel('類別數量')
plt.ylabel('J_sum 值')
plt.show()

運行結果:

數據維度 (150, 4)
特征 [[5.1 3.5]
[4.9 3. ]
[4.7 3.2]
[4.6 3.1]
[5. ?3.6]
[5.4 3.9]
[4.6 3.4]
[5. ?3.4]
[4.4 2.9]
[4.9 3.1]
[5.4 3.7]
[4.8 3.4]
[4.8 3. ]
[4.3 3. ]
[5.8 4. ]
[5.7 4.4]
[5.4 3.9]
[5.1 3.5]
[5.7 3.8]
[5.1 3.8]
[5.4 3.4]
[5.1 3.7]
[4.6 3.6]
[5.1 3.3]
[4.8 3.4]
[5. ?3. ]
[5. ?3.4]
[5.2 3.5]
[5.2 3.4]
[4.7 3.2]
[4.8 3.1]
[5.4 3.4]
[5.2 4.1]
[5.5 4.2]
[4.9 3.1]
[5. ?3.2]
[5.5 3.5]
[4.9 3.6]
[4.4 3. ]
[5.1 3.4]
[5. ?3.5]
[4.5 2.3]
[4.4 3.2]
[5. ?3.5]
[5.1 3.8]
[4.8 3. ]
[5.1 3.8]
[4.6 3.2]
[5.3 3.7]
[5. ?3.3]
[7. ?3.2]
[6.4 3.2]
[6.9 3.1]
[5.5 2.3]
[6.5 2.8]
[5.7 2.8]
[6.3 3.3]
[4.9 2.4]
[6.6 2.9]
[5.2 2.7]
[5. ?2. ]
[5.9 3. ]
[6. ?2.2]
[6.1 2.9]
[5.6 2.9]
[6.7 3.1]
[5.6 3. ]
[5.8 2.7]
[6.2 2.2]
[5.6 2.5]
[5.9 3.2]
[6.1 2.8]
[6.3 2.5]
[6.1 2.8]
[6.4 2.9]
[6.6 3. ]
[6.8 2.8]
[6.7 3. ]
[6. ?2.9]
[5.7 2.6]
[5.5 2.4]
[5.5 2.4]
[5.8 2.7]
[6. ?2.7]
[5.4 3. ]
[6. ?3.4]
[6.7 3.1]
[6.3 2.3]
[5.6 3. ]
[5.5 2.5]
[5.5 2.6]
[6.1 3. ]
[5.8 2.6]
[5. ?2.3]
[5.6 2.7]
[5.7 3. ]
[5.7 2.9]
[6.2 2.9]
[5.1 2.5]
[5.7 2.8]
[6.3 3.3]
[5.8 2.7]
[7.1 3. ]
[6.3 2.9]
[6.5 3. ]
[7.6 3. ]
[4.9 2.5]
[7.3 2.9]
[6.7 2.5]
[7.2 3.6]
[6.5 3.2]
[6.4 2.7]
[6.8 3. ]
[5.7 2.5]
[5.8 2.8]
[6.4 3.2]
[6.5 3. ]
[7.7 3.8]
[7.7 2.6]
[6. ?2.2]
[6.9 3.2]
[5.6 2.8]
[7.7 2.8]
[6.3 2.7]
[6.7 3.3]
[7.2 3.2]
[6.2 2.8]
[6.1 3. ]
[6.4 2.8]
[7.2 3. ]
[7.4 2.8]
[7.9 3.8]
[6.4 2.8]
[6.3 2.8]
[6.1 2.6]
[7.7 3. ]
[6.3 3.4]
[6.4 3.1]
[6. ?3. ]
[6.9 3.1]
[6.7 3.1]
[6.9 3.1]
[5.8 2.7]
[6.8 3.2]
[6.7 3.3]
[6.7 3. ]
[6.3 2.5]
[6.5 3. ]
[6.2 3.4]
[5.9 3. ]]

分2類:

初始中心點 [[6.4 3.1]
[7.2 3.6]]
初始樣本分類 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
2類最佳J值為: 58.20409278906674

分3類:

初始中心點 [[5.4 3.4]
[5.4 3.4]
[7.7 2.8]]
初始樣本分類 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 2, 2, 2, 0, 0, 2, 0, 0, 0, 0, 2, 2, 0, 2, 0, 2, 0, 2, 2, 0, 0, 0, 2, 2, 2, 0, 0, 0, 2, 0, 0, 0, 2, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0]

3類最佳J值為: 58.20409278906674

分4類:

初始中心點 [[6.7 3.1]
[6.4 2.7]
[6.5 3.2]
[5.5 2.4]]
初始樣本分類 [3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 3, 3, 3, 2, 2, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 0, 2, 0, 3, 1, 3, 2, 3, 0, 3, 3, 1, 3, 1, 3, 0, 3, 3, 1, 3, 2, 1, 1, 1, 1, 0, 0, 0, 1, 3, 3, 3, 3, 1, 3, 2, 0, 1, 3, 3, 3, 1, 3, 3, 3, 3, 3, 1, 3, 3, 2, 3, 0, 1, 2, 0, 3, 0, 1, 0, 2, 1, 0, 3, 3, 2, 2, 0, 0, 3, 0, 3, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 2, 2, 1, 0, 0, 0, 3, 0, 0, 0, 1, 2, 2, 1]
4類最佳J值為: 28.23339146670904

分5類:

初始中心點 [[6.3 2.5]
[5.1 3.5]
[6.4 3.2]
[7.1 3. ]
[5.5 3.5]]
初始樣本分類 [1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 4, 1, 1, 1, 4, 4, 4, 1, 4, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 4, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 3, 0, 0, 0, 2, 1, 2, 1, 0, 2, 0, 2, 4, 2, 4, 0, 0, 0, 2, 0, 0, 0, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 4, 2, 2, 0, 4, 0, 0, 2, 0, 1, 0, 4, 4, 2, 1, 0, 2, 0, 3, 2, 2, 3, 1, 3, 0, 3, 2, 0, 3, 0, 0, 2, 2, 3, 3, 0, 3, 4, 3, 0, 2, 3, 0, 2, 0, 3, 3, 3, 0, 0, 0, 3, 2, 2, 2, 3, 2, 3, 0, 3, 2, 2, 0, 2, 2, 2]
5類最佳J值為: 21.200013093214928

分6類:

初始中心點 [[6.8 2.8]
[5.8 2.6]
[4.4 3. ]
[6.2 3.4]
[6.4 3.2]
[6. ?3. ]]
初始樣本分類 [2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 3, 2, 2, 2, 3, 3, 3, 2, 3, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 3, 3, 2, 2, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 0, 4, 0, 1, 0, 1, 3, 2, 0, 1, 1, 5, 1, 5, 1, 4, 5, 1, 1, 1, 5, 5, 1, 5, 4, 4, 0, 0, 5, 1, 1, 1, 1, 1, 1, 3, 4, 1, 5, 1, 1, 5, 1, 1, 1, 5, 1, 5, 1, 1, 3, 1, 0, 5, 4, 0, 2, 0, 0, 4, 4, 0, 0, 1, 1, 4, 4, 0, 0, 1, 0, 1, 0, 5, 4, 0, 5, 5, 0, 0, 0, 0, 0, 5, 1, 0, 3, 4, 5, 0, 4, 0, 1, 4, 4, 0, 1, 4, 3, 5]
6類最佳J值為: 18.150987445152886

進程已結束,退出代碼0

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

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

相關文章

Altium Designer 22使用筆記(10)---PCB鋪銅相關操作

目錄 01 | 簡 述 02 | 環境描述 03 | 鋪 銅 04 | 鋪銅挖空 05 | 敷銅合并 06 | 敷銅的修改 07 | 總 結 01 | 簡 述 在PCB設計階段&#xff0c;除了布局、布線操作需要頻繁進行調整外&#xff0c;鋪銅操作的使用也非常頻繁&#xff1b;因此本篇文章的主要內容為&#xff…

leetcode 338 比特位計數

一、題目描述二、解題思路我們可以借助位運算的思想來解決這個問題。通過kk&(k-1)來消除k中最右邊為1的比特位&#xff0c;每次消除后進行count&#xff0c;當k為0時&#xff0c;表示所有的1消除完畢&#xff0c;此時的count即為所有1的個數。三、代碼實現時間復雜度&#…

PHP的md5()函數分析

MD5&#xff08;Message-Digest Algorithm 5&#xff09;是一種廣泛使用的哈希函數&#xff0c;由Ronald Rivest于1991年設計&#xff0c;屬于密碼散列算法家族。其核心功能是將任意長度的輸入數據&#xff08;如字符串、文件等&#xff09;通過不可逆的數學運算轉換為固定長度…

【面試場景題】怎么做業務領域劃分

文章目錄一、核心原則&#xff1a;以業務為中心&#xff0c;而非技術二、具體步驟&#xff1a;從業務理解到邊界定義1. 深入理解業務&#xff1a;梳理業務全景2. 識別核心領域與支撐領域3. 劃分“限界上下文”&#xff1a;定義領域邊界4. 定義領域內的“聚合”&#xff1a;細化…

海量小文件問題綜述和解決攻略(二)

1. 解決NameNode的內存問題 上面的內容提到過每個block的元數據都需要加載到NameNode的內存中&#xff0c;這導致一個Hadoop集群在NameNode中存儲的對象是有上限的&#xff0c;并且對象太多會帶來啟動時間較長以及網絡延遲的問題。常見的有兩種解決方案&#xff0c;減少集群的…

《開發避坑指南:從異常中讀懂系統的“求救信號”》

異常現象從不只是孤立的“故障”&#xff0c;而是系統發出的“健康預警”。太多團隊困在“出現問題-臨時修復-再次復發”的循環里&#xff0c;將精力消耗在表面問題的撲救上&#xff0c;卻忽視了背后潛藏的架構缺陷、邏輯漏洞與環境適配盲區。真正成熟的開發思維&#xff0c;是…

數字孿生技術為UI前端賦能:實現產品性能的實時監測與預警

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!過去十年&#xff0c;前端技術棧翻天覆地&#xff1a;React/Vue/Angular、Webpack/Vite、Serve…

【性能優化】Unity 渲染優化全解析:Draw Call、Batch、SetPass 與批處理技術

Unity 渲染優化全解析&#xff1a;Draw Call、Batch、SetPass 與批處理技術 在 Unity 開發中&#xff0c;性能優化是保證游戲流暢的核心環節。尤其在移動端或 VR/AR 場景&#xff0c;Draw Call 過多、材質切換頻繁都會嚴重影響幀率。 本文將從 Unity Statistics 面板參數解析…

基于Spring Boot的短信平臺平滑切換設計方案

基于Spring Boot的短信平臺平滑切換設計方案 案例背景 在電商系統中&#xff0c;短信服務是用戶注冊、登錄驗證、訂單通知等環節的關鍵基礎設施。由于業務需求或成本優化&#xff0c;企業可能需要在不同短信平臺&#xff08;如阿里云、騰訊云、云片等&#xff09;之間進行切換。…

信息技術發展

信息技術是研究如何獲取信息、處理信息、傳輸信息和使用信息的技術。計算機硬件控制器、運算器、存儲器、輸入設備、輸出設備。計算機軟件系統軟件、應用軟件、中間件。通信系統包括源系統、傳輸系統、目的系統。網絡基礎 個人局域網、局域網、城域網、廣域網、公用網、專用網。…

2023年12月GESP5級C++真題解析,包括選擇判斷和編程

一、選擇題&#xff08;每道題2分&#xff0c;共30分&#xff09; 1、下面C代碼用于求斐波那契數列&#xff0c;該數列第1 、2項為1&#xff0c;以后各項均是 前兩項之和。下面有關說法錯誤的是( ) A. fiboA( ) ?遞歸?式&#xff0c;fiboB() 循環?式 B. fiboA( ) 更加符合…

C++ 面試高頻考點 力扣 704.二分查找 基礎二分查找 題解 每日一題

文章目錄二分查找&#xff1a;從基礎原理到代碼實現二分查找的特點算法重點題目描述&#xff1a;LeetCode 704. 二分查找為什么可以用二分查找&#xff1f;暴力算法解法二分查找解法核心邏輯&#xff1a;三種情況的處理二分查找什么時候結束&#xff1f;為什么二分查找一定是對…

《UE5_C++多人TPS完整教程》學習筆記45 ——《P46 待機與跳躍動畫(Idle And Jumps)》

本文為B站系列教學視頻 《UE5_C多人TPS完整教程》 —— 《P46 待機與跳躍動畫&#xff08;Idle And Jumps&#xff09;》 的學習筆記&#xff0c;該系列教學視頻為計算機工程師、程序員、游戲開發者、作家&#xff08;Engineer, Programmer, Game Developer, Author&#xff09…

2025年03月 Scratch 圖形化(一級)真題解析#中國電子學會#全國青少年軟件編程等級考試

Scratch圖形化等級考試(1~4級)全部真題?點這里 一、單選題(共25題,共50分) 第1題 氣球初始位置如下圖所示,運行下列程序,氣球會朝哪個方向移動?( ) A:水平向右 B:垂直向下 C:水平向左 D:垂直向上 答案:A 氣球水平向右移動 第2題 使用下列哪個選項可以將…

android 不同分辨圖片放錯對應文件夾會怎樣?

多年前有人問過我這個問題&#xff0c;當時沒太了解這個東西&#xff0c;覺得是無所謂的東西&#xff0c;不過沒答上來這個問題還是讓我記了很久。今天又看到有人發文章討論這個問題&#xff0c;我也就特意再研究下。1&#xff0c;了解一下Android分辨率是什么。2&#xff0c;同…

48.【.NET8 實戰--孢子記賬--從單體到微服務--轉向微服務】--擴展功能--集成網關--解決Refit接口調用未授權的訪問問題

我們在項目中集成了Refit&#xff0c;但是在調用接口時&#xff0c;出現了問題&#xff0c;提示未授權的訪問。這個問題是怎么導致的呢&#xff1f;我們該怎么處理呢&#xff1f;在這篇文章中我們一起來解決吧。 一、為什么會出現這個問題 讓我們來深入分析一下是哪里返回的未授…

nacos登錄認證

先看一個現象bootstrap.yml配置如下&#xff1a;spring:application:name: myservicecloud:nacos:discovery:server-addr: 127.0.0.1:8848username: nacospassword: nacosconfig:prefix: testfile-extension: ymlusername: nacos123password: nacos注意&#xff1a;配置中nacos…

論文閱讀:arixv 2025 WideSearch: Benchmarking Agentic Broad Info-Seeking

WideSearch&#xff1a;大規模信息檢索基準測試 https://arxiv.org/pdf/2508.07999 字節&#xff1a;Agent大規模信息獲取基準WideSearch WideSearch&#xff1a;揭示 AI 智能體缺失的「廣度」能力 Project Page: https://widesearch-seed.github.io/ get the data&#x…

【Docker基礎】Docker-compose進階配置:資源限制與高可用部署

目錄 引言 1 Docker資源限制基礎概念 1.1 為什么需要資源限制 1.2 Docker資源限制的類型 2 CPU與內存資源限制配置 2.1 傳統資源限制方式&#xff08;version 2&#xff09; 2.2 現代資源限制方式&#xff08;version 3 deploy.resources&#xff09; 關鍵參數解釋&…

SQL優化--OR

優化 SQL 中的 OR 條件是一個非常常見的性能調優問題。OR 操作符經常會導致性能下降&#xff0c;因為它使得數據庫優化器難以高效地使用索引。下面我將從淺入深地為你講解優化 OR 的多種策略&#xff0c;并附上示例。為什么 OR 性能往往較差&#xff1f;在簡單的 WHERE 子句中&…