python利用K-Means算法實現(xiàn)對數(shù)據(jù)的聚類案例詳解
目的是為了檢測出采集數(shù)據(jù)中的異常值。所以很明確,這種情況下的簇為2:正常數(shù)據(jù)和異常數(shù)據(jù)兩大類
1、安裝相應的庫
import matplotlib.pyplot as plt # 用于可視化 from sklearn.cluster import KMeans # 用于聚類 import pandas as pd # 用于讀取文件
2、實現(xiàn)聚類
2.1 讀取數(shù)據(jù)并可視化
# 讀取本地數(shù)據(jù)文件 df = pd.read_excel("../data/output3.xls", header=0)
本次實驗選擇溫度和CO2作為二維數(shù)據(jù),其中溫度含有異常數(shù)據(jù)。
plt.scatter(df["光照"], df["CO2"], linewidths=1, alpha=0.8) plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽v plt.xlabel("光照") plt.ylabel("CO2") plt.grid(color="#95a5a6", linestyle="--", linewidth=1, alpha=0.4) plt.show()
2.2 K-means聚類
設置規(guī)定要聚的類別個數(shù)為2
data = df[["光照","CO2"]] # 從原始數(shù)據(jù)中選擇該兩項 estimator = KMeans(n_clusters=2) # 構造聚類器 estimator.fit(data) # 將數(shù)據(jù)帶入聚類模型
獲取聚類中心的值和聚類標簽
label_pred = estimator.labels_ # 獲取聚類標簽 centers_ = estimator.cluster_centers_ # 獲取聚類中心
將聚類后的 label0 和 label1 的數(shù)據(jù)進行輸出
x0 = data[label_pred == 0] x1 = data[label_pred == 1] plt.scatter(x0["光照"], x0["CO2"],c="red", linewidths=1, alpha=0.8,marker='o', label='label0') plt.scatter(x1["光照"], x1["CO2"],c="green", linewidths=1, alpha=0.8,marker='+', label='label1') plt.grid(c="#95a5a6", linestyle="--", linewidth=1, alpha=0.4) plt.legend() plt.show()
附上全部代碼
import matplotlib.pyplot as plt from sklearn.cluster import KMeans import pandas as pd df = pd.read_excel("../data/output3.xls", header=0) plt.scatter(df["光照"], df["CO2"], linewidths=1, alpha=0.8) plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽v plt.xlabel("光照") plt.ylabel("CO2") plt.grid(color="#95a5a6", linestyle="--", linewidth=1, alpha=0.4) plt.show() data = df[["光照","CO2"]] estimator = KMeans(n_clusters=2) # 構造聚類器 estimator.fit(data) # 聚類 label_pred = estimator.labels_ # 獲取聚類標簽 centers_ = estimator.cluster_centers_ # 獲取聚類結果 # print("聚類標簽",label_pred) # print("聚類結果",centers_) # predict = estimator.predict([[787.75862069, 1505]]) # 測試新數(shù)據(jù)聚類結果 # print(predict) x0 = data[label_pred == 0] x1 = data[label_pred == 1] plt.scatter(x0["光照"], x0["CO2"],c="red", linewidths=1, alpha=0.8,marker='o', label='label0') plt.scatter(x1["光照"], x1["CO2"],c="green", linewidths=1, alpha=0.8,marker='+', label='label1') plt.grid(c="#95a5a6", linestyle="--", linewidth=1, alpha=0.4) plt.legend() plt.show()
到此這篇關于python利用K-Means算法實現(xiàn)對數(shù)據(jù)的聚類的文章就介紹到這了,更多相關python K-Means算法數(shù)據(jù)的聚類內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python報錯unexpected?indent的解決辦法
這篇文章主要給大家介紹了關于python報錯unexpected?indent的解決辦法,在python中出現(xiàn)"Unexpected indent"可能是代碼的縮進出現(xiàn)問題,需要的朋友可以參考下2023-06-06Django?Rest?Framework實現(xiàn)身份認證源碼詳解
這篇文章主要為大家介紹了Django?Rest?Framework實現(xiàn)身份認證源碼詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05matplotlib如何設置坐標軸刻度的個數(shù)及標簽的方法總結
這里介紹兩種設置坐標軸刻度的方法,一種是利用pyplot提交的api去進行設置,另一種是通過調用面向對象的api, 即通過matplotlib.axes.Axes去設置,需要的朋友可以參考下2021-06-06Keras中的兩種模型:Sequential和Model用法
這篇文章主要介紹了Keras中的兩種模型:Sequential和Model用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06python中的opencv和PIL(pillow)轉化操作
這篇文章主要介紹了python中的opencv和PIL(pillow)轉化操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03