k-means算法进行员工发展潜力分组

背景

数据集 https://datahack.analyticsvidhya.com/contest/wns-analytics-hackathon-2018-1/
您的客户是一家大型跨国公司,在整个组织中有9个广泛的垂直行业。客户面临的问题之一是确定合适的培训方向(仅适用于经理职位及以下职位)并及时做好准备。目前该过程如下:

1.收集员工信息
2.将员工分组
3.分析各组特征,结合实际情况进行培训课制定

本篇将进行员工分组外行肤浅式的特征分析两步

数据预处理

1.删除无关信息:培训预算分配应本着公平公正的原则,与性别,部门,区域无关(虽然肯定是有关的,但也是在分完组后后进行调整)
2.探索缺失值:未发现缺失值
3.探索异常值:未发现异常值
4.重编码变量
5.标准化

df = pd.read_csv(r'C:\Users\Administrator\Downloads\train_LZdllcl.csv')
OneHot_df = pd.get_dummies(data=df,columns=['education', 'recruitment_channel'])# OneHot编码
OneHot_df = OneHot_df.iloc[:, 1:] # 删除员工id列
std_df = (OneHot_df - OneHot_df.mean(axis=0))/(OneHot_df.std(axis=0)) # 标准化

k-means分组

对于K-Means方法,k的取值是一个难点,因为是无监督的聚类分析问题,所以不寻在绝对正确的值,需要进行研究试探。这里采用计算SSE的方法,尝试找到最好的K数值。

def distEclud(vecA, vecB):"""计算两个向量的欧式距离的平方,并返回"""return np.sum(np.power(vecA - vecB, 2))def test_Kmeans_nclusters(data_train):"""计算不同的k值时,SSE的大小变化"""data_train = data_train.valuesnums=range(2,10)SSE = []for num in nums:sse = 0kmodel = KMeans(n_clusters=num, n_jobs=4)kmodel.fit(data_train)# 簇中心cluster_ceter_list = kmodel.cluster_centers_# 个样本属于的簇序号列表cluster_list = kmodel.labels_.tolist()for index in  range(len(data_train)):cluster_num = cluster_list[index]sse += distEclud(data_train[index, :], cluster_ceter_list[cluster_num])print("簇数是",num , "时; SSE是", sse)SSE.append(sse)return nums, SSEnums, SSE = test_Kmeans_nclusters(std_df)
'''
簇数是 2 时; SSE是 422388.18314035854
簇数是 3 时; SSE是 364360.23507114867
簇数是 4 时; SSE是 317459.9231693121
簇数是 5 时; SSE是 278501.9665155248
簇数是 6 时; SSE是 251983.83008386526
簇数是 7 时; SSE是 227596.44245812204
簇数是 8 时; SSE是 210731.41327592355
簇数是 9 时; SSE是 198322.66405387426
'''
#画图,通过观察SSE与k的取值尝试找出合适的k值
# 中文和负号的正常显示
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['font.size'] = 12.0
plt.rcParams['axes.unicode_minus'] = False
# 使用ggplot的绘图风格
plt.style.use('ggplot')
## 绘图观测SSE与簇个数的关系
fig=plt.figure(figsize=(10, 8))
ax=fig.add_subplot(1,1,1)
ax.plot(nums,SSE,marker="+")
ax.set_xlabel("n_clusters", fontsize=18)
ax.set_ylabel("SSE", fontsize=18)
fig.suptitle("KMeans", fontsize=20)
plt.show()


无明显肘点,考虑到有9个属性,故分为4,5, 6类三种情况分析

kmodel = KMeans(n_clusters=4, n_jobs=4) #分别取n_clusters=4 5 6
kmodel.fit(std_df)
r1 = pd.Series(kmodel.labels_).value_counts() #统计各个类别的数目
r2 = pd.DataFrame(kmodel.cluster_centers_) #找出聚类中心# 所有簇中心坐标值中最大值和最小值
max = r2.values.max()
min = r2.values.min()
r = pd.concat([r2, r1], axis = 1) #横向连接(0是纵向),得到聚类中心对应的类别下的数目
r.columns = list(std_df.columns) + [u'类别数目'] #重命名表头# 绘图
fig=plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, polar=True)
center_num = r.values
feature = ["学历水平", "上一次培训时间", "年龄", "上一年员工评分", "企龄", "KPI得分", "上一年得奖", "当前培训评估得分", "将晋升"]
N =len(feature)
for i, v in enumerate(center_num):# 设置雷达图的角度,用于平分切开一个圆面angles=np.linspace(0, 2*np.pi, N, endpoint=False)# 为了使雷达图一圈封闭起来,需要下面的步骤center = np.concatenate((v[:-1],[v[0]]))angles=np.concatenate((angles,[angles[0]]))# 绘制折线图ax.plot(angles, center, 'o-', linewidth=2, label = "第%d簇人群,%d人"% (i+1,v[-1]))# 填充颜色ax.fill(angles, center, alpha=0.25)# 添加每个特征的标签ax.set_thetagrids(angles * 180/np.pi, feature, fontsize=15)# 设置雷达图的范围ax.set_ylim(min-0.1, max+0.1)# 添加标题plt.title('群特征分析图', fontsize=20)# 添加网格线ax.grid(True)# 设置图例plt.legend(loc='upper right', bbox_to_anchor=(1.3,1.0),ncol=1,fancybox=True,shadow=True)# 显示图形
plt.show()


分4组时各组都有突出点
分5组时各组都有突出点

