python数据分析之机器学习K-Means聚类算法学习笔记!

系统 651 0

K-Means是一种聚类算法,无参照物,没有训练数据。

该算法的原理:有一群杂乱无章的点,分布混乱,现在规定把这些点分成K类,首先找到这K类的中心店,然后选择一个距离(欧氏距离、曼哈顿距离、切比雪夫距离等),计算各点到各中心点之间的距离,离哪个中心店近就划分到该中心店所属的类中。

重复上述操作,直到类不发生变化,或者你也可以设置最大迭代次数,这样即使类中心点发生变化,但是只要达到最大迭代次数就会结束。

下面通过一个实例:利用python给亚洲球队做聚类分析(以下为学习资料摘抄)

python数据分析之机器学习K-Means聚类算法学习笔记!_第1张图片

 

针对上面的排名,我们首先需要做的是数据规范化。你可以把这些值划分到 [0,1] 或者按照均值为 0,方差为 1 的正态分布进行规范化。

得到下面数据:

python数据分析之机器学习K-Means聚类算法学习笔记!_第2张图片

 

如果我们随机选取中国、日本、韩国为三个类的中心点,我们就需要看下这些球队到中心点的距离。(这里选择常用的欧氏距离)

python数据分析之机器学习K-Means聚类算法学习笔记!_第3张图片

 

然后我们再重新计算这三个类的中心点,如何计算呢?最简单的方式就是取平均值,然后根据新的中心点按照距离远近重新分配球队的分类,再根据球队的分类更新中心点的位置。计算过程这里不展开,最后一直迭代(重复上述的计算过程:计算中心点和划分分类)到分类不再发生变化,可以得到以下的分类结果:

python数据分析之机器学习K-Means聚类算法学习笔记!_第4张图片

 

下面用sklearn中的K-means

            
              from sklearn.cluster import KMeans

KMeans(n_clusters=8, init='k-means++', n_init=10, max_iter=300, tol=0.0001, precompute_distances='auto', verbose=0, random_state=None, copy_x=True, n_jobs=1, algorithm='auto')

            
          

参数说明:

python数据分析之机器学习K-Means聚类算法学习笔记!_第5张图片

在创建好 K-Means 类之后,就可以使用它的方法,最常用的是 fit 和 predict 这个两个函数。你可以单独使用 fit 函数和 predict 函数,也可以合并使用 fit_predict 函数。其中 fit(data) 可以对 data 数据进行 k-Means聚类。

predict(data) 可以针对 data 中的每个样本,计算最近的类。

完整的代码如下:

            
              
# coding: utf-8
from sklearn.cluster import KMeans
from sklearn import preprocessing
import pandas as pd
import numpy as np
# 输入数据
data = pd.read_csv('data.csv', encoding='gbk')
train_x = data[["2019 年国际排名 ","2018 世界杯 ","2015 亚洲杯 "]]
df = pd.DataFrame(train_x)
kmeans = KMeans(n_clusters=3)
# 规范化到 [0,1] 空间
min_max_scaler=preprocessing.MinMaxScaler()
train_x=min_max_scaler.fit_transform(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)

            
          

 

结果:

            
              国家  2019 年国际排名  2018 世界杯  2015 亚洲杯  聚类
0       中国         73       40        7   2
1       日本         60       15        5   0
2       韩国         61       19        2   0
3       伊朗         34       18        6   0
4       沙特         67       26       10   0
5      伊拉克         91       40        4   2
6      卡塔尔        101       40       13   1
7      阿联酋         81       40        6   2
8   乌兹别克斯坦         88       40        8   2
9       泰国        122       40       17   1
10      越南        102       50       17   1
11      阿曼         87       50       12   1
12      巴林        116       50       11   1
13      朝鲜        110       50       14   1
14      印尼        164       50       17   1
15      澳洲         40       30        1   0
16     叙利亚         76       40       17   1
17      约旦        118       50        9   1
18     科威特        160       50       15   1
19    巴勒斯坦         96       50       16   1

            
          

示例数据已上传到github:https://github.com/cystanford/kmeans


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请请扫描上面二维码支持博主1元、2元、5元等您想捐的金额吧,狠狠点击下面给点支持吧

发表我的评论
最新评论 总共0条评论