目的是為了檢測出采集數(shù)據(jù)中的異常值。所以很明確,這種情況下的簇為2:正常數(shù)據(jù)和異常數(shù)據(jù)兩大類
1、安裝相應(yīng)的庫
import matplotlib.pyplot as plt # 用于可視化
from sklearn.cluster import KMeans # 用于聚類
import pandas as pd # 用于讀取文件
2、實(shí)現(xiàn)聚類
2.1 讀取數(shù)據(jù)并可視化
# 讀取本地?cái)?shù)據(jù)文件
df = pd.read_excel("../data/output3.xls", header=0)
本次實(shí)驗(yàn)選擇溫度和CO2作為二維數(shù)據(jù),其中溫度含有異常數(shù)據(jù)。
plt.scatter(df["光照"], df["CO2"], linewidths=1, alpha=0.8)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標(biāo)簽v
plt.xlabel("光照")
plt.ylabel("CO2")
plt.grid(color="#95a5a6", linestyle="--", linewidth=1, alpha=0.4)
plt.show()
2.2 K-means聚類
設(shè)置規(guī)定要聚的類別個(gè)數(shù)為2
data = df[["光照","CO2"]] # 從原始數(shù)據(jù)中選擇該兩項(xiàng)
estimator = KMeans(n_clusters=2) # 構(gòu)造聚類器
estimator.fit(data) # 將數(shù)據(jù)帶入聚類模型
獲取聚類中心的值和聚類標(biāo)簽
label_pred = estimator.labels_ # 獲取聚類標(biāo)簽
centers_ = estimator.cluster_centers_ # 獲取聚類中心
將聚類后的 label0 和 label1 的數(shù)據(jù)進(jìn)行輸出
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'] # 用來正常顯示中文標(biāo)簽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) # 構(gòu)造聚類器
estimator.fit(data) # 聚類
label_pred = estimator.labels_ # 獲取聚類標(biāo)簽
centers_ = estimator.cluster_centers_ # 獲取聚類結(jié)果
# print("聚類標(biāo)簽",label_pred)
# print("聚類結(jié)果",centers_)
# predict = estimator.predict([[787.75862069, 1505]]) # 測試新數(shù)據(jù)聚類結(jié)果
# 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()
到此這篇關(guān)于python利用K-Means算法實(shí)現(xiàn)對(duì)數(shù)據(jù)的聚類的文章就介紹到這了,更多相關(guān)python K-Means算法數(shù)據(jù)的聚類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Python退火算法在高次方程的應(yīng)用
- Python實(shí)現(xiàn)K-means聚類算法并可視化生成動(dòng)圖步驟詳解
- 開源一個(gè)c# 新的雪花算法
- 谷歌師兄的算法刷題筆記
- Python實(shí)現(xiàn)粒子群算法的示例
- 如何使用Java模擬退火算法優(yōu)化Hash函數(shù)