# k-means算法对大数据薪资情况的聚类分析
### 简介
本项目使用python实现机器学习K-means聚类算法,对数据进行聚类并绘图。
数据使用了boss直聘北京市大数据的数据,K-means的两个特征值选取的是每个岗位的最低薪资和最高薪资
初始质心选取了3个,即k=3、
### 原理
K-means算法属于八大经典的机器学习算法中的其中一种,是一种无监督的聚类算法。其中无监督是机器学习领域中一个专业名词,和有监督是相对的,两者最本质的区别就在于研究的样本是否包含标签。比如猫狗分类这个问题中,猫和狗就是标签。对于聚类,其实是和分类相对应的,其中分类就是之有标签的。而聚类则是只没有标签的,我们需要将这些无标签的数据,按照各自的属性将他们会聚成不同的类别,从而将他们区分开。
在k-means算法中,存在着质心和簇。在进行算法之前,我们需要人工的指定将数据分为K个簇,并随便选取K个质心。就拿认知实习学习中的例子举例,假如我们又8个数据,分别为a1-a8,我们需要将这八个数据分为三个簇,也就是说k=3。这是我们就需要在a1-a8中随机选取三个数据点作为质心我们将质心记为b11,b12,b13。确定了质心后,我们需要计算a1-a8和三个质心的距离,并将距离最短的归为一类。比如a5到b11距离为2,到b12距离为3,到b13距离为1,那么就将a5和质心b13归为同一个簇。如此一次计算8个数据,并得到三个簇。然后对每个簇中的数据点,计算数据的平均值,作为更新之后的新的质心,记为b21,b22,b23。然后重复以上的步骤,再次计算a1-a8与三个新质心的距离,并将其按最短距离分为三个簇,并再次计算出新的质心。在经过若干次迭代后,三个老质心和三个新质心相同,不在发生改变,那么k-means算法就已经收敛,算法结束。最后得到的三个簇就是通过k-means算法聚类后的数据。
学习完K-means算法的理论思路后,我们就可以清晰的发现k-means算法的缺点。其一为在处理数据的时候,我们往往需要人工选取k值,规定出所需要的簇。所以就可能存在,我们在拿到了数据,并不知到该分为几类的情况,就导致了错误的分类得不到我们想要的结果。其二为,k-means算法受初始值和离群点的影响非常大。对于初始值,如果我们选取了a1,a2,a3作为初始质心,那么有可能只迭代一次就完成了收敛,但是如果选取a4,a5,a6作为初始质心,那么可能迭代好多次才完成收敛,所以这个初始值影响了迭代次数,造成了稳定性差点缺点。对于离群点,数据中会存在我们人力无法识别出的离群点,这些离群点往往会影响实验的结果,这也造成了其稳定性差的缺点。
对于代码实现来说,以python为例,我们需要针对数据特点,数据初始质心和迭代后的质心,距离的计算函数(使用欧氏距离),创建聚类中心的函数,和实现聚类迭代的函数进行设计。只需要按理论建模设计以上对应的函数,便可以完成整个K-means模型的建立。模型建立后,还应该使用matplotllib包对得到的结果进行绘制,以得出直观的结果。
有了模型之后,就需要用到数据采集,我利用了python的爬虫技术,爬取了boss直聘网站中,北京市大数据岗位的招聘信息,约有150多条。每条岗位信息中,存在一个该岗位的最低工资标准和该岗位的最高工资标准。我们将最高工资标准和最低工资便准作为数据的两个特征,以此去应用我们之前搭建的K-means模型。
### 项目结构
- /
- data --- 用于存放爬虫所需要的数据和K-means算法所需要的数据
- res --- 用于存放K-means算法每一次迭代的图像
- src --- 用于存放K-means和爬虫的源代码
### 源码
![](https://i.vgy.me/rALmfG.gif)
### 数据集
- [聚类数据集下载](https://gitee.com/broky-dev/k-means/raw/master/data/BossData.xls)
- 数据集中采用了最小薪资水平和最大薪资水平两个特征
![](https://i.vgy.me/7Mqp7S.gif)
### 聚类结果
- 总览
![](https://i.vgy.me/1lWomA.gif)
- 第一次迭代
![](/res/0.png)
- 第二次迭代
![](/res/1.png)
- 第三次迭代
![](/res/2.png)
- 第四次迭代
![](/res/3.png)
- 第五次迭代
![](/res/4.png)
- 第六次迭代
![](/res/5.png)
- 第七次迭代,已收敛
![](/res/6.png)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
python实现机器学习K-means聚类算法.zip对数据进行聚类并绘图。原理 K-means算法属于八大经典的机器学习算法中的其中一种,是一种无监督的聚类算法。其中无监督是机器学习领域中一个专业名词,和有监督是相对的,两者最本质的区别就在于研究的样本是否包含标签。比如猫狗分类这个问题中,猫和狗就是标签。对于聚类,其实是和分类相对应的,其中分类就是之有标签的。而聚类则是只没有标签的,我们需要将这些无标签的数据,按照各自的属性将他们会聚成不同的类别,从而将他们区分开。 在k-means算法中,存在着质心和簇。在进行算法之前,我们需要人工的指定将数据分为K个簇,并随便选取K个质心。就拿认知实习学习中的例子举例,假如我们又8个数据,分别为a1-a8,我们需要将这八个数据分为三个簇,也就是说k=3。这是我们就需要在a1-a8中随机选取三个数据点作为质心我们将质心记为b11,b12,b13。确定了质心后,我们需要计算a1-a8和三个质心的距离,并将距离最短的归为一类。比如a5到b11距离为2,到b12距离为3,到b13距离为1,那么就将a5和质心b13归为同一个簇。如此一次计算8个数
资源推荐
资源详情
资源评论
收起资源包目录
python实现K-means聚类算法.zip (25个子文件)
k-means-master
res
2RtteNCBk9.gif 52.07MB
5.png 16KB
o43sUC0KFC.gif 3.35MB
1.png 16KB
2.png 16KB
4.png 16KB
3.png 16KB
data
bossHtml5.html 266KB
bossHtml6.html 268KB
bossHtml8.html 242KB
BossData.xls 74KB
bossHtml2.html 265KB
bossHtml4.html 265KB
bossHtml1.html 270KB
bossHtml3.html 267KB
bossHtml7.html 268KB
src
K-means.py 4KB
BossSpider.py 7KB
.idea
misc.xml 192B
vcs.xml 180B
K-means.iml 284B
modules.xml 266B
.gitignore 180B
inspectionProfiles
profiles_settings.xml 174B
README.md 5KB
共 25 条
- 1
资源评论
- larrypage_2023-05-28资源有很好的参考价值,总算找到了自己需要的资源啦。
- BrightStone2024-03-26资源有很好的参考价值,总算找到了自己需要的资源啦。
程序员张小妍
- 粉丝: 1w+
- 资源: 2599
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功