文章目录

  • 1. 导入工具包
  • 2. 读取数据
  • 3. 特征处理
    • 3.1 数字特征归一化
    • 3.2 文字特征处理
    • 3.3 特征合并
  • 4. 定义模型训练
  • 5. 预测
  • 6. 新人赛结果

竞赛地址

使用 sklearn Pipeline 模板

1. 导入工具包

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['figure.facecolor']=(1,1,1,1) # pycharm 绘图白底,看得清坐标
import pandas as pd
import seaborn as sns
from sklearn import preprocessing
from sklearn.linear_model import LinearRegression as lr
from sklearn.ensemble import RandomForestRegressor as rf
from sklearn.model_selection import train_test_split,cross_val_score
from sklearn.metrics import *
from sklearn.preprocessing import OneHotEncoder,LabelEncoder,OrdinalEncoder

2. 读取数据

# 读取数据
tr_data = pd.read_csv("train.csv",index_col='id')
X_test = pd.read_csv("test.csv",index_col='id') # test不含标签tr_data.head(10)
tr_data.corr() # 相关系数
sns.regplot(x=tr_data.index, y=tr_data['satisfaction_level'])


可以看出 上一次的评分、有没有工伤、过去5年有没有晋升 跟 满意度 呈正相关系数

可以看出 id 跟满意度,没有特别强的关系,可以不作为特征

3. 特征处理

# X丢弃标签
X = tr_data.drop(['satisfaction_level'], axis=1)
y = tr_data['satisfaction_level']# 切分数据
X_train, X_valid, y_train, y_valid = train_test_split(X, y,test_size=0.2,random_state=1)# 特征列名
feature = X_train.columns
print(feature)# 查看文字特征列
s = (X_train.dtypes == 'object')
object_cols = list(s[s].index)
print(object_cols)# 查看标签数据
y_train
# 查看标签值,是一系列的浮点数
pd.unique(y_train)

3.1 数字特征归一化

  • 对数字特征归一化,避免量纲不一样造成的权重差异
# 数字特征,丢弃文字特征列
num_X_train = X_train.drop(object_cols, axis=1)
num_X_valid = X_valid.drop(object_cols, axis=1)
num_X_test = X_test.drop(object_cols, axis=1)# 定义归一化转换器
X_scale = preprocessing.StandardScaler()
X_scale.fit_transform(num_X_train)# 转化后的数据是 numpy 数组
num_X_train_data = X_scale.fit_transform(num_X_train)
num_X_valid_data = X_scale.transform(num_X_valid)
num_X_test_data = X_scale.transform(num_X_test)# 转换后的 numpy 数组,转成 pandas 的 DataFrame
num_X_train_scale = pd.DataFrame(num_X_train_data)
# 特征列名称也要重新填上
num_X_train_scale.columns = num_X_train.columnsnum_X_valid_scale = pd.DataFrame(num_X_valid_data)
num_X_valid_scale.columns = num_X_valid.columnsnum_X_test_scale = pd.DataFrame(num_X_test_data)
num_X_test_scale.columns = num_X_test.columns# index 丢失,重新赋值
num_X_train_scale.index = num_X_train.index
num_X_valid_scale.index = num_X_valid.index
num_X_test_scale.index = num_X_test.index

3.2 文字特征处理

  • 先检查数据集之间的特征的数值种类是否有差异,防止编码转换出错
# 检查是否有列中,数据集之间的值的种类有差异,防止编码transform出错,经检查没有bad
good_label_cols = [col for col in object_cols ifset(X_train[col]) == set(X_valid[col])]# Problematic columns that will be dropped from the dataset
bad_label_cols = list(set(object_cols)-set(good_label_cols))good_label_cols = [col for col in object_cols ifset(X_train[col]) == set(X_test[col])]# Problematic columns that will be dropped from the dataset
bad_label_cols = list(set(object_cols)-set(good_label_cols))

经检查,数据集之间的值没有独自特有的,可以放心使用

# 文字特征
cat_X_train = X_train[good_label_cols]
cat_X_valid = X_valid[good_label_cols]
cat_X_test = X_test[good_label_cols]
# 文字特征转换成数字特征
labEncoder = LabelEncoder()
for f in set(good_label_cols):cat_X_train[f] = labEncoder.fit_transform(cat_X_train[f])cat_X_valid[f] = labEncoder.transform(cat_X_valid[f])cat_X_test[f] = labEncoder.transform(cat_X_test[f])

3.3 特征合并

  • 处理后的数字特征与文字特征合并
# 同样的,index需要重新赋值,不操作此步,合并后的数据由于index不一样,行数变多
cat_X_train.index = X_train.index
X_train_final = pd.concat([num_X_train_scale, cat_X_train], axis=1)cat_X_valid.index = X_valid.index
X_valid_final = pd.concat([num_X_valid_scale, cat_X_valid], axis=1)cat_X_test.index = X_test.index
X_test_final = pd.concat([num_X_test_scale, cat_X_test], axis=1)

4. 定义模型训练

  • 定义随机森林回归模型
model1 = rf(n_estimators=100)
model1.fit(X_train_final, y_train)
# cross_val_score(model1,X_train_final,y_train,cv=10,scoring='neg_mean_squared_error')
y_pred_valid = model1.predict(X_valid_final)
mean_absolute_error(y_pred_valid, y_valid)
# 验证集上的误差
0.1364085458333333

5. 预测

  • 对 test 数据集进行预测
y_pred_test = model1.predict(X_test_final)
result = pd.DataFrame()
result['id'] = X_test.index
result['satisfaction_level'] = y_pred_test
result.to_csv('firstsubmit.csv',index=False)

