怎么套网站,网站代码上传后无法打开,漂亮的企业网站源码,电商网站与企业网站区别文章目录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.rcPar…
文章目录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,OrdinalEncoder2. 读取数据 # 读取数据
tr_data pd.read_csv(train.csv,index_colid)
X_test pd.read_csv(test.csv,index_colid) # test不含标签tr_data.head(10)
tr_data.corr() # 相关系数
sns.regplot(xtr_data.index, ytr_data[satisfaction_level])可以看出 上一次的评分、有没有工伤、过去5年有没有晋升 跟 满意度 呈正相关系数 可以看出 id 跟满意度没有特别强的关系可以不作为特征
3. 特征处理
# X丢弃标签
X tr_data.drop([satisfaction_level], axis1)
y tr_data[satisfaction_level]# 切分数据
X_train, X_valid, y_train, y_valid train_test_split(X, y,test_size0.2,random_state1)# 特征列名
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, axis1)
num_X_valid X_valid.drop(object_cols, axis1)
num_X_test X_test.drop(object_cols, axis1)# 定义归一化转换器
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.index3.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], axis1)cat_X_valid.index X_valid.index
X_valid_final pd.concat([num_X_valid_scale, cat_X_valid], axis1)cat_X_test.index X_test.index
X_test_final pd.concat([num_X_test_scale, cat_X_test], axis1)4. 定义模型训练
定义随机森林回归模型
model1 rf(n_estimators100)
model1.fit(X_train_final, y_train)
# cross_val_score(model1,X_train_final,y_train,cv10,scoringneg_mean_squared_error)
y_pred_valid model1.predict(X_valid_final)
mean_absolute_error(y_pred_valid, y_valid)# 验证集上的误差
0.13640854583333335. 预测
对 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,indexFalse)6. 新人赛结果
误差暂时最小位列第一名
Public分数版本变化0.030955617695980337数字特征无归一化随机森林n1000.03099638771607572数字特征归一化随机森林n1000.05741940132765499数字特征无归一化逻辑斯谛回归0.05741940132765499数字特征归一化逻辑斯谛回归
数字特征归一化对LR模型没有影响
归一化都无效可能跟实际情况相关有效无效得从训练速度测试结果来衡量。
比如存在严重的特征淹没问题归一化就有效不存在特征淹没问题归一化就无效
归一化的价值在于两点1提升训练速度2克服特征淹没问题。
特征淹没一般存在与线性模型中树模型各个特征不同时使用可能真不存在特征淹没问题