人工智能機器學習——聚類

一、無監督學習(Unsupervised Learning)

在這里插入圖片描述
在這里插入圖片描述

機器學習的一種方法,沒有給定事先標記過的訓練示例,自動對輸入的數據進行分類或分群。

優點:

  • 算法不受監督信息(偏見)的約束,可能考慮到新的信息
  • 不需要標簽數據,極大程度擴大數據樣本

主要應用:聚類分析、關聯規則、維度縮減

應用最廣:聚類分析(clustering)

二、聚類分析

聚類分析又稱為群分析,根據對象某些屬性的相似度,將其自動化分為不同的類別。

在這里插入圖片描述
常用的聚類算法

1、KMeans聚類

  • 根據數據與中心點距離劃分類別
  • 基于類別數據更新中心點
  • 重復過程直到收斂

特點:
1、實現簡單,收斂快
2、需要指定類別數量
在這里插入圖片描述

2、均值漂移聚類(Meanshift)

  • 在中心點一定區域檢索數據點
  • 更新中心
  • 重復流程到中心點穩定
    在這里插入圖片描述
    特點:
    1、自動發現類別數量,不需要人工選擇
    2、需要選擇區域半徑

3、DBSCAN算法(基于密度的空間聚類算法)

  • 基于區域點密度篩選有效數據
  • 基于有效數據向周邊擴張,直到沒有新點加入
    在這里插入圖片描述
    特點:
    1、過濾噪音數據
    2、不需要人為選擇類別數量
    3、數據密度不同時影響結果

4、什么是K均值聚類?(KMeans Analysis)

K-均值算法:以空間中k個點為中心進行聚類,對最靠近他們的對象歸類,是聚類算法中最為基礎但也最為重要的算法。

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

5、K近鄰分類模型(KNN)

給定一個訓練數據集,對新的輸入實例,在訓練數據集中找到與該實例最鄰近的K個實例(也就是上面所說的K個鄰居),這K個實例的多數屬于某個類,就把該輸入實例分類到這個類中

  • 最簡單的機器學習算法之一

在這里插入圖片描述
在這里插入圖片描述

5、均值漂移聚類(Meanshift)

均值漂移算法:一種基于密度梯度上升的聚類算法(沿著密度上升方向尋找聚類中心點)

在這里插入圖片描述
在這里插入圖片描述

6、實現過程

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

三、使用Kmeans算法實現2D數據自動聚類

#使用Kmeans算法實現2D數據自動聚類,使用數據集kmeans_data.csv
#加載數據
import pandas as pd
import numpy as np
data = pd.read_csv('kmeans_data.csv')
data.head()

在這里插入圖片描述

#賦值x y
x = data.drop('labels',axis=1)
y = data.loc[:,'labels']
y.head()

在這里插入圖片描述

#查看labels有多少類別
pd.Series.value_counts(y)

在這里插入圖片描述

#畫圖
from matplotlib import pyplot as plt
fig1 = plt.figure()
plt.scatter(x.loc[:,'V1'],x.loc[:,'V2'])
plt.title('un-labeld data')
plt.xlabel('V1')
plt.ylabel('V2')
plt.show()

在這里插入圖片描述

fig2 = plt.figure()
label0 = plt.scatter(x.loc[:,'V1'][y==0],x.loc[:,'V2'][y==0])
label1 = plt.scatter(x.loc[:,'V1'][y==1],x.loc[:,'V2'][y==1])
label2 = plt.scatter(x.loc[:,'V1'][y==2],x.loc[:,'V2'][y==2])
plt.title('un-labeld data')
plt.xlabel('V1')
plt.ylabel('V2')
plt.legend((label0,label1,label2),('label0','label1','label2'))
plt.show()

在這里插入圖片描述

#查看x y維度
print(x.shape,y.shape)

在這里插入圖片描述

#創建Kmeans模型
from sklearn.cluster import KMeans
KM = KMeans(n_clusters=3,random_state=0)
KM.fit(x)

在這里插入圖片描述