6. 新人赛结果

  • 误差暂时最小,位列第一名
Public分数 版本变化
0.030955617695980337 数字特征无归一化,随机森林n=100
0.03099638771607572 数字特征归一化,随机森林n=100
0.05741940132765499 数字特征无归一化,逻辑斯谛回归
0.05741940132765499 数字特征归一化,逻辑斯谛回归

数字特征归一化对LR模型没有影响???

归一化都无效,可能跟实际情况相关;有效无效,得从训练速度+测试结果来衡量。

  • 比如,存在严重的特征淹没问题,归一化就有效
  • 不存在特征淹没问题,归一化就无效

归一化的价值在于两点:(1)提升训练速度;(2)克服特征淹没问题。

特征淹没,一般存在与线性模型中;树模型,各个特征不同时使用,可能真不存在特征淹没问题

[Kesci] 新人赛 · 员工满意度预测相关推荐

  1. 天池新人赛幸福感数据分析+预测

    天池新人赛幸福感预测赛题链接 https://tianchi.aliyun.com/competition/entrance/231702/introduction 本文将按以下几个步骤描述,数据分析 ...

  2. 数据竞赛指导—和鲸kesci新人赛《员工满意度预测》冠军方案讲解

    数据竞赛作为一个工程师锻炼代码能力与实战经验的平台,吸引越来越多的计算机专业学生和工程师来参加,从国外的kaggle到国内的天池,经过长期的竞赛积累,上面聚集了一大批顶尖的数据科学人才. 竞赛的意义对 ...

  3. 数据挖掘竞赛-员工离职预测训练赛

    员工离职预测 简介 DC的一道回归预测题.是比较基础的分类问题,主要对逻辑回归算法的使用.核心思路为属性构造+逻辑回归. 过程 数据获取 报名参与比赛即可获得数据集的百度网盘地址,这个比赛时间很久,随 ...

  4. 天池新人赛之新浪微博互动预测

    最近参加了天池上的新人赛,把比赛的流程走了一遍,收获挺大.现把比赛思路简单记录一下,欢迎大家一起来讨论交流. 1. 对训练数据进行简单分析 拿到数据集,先对整个数据集做个简要分析,比如数据量大小.每种 ...

  5. 吃鸡排名预测挑战赛 空气质量预测 英雄联盟大师预测 手机行为识别 员工离职预测 猫十二分类体验赛

    1.吃鸡排名预测挑战赛 https://aistudio.baidu.com/aistudio/competition/detail/155/0/introduction 2.空气质量预测https: ...

  6. 机器学习-员工离职预测训练赛

    [数据来源]DC竞赛的员工离职预测训练赛 一共两个csv表格,pfm_train.csv训练(1100行,31个字段),pfm_test.csv测试集(350行,30个字段) [字段说明] Age:员 ...

  7. 天池竞赛员工离职预测训练赛

    组员:欧阳略.陶奇辉.王曙光.吴轩毅 数据来源:天池大数据竞赛员工离职预测训练赛中的数据 大致数据截图如下 根据所给数据,我组利用Pycharm编程源代码截图如下 最终,我组预测准确率为0.89,基本 ...

  8. 天池新人赛-零基础入门金融风控-贷款违约预测-排名174

    赛题以预测用户贷款是否违约为任务,该数据来自某信贷平台的贷款记录,总数据量超过120w,包含47列变量信息,其中15列为匿名变量.从中抽取80万条作为训练集,20万条作为测试集A,20万条作为测试集B ...

  9. 阿里天池新人赛——幸福感挖掘

    本文简要介绍参加阿里天池新人赛--幸福感挖掘的相关思路 整体思路 1.分析问题,提出分析目的 2.数据清洗.数据预处理及数据可视化 3.数据分析 4.建模计算 5.分析结果及竞赛成绩 1.分析问题,提 ...

最新文章

  1. log4j与commons-logging slf4j的关系
  2. 赠票 | 深度强化学习的理论、算法与应用专题探索班
  3. Spring MVC handler interceptors example--转载
  4. [crypto]-50-base64_encode和base64_decode的C语言实现
  5. Linux 实践操作
  6. ES6之const命令
  7. 企业实战_14_MyCat跨分片查询_全局表
  8. java 设置文本颜色_设置文本中的字体的颜色
  9. php中的Register Globals
  10. Snake Ladders bfs
  11. mysql存储过程局部变量使用_MySQL存储过程使用输出变量
  12. 第一:MySQL+MyBatis实现对测试用例数据的读取(接口自动化落地)
  13. TCP文件上传Java_Java 理解TCP通信案例:文件上传案例
  14. MacOS~jenkins里解决docker执行权限问题
  15. Bootstrap可视化布局系统需要引入的静态资源
  16. H3C认证网络工程师
  17. mysql定义取值范围_mysql的decimal类型取值范围
  18. springboot项目中的 Request method 'POST' not supported问题
  19. 微信小程序聊天客服工具
  20. Server Tomcat v8.5 Server at localhost was unable to start within 45 seconds. If the server requir报错

热门文章

  1. 利用Python解决生物问题-获取反向互补序列
  2. iOS NSLog打印使用总结
  3. 中英文说明书丨艾美捷1,2-二硬脂酰-sn-甘油-3-PC(DSPC)
  4. 结合matlab代码案例解释ICA独立成分分析原理
  5. 【详细版】独立成分分析:算法和应用(一)
  6. 浏览器去广告插件Adblock Plus放行网站广告设置
  7. MyBatis Generator的使用和坑
  8. pad和android应用设计规范,移动端APP(iPhone/iPad/Android)UI设计规范
  9. 压缩BCD码转非压缩BCD码
  10. 业务+研发=一体化管理平台?