分6组时第二簇被其他簇包含了,不适合
分4 5组的分组里,’上一次培训时间‘特征都不明显,故相当于少了一个属性,故最终选取分组多的,分5组

外行肤浅式的特征分析


第1簇:企龄、年龄、学历都高,大多为管理层,这类人员应该注重通用的工商管理学的培训
第2簇:学历低,KPI低,年龄小,多为入职不久的新人,且占比最多,这类人员应注重专业技能、基本素质、公司忠诚度的培训
第3簇:KPI最高,却难晋升,说明可能是工作之外的技能欠缺,应该注重非专业技能,如人际、职场等培训
第4簇:最近表现突出,企龄较短,将晋升,多为公司准备重用的新人,应该注重综合技能(技术+管理)的培训
第5簇:KPI较高,晋升可能最大,可能公司看重这类人其他(未在提供数据里的)能力,这类人的培训方向需再做调查确定…

保存标记

df = pd.read_csv(r'C:\Users\Administrator\Downloads\train_LZdllcl.csv')
df['label'] = pd.Series(kmodel.labels_)
df.to_excel('员工培训分类.xlsx')

k-means算法进行员工培训方向分组相关推荐

  1. kmeans改进 matlab,基于距离函数的改进k―means 算法

    摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...

  2. k means算法C语言伪代码,K均值算法(K-Means)

    1. K-Means算法步骤 算法步骤 收敛性定义,畸变函数(distortion function): 伪代码: 1) 创建k个点作为K个簇的起始质心(经常随机选择) 2) 当任意一个点的蔟分配结果 ...

  3. K 均值算法-如何让数据自动分组

    公号:码农充电站pro 主页:https://codeshellme.github.io 目录 1,K 均值算法 2,K 均值算法聚类过程 3,K 均值算法的实现 4,准备数据点 5,对数据聚类 6, ...

  4. k均值聚类算法(K Means)及其实战案例

    算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...

  5. K means 图片压缩

    k-means的基本原理较为清晰,这里不多赘述,本次博客主要通过基础的k means算法进行图像的压缩处理. 原理分析 在彩色图像中,每个像素的大小为3字节(RGB),可以表示的颜色总数为256 * ...

  6. 独家 | R语言中K邻近算法的初学者指南:从菜鸟到大神(附代码&链接)

    作者:Leihua Ye, UC Santa Barbara 翻译:陈超 校对:冯羽 本文约2300字,建议阅读10分钟 本文介绍了一种针对初学者的K临近算法在R语言中的实现方法. 本文呈现了一种在R ...

  7. k均值算法 二分k均值算法_如何获得K均值算法面试问题

    k均值算法 二分k均值算法 数据科学访谈 (Data Science Interviews) KMeans is one of the most common and important cluste ...

  8. k折交叉验证优缺点_R语言中K邻近算法的初学者指南:从菜鸟到大神(附代码&链接)...

    作者:Leihua Ye, UC Santa Barbara 翻译:陈超 校对:冯羽 本文约2300字,建议阅读10分钟 本文介绍了一种针对初学者的K临近算法在R语言中的实现方法. 本文呈现了一种在R ...

  9. C语言与算法设计技能培训

    C 语言与算法设计技能培训 1 .用C语言实现下列各种排序:冒泡排序.选择排序.快速排序冒泡排序函数如下: /*n表示待排序的数据的个数*/ #define n 10 void maopao(int ...

最新文章

  1. 1084. [SCOI2005]最大子矩阵【网格DP】
  2. 【组合数学】指数型母函数 应用 ( 多重集排列问题 | 不同球放在不同盒子里 | 奇/偶数序列的指数生成函数推导 )
  3. bpmn流程图_流程图怎么做?金舟在线流程图教你高逼格制作
  4. Windows与Linux(服务器)之间大文件传输
  5. 米斯特白帽培训讲义 工具篇 AWVS
  6. PHP危险函数被禁止怎么绕过,PHP危险函数(disable_functions)设置
  7. ES6 迭代器与生成器(非常详细、容易理解)
  8. python中库是什么意思_python库是什么意思
  9. Lightroom Classic 教程,如何在 Lightroom 中使用引导式修复透视图?
  10. 圈圈教你学USB学习资料大全(包含完整光盘和教程)
  11. c语言游戏教程pdf,c语言编写小游戏系列教程之移动游戏人物,C_C++,自学去.pdf
  12. linux查看二进制文件乱码
  13. Pyspark特征工程--RFormula
  14. 使用经验-深度学习云服务器mist GPU
  15. 这18个网站能让你的页面背景炫酷起来
  16. ip地址合不合法怎么看_怎样判断IP地址的非法性?
  17. QT 设置label内字体,字体颜色,背景色 ; 字体的中英对照
  18. 白苹果了怎么办_iOS 13如何降级?iOS13降级失败怎么办?
  19. 我的学习笔记005--常见web前台技术之间的关系html,css,javascript...mxx
  20. mysql emoy表情_GitHub - PandaQAQ/PandaEmoView: emoji gif 表情图文混排,仿微信表情输入...

热门文章

  1. 用MATLAB的函数scatter()绘制散点图
  2. 分支预测优化之__builtin_expect
  3. java上看小说软件_i悦读小说阅读软件 For java
  4. 高新技术企业认定中涉及的领域有哪些?
  5. Python实现烟花效果,祝大家2021年,牛年大吉。
  6. DOM 树的解析渲染
  7. js将数字转换为汉字
  8. 【深度学习】非常详细 | 用 Pytorch 理解卷积网络
  9. 开源的IM框架--担心
  10. 不同平台下移植x264