#聚類的中心點
centers = KM.cluster_centers_
fig3 = plt.figure()
label0 = plt.scatter(x.loc[:,'V1'][y==0],x.loc[:,'V2'][y==0])
label1 = plt.scatter(x.loc[:,'V1'][y==1],x.loc[:,'V2'][y==1])
label2 = plt.scatter(x.loc[:,'V1'][y==2],x.loc[:,'V2'][y==2])
plt.scatter(centers[:,0],centers[:,1])
plt.title('un-labeld data')
plt.xlabel('V1')
plt.ylabel('V2')
plt.legend((label0,label1,label2),('label0','label1','label2'))
plt.show()

在這里插入圖片描述

#測試新數據V1=80,V2=60
x_test = pd.DataFrame([[80,60]],columns=['V1','V2'])
y_predict_test = KM.predict(x_test)
print(y_predict_test)

在這里插入圖片描述

#計算準確率
y_predict = KM.predict(x)
print(y_predict)
print(pd.Series.value_counts(y_predict),pd.Series.value_counts(y))

在這里插入圖片描述

from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,y_predict)
print(accuracy)

在這里插入圖片描述

#可視化數據
fig4 = plt.subplot(121)
label0 = plt.scatter(x.loc[:,'V1'][y_predict==0],x.loc[:,'V2'][y_predict==0])
label1 = plt.scatter(x.loc[:,'V1'][y_predict==1],x.loc[:,'V2'][y_predict==1])
label2 = plt.scatter(x.loc[:,'V1'][y_predict==2],x.loc[:,'V2'][y_predict==2])
plt.scatter(centers[:,0],centers[:,1])
plt.title('predict data')
plt.xlabel('V1')
plt.ylabel('V2')
plt.legend((label0,label1,label2),('label0','label1','label2'))fig5 = plt.subplot(122)
label0 = plt.scatter(x.loc[:,'V1'][y==0],x.loc[:,'V2'][y==0])
label1 = plt.scatter(x.loc[:,'V1'][y==1],x.loc[:,'V2'][y==1])
label2 = plt.scatter(x.loc[:,'V1'][y==2],x.loc[:,'V2'][y==2])
plt.scatter(centers[:,0],centers[:,1])
plt.title('un-labeld data')
plt.xlabel('V1')
plt.ylabel('V2')
plt.legend((label0,label1,label2),('label0','label1','label2'))
plt.show()

在這里插入圖片描述

#校正結果
y_corrected = []
for i in y_predict:if i==0:y_corrected.append(2)elif i==1:y_corrected.append(1)else:y_corrected.append(0)print(pd.Series.value_counts(y_corrected),pd.Series.value_counts(y))

在這里插入圖片描述

#打印準確率
print(accuracy_score(y,y_corrected))

在這里插入圖片描述

y_corrected = np.array(y_corrected)
print(type(y_corrected))
#可視化數據
fig6 = plt.subplot(121)
label0 = plt.scatter(x.loc[:,'V1'][y_corrected==0],x.loc[:,'V2'][y_corrected==0])
label1 = plt.scatter(x.loc[:,'V1'][y_corrected==1],x.loc[:,'V2'][y_corrected==1])
label2 = plt.scatter(x.loc[:,'V1'][y_corrected==2],x.loc[:,'V2'][y_corrected==2])
plt.scatter(centers[:,0],centers[:,1])
plt.title('corrected data')
plt.xlabel('V1')
plt.ylabel('V2')
plt.legend((label0,label1,label2),('label0','label1','label2'))fig7 = plt.subplot(122)
label0 = plt.scatter(x.loc[:,'V1'][y==0],x.loc[:,'V2'][y==0])
label1 = plt.scatter(x.loc[:,'V1'][y==1],x.loc[:,'V2'][y==1])
label2 = plt.scatter(x.loc[:,'V1'][y==2],x.loc[:,'V2'][y==2])
plt.scatter(centers[:,0],centers[:,1])
plt.title('un-labeld data')
plt.xlabel('V1')
plt.ylabel('V2')
plt.legend((label0,label1,label2),('label0','label1','label2'))
plt.show()

在這里插入圖片描述

四、使用監督學習KNN算法

from sklearn.neighbors import KNeighborsClassifier
KNN = KNeighborsClassifier(n_neighbors=3)
KNN.fit(x,y)

在這里插入圖片描述

#測試新數據V1=80,V2=60
x_test = pd.DataFrame([[80,60]],columns=['V1','V2'])
y_predict_test = KNN.predict(x_test)
print(y_predict_test)

