102、聚類Kmeans演算法
這兩天學習聚類中的Kmeans演算法,有關Kmeans演算法的介紹我推薦看"簡書-程sir"的文章,簡單易懂。
推薦地址:http://www.jianshu.com/p/fc91fed8c77b
下面直接看案例:Kmeans聚類分析運動員資料
在籃球這項運動中,每一位球員在球場上都有一個位置,如果某些運動員得分高,他可能是得分後衛;如果某些運動員身高高或籃板多,他可能是中鋒;助攻高可能是控衛。而現在有一個資料集data.txt,資料集的部分截圖如下:
在這個資料集裡面包含了96行資料對應著96位籃球運動員,這些資料每一列分別是每分鐘助攻數(assists_per_minute)、運動員身高(height)、運動員出場時間(time_played)、運動員年齡(age)和每分鐘得分數(points_per_minute)。
現在需要通過運動員的資料,判斷他適合打哪個位置。
接下來選取了每分鐘助攻數(assists_per_minute)和每分鐘得分數(points_per_minute)這兩列資料進行分析:,程式碼如下:
# -*- coding: utf-8 -*-
import os
data = []
# 讀取檔案
filename = "data.txt"
with open(filename) as f_ob:
lines = f_ob.readlines()
for line in lines:
line = line.rstrip() # 刪除換行
result = ' '.join(line.split()) #刪除多餘空格,儲存一個空格連線
# 獲取每行的五個值,將字串格式轉換為浮點數
s = [float(x) for x in result.strip().split(' ')]
print s
data.append(s) # 將資料儲存在data
print("完整資料集")
print data # 輸出完整資料集
print type(data) # 顯示資料集的型別
print("第一列和第五列資料")
L2 = [n[0] for n in data] # n[0]表示第一列
print L2
L5 = [n[4] for n in data] # n[4]表示第五列
print L5
# 將兩列資料生成二維矩陣
T = dict(zip(L2,L5))
"""zip函式:接受任意多個(包括0個和1個)序列作為引數,返回一個元組列表,
再把元組列表以字典形式存在T中"""
print("T的型別" + str(type(T)))
print T
# dict類轉化為list
X = list(map(lambda x,y: (x,y),T.keys(),T.values()))
print("X的型別" + str(type(X)))
print X
# 匯入KMeans聚類相關模組
from sklearn.cluster import Birch
from sklearn.cluster import KMeans
clf = KMeans(n_clusters=3)
y_pred = clf.fit_predict(X)
# 輸出聚類結果,96行資料,每個y_pred對應X一行或一個球員,聚成3類,類標為0、1、2
print clf
# 視覺化繪圖
import numpy as np
import matplotlib.pyplot as plt
# 使用for迴圈獲取第一列和第二列資料
x = [n[0] for n in X]
print x
y = [n[1] for n in X]
print y
# 座標
x1 = []
y1 = []
x2 = []
y2 = []
x3 = []
y3 = []
# 分佈獲取類標0、1、2的資料,賦值給(x1,y1) (x2,y2) (x3,y3)
i = 0
while i < len(x):
if y_pred[i] == 0:
x1.append(X[i][0])
y1.append(X[i][1])
elif y_pred[i] == 1:
x2.append(X[i][0])
y2.append(X[i][1])
elif y_pred[i] == 2:
x3.append(X[i][0])
y3.append(X[i][1])
i = i + 1
# 四種顏色 紅 綠 藍
plot1, = plt.plot(x1,y1,"or",marker="x")
plot2, = plt.plot(x2,y2,"og",marker="o")
plot3, = plt.plot(x3,y3,"ob",marker="*")
# 繪製標題
plt.title("Kmeans-Basketball Data")
# 繪製x軸和y軸座標
plt.xlabel("assists_per_minute")
plt.ylabel("points_per_minute")
# 設定右上角圖例
plt.legend((plot1,plot2,plot3),("A","B","C"),fontsize=10)
plt.show()
結果如下:從結果中可以看出:紅色部分助攻很少,得分卻很高,應該屬於得分後衛;而藍色部分處於中間部分,得分相比紅色部分低一點,但是助攻也有很多,應該屬於中鋒;綠色部分得分最少,助攻卻很多,這一部分球員應該屬於控衛。
相關文章
- KMeans演算法與GMM混合高斯聚類演算法聚類
- Kmeans如何初始化聚類中心聚類
- 利用python的KMeans和PCA包實現聚類演算法PythonPCA聚類演算法
- ML.NET技術研究系列-2聚類演算法KMeans聚類演算法
- 聚類kmeans演算法在yolov3中的應用聚類演算法YOLO
- 聚類演算法聚類演算法
- 聚類(part3)--高階聚類演算法聚類演算法
- 聚類之K均值聚類和EM演算法聚類演算法
- 吳恩達《Machine Learning》精煉筆記 8:聚類 KMeans 及其 Python實現吳恩達Mac筆記聚類Python
- 初探DBSCAN聚類演算法聚類演算法
- OPTICS聚類演算法原理聚類演算法
- 聚類演算法綜述聚類演算法
- 14聚類演算法-程式碼案例六-譜聚類(SC)演算法案例聚類演算法
- 09聚類演算法-層次聚類-CF-Tree、BIRCH、CURE聚類演算法
- 04聚類演算法-程式碼案例一-K-means聚類聚類演算法
- python Kmeans演算法解析Python演算法
- 可伸縮聚類演算法綜述(可伸縮聚類演算法開篇)聚類演算法
- 深度聚類演算法敘談聚類演算法
- Spark中的聚類演算法Spark聚類演算法
- 深度聚類演算法淺談聚類演算法
- Kmeans演算法優缺點演算法
- 聚類演算法——DBSCAN演算法原理及公式聚類演算法公式
- 【Python機器學習實戰】聚類演算法(1)——K-Means聚類Python機器學習聚類演算法
- 【python資料探勘課程】二十四.KMeans文字聚類分析互動百科語料Python聚類
- Kmeans如何確定聚類個數K聚類
- 聚類模型的演算法效能評價聚類模型演算法
- 【Python機器學習實戰】聚類演算法(2)——層次聚類(HAC)和DBSCANPython機器學習聚類演算法
- 20分鐘學會DBSCAN聚類演算法聚類演算法
- MMM全連結聚類演算法實現聚類演算法
- 聚類演算法與K-means實現聚類演算法
- KMeans演算法全面解析與應用案例演算法
- 聚類分析聚類
- 機器學習Sklearn系列:(五)聚類演算法機器學習聚類演算法
- 機器學習演算法筆記之8:聚類演算法機器學習演算法筆記聚類
- 手寫演算法-python程式碼實現Kmeans演算法Python
- 部分聚類演算法簡介及優缺點分析聚類演算法
- DBSCAN聚類演算法(Density-Based Spatial Clustering of Applications with Noise)聚類演算法APP
- EM 演算法-對鳶尾花資料進行聚類演算法聚類
- 聚類的基本問題及兩個常用演算法聚類演算法