基于K-Means聚类、高斯聚类对亚洲球队进行聚类

需求:对18只亚洲球队进行聚类

数据集:包含四个字段(国家,2019国际排名,2018世界杯排名,2015亚洲杯排名)

完整代码:

# coding: utf-8
import pandas as pd
# 数据预处理
from sklearn import preprocessing
# 引入KMeans聚类算法
from sklearn.cluster import KMeans

# 数据加载
data = pd.read_csv('team_cluster_data.csv', encoding='gbk')
# 抽取data中的三列数据进行后面的聚类分析
train_x = data[["2019国际排名", "2018世界杯排名", "2015亚洲杯排名"]]
# 创建KMeans对象,并且规定聚成3类
kmeans = KMeans(n_clusters=3)
# 创建对象,规范化到[0,1]空间(创建了一把尺子)
min_max_scaler = preprocessing.MinMaxScaler()
# fit学习这个数据(得到一些值),transform应用这个尺子,最后得到一个变化后的结果(在0,1范围内)
train_x = min_max_scaler.fit_transform(train_x)
# print(train_x)
# kmeans算法拟合数据(规范后的数据)
kmeans.fit(train_x)
# 对训练集数据预测分类(打标签)
predict_y = kmeans.predict(train_x)
# 合并聚类结果,插入到原数据中
result = pd.concat((data, pd.DataFrame(predict_y)), axis=1)
# 插入的数据列起个名字
result.rename({0: u'聚类结果'}, axis=1, inplace=True)
print(result)
# 将结果导出到CSV文件中
# result.to_csv("team_cluster_result.csv")

# 高斯混合聚类(无限逼近曲线)
from sklearn.mixture import GaussianMixture

# n_components聚类的数量
model = GaussianMixture(n_components=3)
model.fit(train_x)
# result = model.predict(train_x)
predict_y = model.predict(train_x)
# 合并聚类结果,插入到原数据中
result = pd.concat((data, pd.DataFrame(predict_y)), axis=1)
# inplace=True  原地修改,节省内存
result.rename({0: u'聚类结果'}, axis=1, inplace=True)
print(result)

 愿有人陪你颠沛流离,如果没有,愿你成为自己的太阳

 

posted @ 2020-10-30 10:32  mingke07  阅读(249)  评论(0)    收藏  举报