在這里插入圖片描述

#計算準確率
y_knn_predict = KNN.predict(x)
print(y_knn_predict)
print(pd.Series.value_counts(y_knn_predict),pd.Series.value_counts(y))

在這里插入圖片描述

from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,y_knn_predict)
print(accuracy)

在這里插入圖片描述

#可視化數據
fig8 = plt.subplot(121)
label0 = plt.scatter(x.loc[:,'V1'][y_knn_predict==0],x.loc[:,'V2'][y_knn_predict==0])
label1 = plt.scatter(x.loc[:,'V1'][y_knn_predict==1],x.loc[:,'V2'][y_knn_predict==1])
label2 = plt.scatter(x.loc[:,'V1'][y_knn_predict==2],x.loc[:,'V2'][y_knn_predict==2])
plt.scatter(centers[:,0],centers[:,1])
plt.title('y_knn_predict data')
plt.xlabel('V1')
plt.ylabel('V2')
plt.legend((label0,label1,label2),('label0','label1','label2'))fig9 = plt.subplot(122)
label0 = plt.scatter(x.loc[:,'V1'][y==0],x.loc[:,'V2'][y==0])
label1 = plt.scatter(x.loc[:,'V1'][y==1],x.loc[:,'V2'][y==1])
label2 = plt.scatter(x.loc[:,'V1'][y==2],x.loc[:,'V2'][y==2])
plt.scatter(centers[:,0],centers[:,1])
plt.title('un-labeld data')
plt.xlabel('V1')
plt.ylabel('V2')
plt.legend((label0,label1,label2),('label0','label1','label2'))
plt.show()

在這里插入圖片描述

五、使用 Meanshift 算法

#使用 Meanshift 算法
from sklearn.cluster import MeanShift,estimate_bandwidth
#獲取范圍帶寬、半徑
bw = estimate_bandwidth(x,n_samples=500)
print(bw)

在這里插入圖片描述

#創建模型,訓練模型
ms = MeanShift(bandwidth=bw)
ms.fit(x)

在這里插入圖片描述

y_predict_meanshift = ms.predict(x)
print(pd.Series.value_counts(y_predict_meanshift),pd.Series.value_counts(y))

在這里插入圖片描述

#可視化數據
fig10 = plt.subplot(121)
label0 = plt.scatter(x.loc[:,'V1'][y_predict_meanshift==0],x.loc[:,'V2'][y_predict_meanshift==0])
label1 = plt.scatter(x.loc[:,'V1'][y_predict_meanshift==1],x.loc[:,'V2'][y_predict_meanshift==1])
label2 = plt.scatter(x.loc[:,'V1'][y_predict_meanshift==2],x.loc[:,'V2'][y_predict_meanshift==2])
plt.scatter(centers[:,0],centers[:,1])
plt.title('y_predict_meanshift data')
plt.xlabel('V1')
plt.ylabel('V2')
plt.legend((label0,label1,label2),('label0','label1','label2'))fig11 = plt.subplot(122)
label0 = plt.scatter(x.loc[:,'V1'][y==0],x.loc[:,'V2'][y==0])
label1 = plt.scatter(x.loc[:,'V1'][y==1],x.loc[:,'V2'][y==1])
label2 = plt.scatter(x.loc[:,'V1'][y==2],x.loc[:,'V2'][y==2])
plt.scatter(centers[:,0],centers[:,1])
plt.title('un-labeld data')
plt.xlabel('V1')
plt.ylabel('V2')
plt.legend((label0,label1,label2),('label0','label1','label2'))
plt.show()

在這里插入圖片描述

#校正結果
y_corrected = []
for i in y_predict_meanshift:if i==0:y_corrected.append(2)elif i==1:y_corrected.append(1)else:y_corrected.append(0)print(pd.Series.value_counts(y_corrected),pd.Series.value_counts(y))

在這里插入圖片描述

y_corrected = np.array(y_corrected)
print(type(y_corrected))

在這里插入圖片描述

