26丨K-Means(上):如何给20支亚洲球队做聚类?
该思维导图由 AI 生成,仅供参考
K-Means 的工作原理
- 深入了解
- 翻译
- 解释
- 总结
K-Means算法是一种非监督学习方法,用于解决聚类问题。本文通过对20支亚洲足球队的成绩进行聚类的案例,介绍了K-Means算法的工作原理、数据处理和使用sklearn中的K-Means算法。文章首先解释了K-Means算法的工作原理,包括确定K类的中心点、将其他点划分到K类中以及与KNN的区分。然后,通过对亚洲球队的排名数据进行规范化,展示了如何使用K-Means算法进行聚类分析。最后,文章介绍了如何使用sklearn中的K-Means算法,并给出了相应的代码示例。通过本文的总结,读者可以快速了解K-Means算法的基本原理和在实际应用中的操作步骤,为进一步学习和应用提供了指导。文章还提到了K-Means算法的原理和区分K-Means和KNN算法的方法,为读者提供了更深入的理解。
《数据分析实战 45 讲》,新⼈⾸单¥59
全部留言(47)
- 最新
- 精选
- third置顶两者的区别的比喻是, Kmeans开班,选老大,风水轮流转,直到选出最佳中心老大 Knn小弟加队伍,离那个班相对近,就是那个班的 一群人的有些人想要聚在一起 首先大家民主(无监督学习)随机选K个老大(随机选择K个中心点) 谁跟谁近,就是那个队伍的人(计算距离,距离近的聚合到一块) 随着时间的推移,老大的位置在变化(根据算法,重新计算中心点) 直到选出真正的中心老大(重复,直到准确率最高) Knn 一个人想要找到自己的队伍 首先听从神的旨意(有监督学习),随机最近的几个邻居 看看距离远不远(根据算法,计算距离) 近的就是一个班的了(属于哪个分类多,就是哪一类) #输入数据 #数据探索 import pandas as pd data=pd.read_csv("./26/data.csv",encoding='gbk') # print(data)数据符合完整合一,数据质量较高 #提取数据 train_x=data[["2019年国际排名","2018世界杯","2015亚洲杯"]] #数据规范化 from sklearn import preprocessing ss=preprocessing.StandardScaler() train_ss_x=ss.fit_transform(train_x) #对数据进行拟合并预测 from sklearn.cluster import KMeans kmeans=KMeans(n_clusters=5) kmeans.fit(train_ss_x) pre=kmeans.predict(train_ss_x) #数据对比 train_x=pd.DataFrame(train_x) result=pd.concat((data,pd.DataFrame(pre)),axis=1) result.rename({0:u'聚类'},axis=1,inplace=True) print(result)
编辑回复: 举例很生动,代码也正确。大家可以看下。
2019-02-19234 - Lee置顶# coding: utf-8 from sklearn.cluster import KMeans from sklearn import preprocessing import pandas as pd import numpy as np # 输入数据 data = pd.read_csv(r'F:\Python\notebook\K-Means\kmeans-master\data.csv', encoding = 'gbk') data.head() train_x = data[["2019年国际排名","2018世界杯","2015亚洲杯"]] df = pd.DataFrame(train_x) kmeans = KMeans(n_clusters=5) # 规范化 min_max_scaler=preprocessing.StandardScaler() 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 0 1 日本 60 15 5 3 2 韩国 61 19 2 3 3 伊朗 34 18 6 3 4 沙特 67 26 10 0 5 伊拉克 91 40 4 0 6 卡塔尔 101 40 13 4 7 阿联酋 81 40 6 0 8 乌兹别克斯坦 88 40 8 0 9 泰国 122 40 17 4 10 越南 102 50 17 4 11 阿曼 87 50 12 2 12 巴林 116 50 11 2 13 朝鲜 110 50 14 2 14 印尼 164 50 17 1 15 澳洲 40 30 1 3 16 叙利亚 76 40 17 4 17 约旦 118 50 9 2 18 科威特 160 50 15 1 19 巴勒斯坦 96 50 16 4
编辑回复: 正确
2019-02-149 - 白夜然后我们再重新计算这三个类的中心点,如何计算呢?最简单的方式就是取平均值,然后根据新的中心点按照距离远近重新分配球队的分类,再根据球队的分类更新中心点的位置。计算过程这里不展开,最后一直迭代(重复上述的计算过程:计算中心点和划分分类)到分类不再发生变化。 老师,这段可以再解释一下吗?没计算过程不太理解
编辑回复: 同一个类别下的平均值。比如都属于同一个类别里面有10个点,那么新的中心点就是这10个点的中心点,一种简单的方式就是取平均值。比如我在文章里举了足球队的例子,一共有3个指标,每个球队都有这三个指标的特征值,那么新的中心点,就是取这个类别中的这些点 这三个指标特征值的平均值。。
2019-02-15310 - 乃鱼同学K-Means 是聚类算法:经常做坏事的人 ,就是坏人。 KNN 是分类算法:坏人经常做坏事。 我对孩子就是这么说的。
作者回复: 哈哈哈 这么说很形象
2019-10-087 - 听妈妈的话代码里的第八行应该去掉列名里的空格: train_x = data[['2019年国际排名','2018世界杯','2015亚洲杯']] Z-score标准化的代码:train_x=preprocessing.scale(train_x) 国家 2019年国际排名 2018世界杯 2015亚洲杯 聚类 0 中国 73 40 7 3 1 日本 60 15 5 1 2 韩国 61 19 2 1 3 伊朗 34 18 6 1 4 沙特 67 26 10 1 5 伊拉克 91 40 4 3 6 卡塔尔 101 40 13 0 7 阿联酋 81 40 6 3 8 乌兹别克斯坦 88 40 8 3 9 泰国 122 40 17 4 10 越南 102 50 17 4 11 阿曼 87 50 12 0 12 巴林 116 50 11 0 13 朝鲜 110 50 14 0 14 印尼 164 50 17 2 15 澳洲 40 30 1 1 16 叙利亚 76 40 17 4 17 约旦 118 50 9 0 18 科威特 160 50 15 2 19 巴勒斯坦 96 50 16 4
作者回复: Good Job
2019-03-2234 - iamtalent123老师,请问为什么要对train_x转化为datadframe格式呢?df=pd.DataFrame(train_x),df有什么用呢?
编辑回复: 可以不用转换,之前已经用了: data = pd.read_csv('data.csv', encoding='gbk') train_x = data[["2019年国际排名","2018世界杯","2015亚洲杯"]] 得到的train_x是DataFrame数据结构,你也可以通过查看type(train_x),所以不用再转换了。
2019-03-0524 - juixv3937为什么,你们的代码,运行出来跟我的结果都不一样
作者回复: KMeans每次运行结果不一定都相同,有一定随机性
2019-08-1122 - 周飞k-means的算法原理就是: 1.选择几个初始的中心点。 2.计算每个点到各个中心点的距离,然后把每个点划分到距离最近的中心点所在的类。 3.更新中心点的值。对于每个类,计算类中所有数据的平均值,把平均值作为新的中心点。 4.重复 2 和4 步骤,直到每个类中的数据不再变化,或者到达指定的迭代步数。
作者回复: 整理的不错
2019-04-142 - FORWARD―MOUNT如何调整聚类中心没听懂
编辑回复: 取特征值的平均值为中心点。
2019-02-1822 - Jack老师,对于K-Means算法,我们如何评估模型的好坏,常用的评价指标都有哪些呢?
作者回复: 一般使用轮廓系数(越大越好)或者误差平方和(即SSE,一般用于手肘法中确认K值的拐点)
2020-07-201