預測分析 · 員工滿意度預測
預測分析 · 員工滿意度預測
Michael阿明 2020-05-28 20:41:56 944 收藏 2 原力計劃
分類專欄: 機器學習
版權宣告:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連結和本宣告。
本文連結:https://blog.csdn.net/qq_21201267/article/details/106274328
收起
文章目錄
1. 匯入工具包
2. 讀取資料
3. 特徵處理
3.1 數字特徵歸一化
3.2 文字特徵處理
3.3 特徵合併
4. 定義模型訓練
5. 預測
6. 新人賽結果
競賽地址
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.columns
num_X_valid_scale = pd.DataFrame(num_X_valid_data)
num_X_valid_scale.columns = num_X_valid.columns
num_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 if
set(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 if
set(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)克服特徵淹沒問題。
特徵淹沒,一般存在與線性模型中;樹模型,各個特徵不同時使用,可能真不存在特徵淹沒問題
————————————————
版權宣告:本文為CSDN博主「Michael阿明」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/qq_21201267/article/details/106274328
:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69971700/viewspace-2695178/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 灰色預測分析
- 【Matlab 041期】【數學建模】Matlab 電力預測預測之灰度預測組合預測指數平滑回歸分析Matlab
- 人工智慧的惡意使用:預測、預防和緩解人工智慧
- 工服智慧監測預警系統
- 人工智慧惡意使用報告:預測、預防和緩解人工智慧
- torch神經網路溫度預測神經網路
- 預測性客戶分析之藉助聚類和預測分析優化售後服務(Part 4)聚類優化
- 機器學習股票價格預測從爬蟲到預測-預測與調參機器學習爬蟲
- Harness:2020年開發人員滿意度調查
- 人口預測模型模型
- 華為預測服務新版本上線!自定義預測輕鬆滿足您的個性化需求
- 2022年最佳預測分析工具和軟體
- BI預測分析,是否需要那麼精準?
- 疾病預測和天氣分析練習賽
- 資料探勘與預測分析(第2版)
- 加油站員工行為監測預警系統
- Medialink:2024年營銷人員的預測報告
- 資料預測“加成”,解鎖“預測未來”新玩法!
- Meta:2021年廣告創意趨勢預測報告
- 基於語義意圖的車輛行為預測
- 人員摔倒識別預警系統 人員跌倒檢測系統
- 歐盟委員會:2022年冬季歐洲經濟預測
- 歐盟委員會:2021年夏季歐洲經濟預測
- Ogilvy:2030年預測
- 預測性分析的價值、方法和趨勢
- 機器學習之迴歸分析--預測值機器學習
- PQ Media:2023-2027全球意見領袖營銷預測
- 足球預測app分析軟體哪個準確?最準的足球大小球預測軟體神器APP
- 網路流量預測入門(三)之LSTM預測網路流量
- Mxnet速查_CPU和GPU的mnist預測訓練_模型匯出_模型匯入再預測_匯出onnx並預測GPU模型
- Keras速查_CPU和GPU的mnist預測訓練_模型匯出_模型匯入再預測_匯出onnx並預測KerasGPU模型
- sigma有限的預測度的擴張是唯一的
- 歐盟委員會:2020年歐洲經濟預測(春季版)
- HEVC幀內預測學習(二) 35種預測模式的計算模式
- 專案2:運營商客戶流失分析與預測
- 物聯網中的預測分析:當IoTDA遇上ModelArts
- 未來資料分析的五個趨勢預測!
- 大模型+電力預測?大模型