使用K Means演算法劃分亞洲國家的三個足球梯隊

2021-10-05 23:12:41 字數 2914 閱讀 5796

資料:asina_football_data.csv

資料描述:

id :國家對應id

國家:國家名稱

2023年國際排名:2019 年國際足聯的世界排名。

2023年世界盃:2018 年世界盃中,很多球隊沒有進入到決賽圈,所以只有進入到決賽圈的球隊才有實際的排名。如果是亞洲區預選賽 12 強的球隊,排名會設定為 40。如果沒有進入亞洲區預選賽 12 強,球隊排名會設定為 50。

2023年亞洲盃:真實排名。

一、核心**截圖

匯入實驗中所需要的包

import matplotlib.pyplot as plt

from matplotlib import font_manager

from mpl_toolkits.mplot3d import axes3d

import matplotlib

import pandas as pd

from sklearn import preprocessing

from sklearn.cluster import kmean

2.匯入字型,用於3d圖中顯示中文漢字,字型可以自行在網上尋找ttf格式的字型。

my_font = font_manager.fontproperties( fname=

'時尚細黑字型.ttf'

)

3.讀取資料

# 讀取資料

defread_data

(filename)

:return pd.read_csv( filename )

4.處理資料

# 處理資料

defdeal_data

(data)

:return preprocessing.scale( data.iloc[:,

2:])

5.訓練模型

# 訓練模型

defmodel_fit_pred

(scale_x, data, k=3)

: model = kmeans( k )

clf = model.fit( scale_x )

pre = clf.predict( scale_x )

# **模型

print

( pre )

data = pd.concat(

[data, pd.dataframe( pre )

], axis=1)

data.rename( columns=

, inplace=

true

)# 修改列名

return data

畫圖 3d顯示梯隊

# 畫圖 3d顯示梯隊

defdraw

(data)

: xs = data.iloc[:,

2]ys = data.iloc[:,

3]zs = data.iloc[:,

4]fig = plt.figure(

) ax = axes3d( fig )

name = data.iloc[:,

1]for label, x, y, z in

zip( name, xs, ys, zs )

: ax.scatter( x, y, z )

ax.text( x, y, z, label, fontproperties=my_font )

cvalue =

['r'

,'y'

,'g'

,'b'

,'r'

,'y'

,'g'

,'b'

,'r'

] ax.set_xlabel(

'2023年國際排名'

, fontproperties=my_font )

ax.set_ylabel(

'2023年世界盃'

, fontproperties=my_font )

ax.set_zlabel(

'2023年亞洲盃'

, fontproperties=my_font )

plt.show(

)

最後的主函式呼叫

if __name__ ==

'__main__'

: data = read_data(

"asina_football_data.csv"

)# 讀取資料

print

( data.head())

scale_x = deal_data( data )

data = model_fit_pred( scale_x, data,3)

print

( data.head())

draw( data )

# 畫出3d圖

最終3d效果顯示:

k-means 的工作原理總結如下:

選取 k 個點作為初始的類中心點,這些點一般都是從資料集中隨機抽取的;

將每個點分配到最近的類中心點,這樣就形成了 k 個類,然後重新計算每個類的中心點;

重複第二步,直到類不發生變化,或者你也可以設定最大迭代次數,這樣即使類中心點發生變化,但是只要達到最大迭代次數就會結束。

如何計算幾個梯隊的中心點呢,在做專案時常常會遇到這個事情,最簡單的方式就是取平均值,然後根據新的中心點按照距離遠近重新分配球隊的分類,再根據球隊的分類更新中心點的位置。

劃分聚類 Kmeans演算法

劃分聚類 聚類是針對一堆沒有類別屬性的物件的,它把這一大堆物件分成一些小堆,並保證小堆內的物件之間彼此相似,小堆之間的物件彼此不同。劃分聚類是聚類的一種,由它生成的小堆,小堆間沒有一樣的元素,大堆小堆之間關係和大集合與它的的分割一樣。kmeans演算法 設資料點 物件 的集合為 其中,xi 是實數空...

mahout使用KMeans演算法

mahout提供了記憶體中和分布式的兩種kmeans聚類實現。下面是記憶體中kmeans的 示例,示例 使用了最簡單的一維向量作為輸入 tests kmeans cluster algorithm in memory,note the test uses only 1 d vector i.e.a ...

kmeans演算法在matlab中的使用

matlab中kmeans使用 matlab中kmeans使用 英文實在太難看懂了,翻譯一下 後續有空就加上吧 idx,c kmeans x,k 返回聚類下標idx,聚類中心座標c idx,c,sumd kmeans x,k 返回聚類內的點到中心的距離之和的k 1 向量 sumd.idx,c,sum...