#可視化數據
fig12 = plt.subplot(121)
label0 = plt.scatter(x.loc[:,'V1'][y_corrected==0],x.loc[:,'V2'][y_corrected==0])
label1 = plt.scatter(x.loc[:,'V1'][y_corrected==1],x.loc[:,'V2'][y_corrected==1])
label2 = plt.scatter(x.loc[:,'V1'][y_corrected==2],x.loc[:,'V2'][y_corrected==2])
plt.scatter(centers[:,0],centers[:,1])
plt.title('corrected data')
plt.xlabel('V1')
plt.ylabel('V2')
plt.legend((label0,label1,label2),('label0','label1','label2'))fig13 = plt.subplot(122)
label0 = plt.scatter(x.loc[:,'V1'][y==0],x.loc[:,'V2'][y==0])
label1 = plt.scatter(x.loc[:,'V1'][y==1],x.loc[:,'V2'][y==1])
label2 = plt.scatter(x.loc[:,'V1'][y==2],x.loc[:,'V2'][y==2])
plt.scatter(centers[:,0],centers[:,1])
plt.title('un-labeld data')
plt.xlabel('V1')
plt.ylabel('V2')
plt.legend((label0,label1,label2),('label0','label1','label2'))
plt.show()

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

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

相關文章

優化MySQL分區表備份流程詳解

在大型數據驅動應用中,MySQL分區表是優化查詢和維護歷史的常見選擇。但隨之而來的數據備份問題卻讓許多開發者頭疼:如何確保分散在不同分區的數據能完整、一致地被備份,并在需要時快速恢復?手動處理不僅繁瑣,而且極易出…

用 Go + HTML 實現 OpenHarmony 投屏(hdckit-go + WebSocket + Canvas 實戰)

本文帶你用 Go HTML/WebSocket 從零實現一個 OpenHarmony 設備投屏 Demo:Go 側用 hdckit-go 連接設備并抓取屏幕幀(UiDriver),通過 WebSocket 二進制實時推送到瀏覽器,前端用 Canvas 渲染,并根據設備分辨率…

運籌學——求解線性規劃的單純形法

單純形法的原理 先來舉個例子: 用單純形法求解下面線性規劃問題的最優解:注釋:解的過程是反復迭代的過程,如果第一次迭代沒有理解也沒關系,再繼續看第二次迭代,和第三次迭代,每次迭代的流程都是…

Python GUI 框架 -- DearPyGui 簡易入門

DearPyGui 關于 DPG 是一個簡單且功能強大的 Python 圖形用戶界面框架。 與其他Python圖形用戶界面庫相比,DPG具有以下獨特之處: GPU 渲染多線程高度可定制內置開發人員工具:主題檢查、資源檢查、運行時指標帶有數百種小部件組合的 70 多…

gcloud cli 使用 impersonate模擬 服務帳號

什么是模擬服務帳號 眾所周知, gcloud 登陸的方式有兩種 使用個人帳號, 通常是1個郵箱地址使用一個service account 通常是1個 json key 文件 所謂模式服務帳號意思就是, 讓操作人員用個人帳號登陸, 但是登陸后所有的操作都是基于…

idf--esp32的看門狗menuconfig

1.Interrupt Watchdog Timeout (ms):意思是中斷看門狗,也就是專門監管中斷響應時間的看門狗,如果某個中斷服務程序超過了這個運行時間,就會導致程序重啟。2.紅框是任務看門狗的最大看門時間,超過時間就會警告&#xff…

git在Linux中的使用

git-Linux中的使用一、下載git二、https方式上傳三、ssh秘鑰方式上傳一、下載git 版本信息 [rootrocky ~]# cat /etc/rocky-release Rocky Linux release 9.4 (Blue Onyx) [rootrocky ~]# cat /etc/rocky-release-upstream Derived from Red Hat Enterprise Linux 9.4 [rootro…

HMI(人機界面)

新晉碼農一枚,小編定期整理一些寫的比較好的代碼,作為自己的學習筆記,會試著做一下批注和補充,轉載或者參考他人文獻會標明出處,非商用,如有侵權會刪改!歡迎大家斧正和討論!一、核心…

嵌入式解謎日志—多路I/O復用

多路 I/O復用(Multiplexed I/O):1.定義:系統提供的I/O事件通知機制2.應用:是一種 I/O 編程模型,用于在單線程中同時處理多個(阻塞) I/O 操作,避免因等待某個 I/O 操作完成…

關于嵌入式學習——單片機4

ds18b20溫度傳感器的使用一、傳感器分類:數字溫度傳感器,實現簡單,不需要額外轉換電路,采集過來的就是數字溫度值模擬溫度傳感器->熱敏電阻->AD轉換電路->數字值二、傳感器接口:GPIO接口:&#xf…

Kali搭建sqli-labs靶場

1.輸入apt-get install docker.io即可下載靶場鏡像。 下載好后,我們輸入docker search sqli-labs搜索sqli-labs靶場。2.我們選擇第一個,輸入docker pull acgpiano/sqli-labs,將該靶場裝到本地。此時輸入docker images,發現本地有s…

電腦外接顯示屏字體和圖標過大

當外接顯示屏的分辨率過高時,可以調整顯示器設置來解決字體和圖標過大的問題。具體操作包括在桌面右擊選擇顯示設置,切換到外接顯示器,將分辨率調至推薦的1920x1080,或根據個人偏好進行適當調節,然后保存更改。 原因&a…

Linux 網絡流量監控 Shell 腳本詳解(支持郵件告警)

前言 一、腳本功能 二、實現原理 三、Shell 腳本實現 四、關鍵知識點解析 1. Bash 關聯數組 2. 命令組 { } 與子 Shell ( ) 3. 字符串拼接換行 4. 流量計算邏輯 五、測試方法 六、優化建議 七、總結 前言 在生產環境中,監控服務器的 網絡流量 非常重要…

【牛客刷題-劍指Offer】BM18 二維數組中的查找:一題四解,從暴力到最優

文章目錄 一、題目介紹 1.1 描述 1.2 示例1 1.3 示例2 1.4 給的部分代碼 二、題解 方法一:暴力遍歷 方法二:二分查找(逐行) 方法三:Z字形查找(最優解) 方法四:遞歸分治(拓展思路) 三、總結 心得體會 一、題目介紹 原題鏈接:https://www.nowcoder.com/practice/abc3…

使用pyspark對上百億行的hive表生成稀疏向量

背景:一張上百億行的hive表,只有id和app兩列,其中app的去重量是8w多個(原app有上百萬枚舉值,此處已經用id數量進行過篩選,只留下有一定規模的app),id的去重量大概有八九億&#xff0…

【設計模式】關于學習《重學Java設計模式》的一些成長筆記

【設計模式】關于學習《重學Java設計模式》的一些成長筆記 沒有幾個人是一說就會的,掌握一些技能,不僅要用心,而且還需要從溫故中知新。 為此,好記性不如爛筆頭,我干脆一步一腳印地系統學習一遍設計模式! (關注不迷路哈!!!) 文章目錄 【設計模式】關于學習《重學Jav…

【基礎-判斷】@Entry裝飾的自定義組件將作為頁面的入口。在單個頁面中可以使用多個@Entry裝飾不同自定義組件。

@Entry裝飾的自定義組件將作為頁面的入口。在單個頁面中可以使用多個@Entry裝飾不同自定義組件。 解釋: @Entry 的核心作用與唯一性:@Entry 裝飾器用于明確聲明該組件是一個頁面的入口組件,即整個頁面的“根”和“起點”。當UIAbility實例加載并顯示頁面時,系統需要明確知道…

醫學影像AI應用-實踐:使用MONAI實現肺部CT圖像分割的原理與實踐

?? 博主簡介:CSDN博客專家、CSDN平臺優質創作者,高級開發工程師,數學專業,10年以上C/C++, C#,Java等多種編程語言開發經驗,擁有高級工程師證書;擅長C/C++、C#等開發語言,熟悉Java常用開發技術,能熟練應用常用數據庫SQL server,Oracle,mysql,postgresql等進行開發應用…

如何訓練一個簡單的Transformer模型(附源碼)李宏毅2025大模型-作業4

摘要:一、作業目標:使用只有2層transformer的GPT-2,生成完整寶可夢圖像。二、源碼&解析:使用提供的Transformer模型(GPT-2)進行訓練,FID Score: 96.3425一、作業目標1)目標使用T…

leetcode211.添加與搜索單詞-數據結構設計

與208.前綴樹的設計是一樣的,關鍵點在于word中存在通配符“.",所以針對該特殊情況,在search時針對這里進行全子節點的深度搜索class WordDictionary {TrieNode root;private class TrieNode {char val;// 當前節點的值,冗余了…