1. 程式人生 > >唐宇迪機器學習之離職預測

唐宇迪機器學習之離職預測

最近在看唐宇迪機器學習視訊,這個視訊我覺得很不錯,可是我資源有限,有的視訊沒有配套的資料、資料集或者是程式碼,但還是可以看視訊瞭解其中的一些知識點。

專案介紹

該專案是通過員工對公司的滿意程度、公司對員工的評估、員工薪資水平、員工崗位、員工工作時長等特徵來推斷員工是否會離職。

知識點

  1. 通過 df.info( ) 可以看到特徵的資料型別,對於int64、float64這樣的資料型別來說放入機器學習演算法是沒有問題的,但是對於object(可理解為str)這樣的資料型別是需要進一步處理的。
    eg: 在本專案中是利用pd.get_dummies()直接將其轉為one-hot編碼。部分程式碼如下:

    salary_dummy = pd.get_dummies(df['salary'])
    department_dummy = pd.get_dummies(df['depratment'])
    X = pd.concat([X, salary_dummy], axis = 1)
    X = pd.concat([X, department_dummy], axis = 1)
    

    ps: 一般來說如果離散的取值之間沒有大小的意義,就用one-hot,如果離散的取值之間有大小的意義就直接對映。

  2. 修改DataFrame中列的名字:

    df.rename(columns = {'修改前的名字':'修改後的名字'}, inplace = True)
    
  3. 特徵、標籤之間的相關係數:

    df.corr()
    
  4. 柱狀圖表示屬性與標籤之間的關係:
    部分程式碼如下:

    import matplotlib.pyplot as plt
    import seaborn as sns
    % matplotlib inline
    plot = sns.factorplot(x = 'department', y = 'left', kind = 'bar',data = df)
    plot.set_xticklabels(rotation = 45,horizontalalignment = 'right') 
    

    不服輸的南瓜
    ps: sns.factorplot()預設畫的是折線圖,通過新增kind引數可以把折線圖改柱形圖。

  5. 餅狀圖表示某職位工資分佈情況:
    部分程式碼如下:

    df[df['department'] == 'management']['salary'].value_counts().plot(kind = 'pie', title = 'Management Salary level distribution')
    
  6. 柱狀圖表示屬性與標籤之間的關係:
    部分程式碼如下:

    bins = np.linspace(0.0001,1.0001,21)
    plt.hist(df['left'] == 1]['satisfaction_level'],bins = bins,alpha=0.7,label = 'Employees Left')
    plt.hist(df['left'] == 0]['satisfaction_level'],bins = bins,alpha=0.5,label = 'Employees Stayed')
    plt.xlabel('satisfaction_level')
    plt.xlim(0,1.05)
    plt.legend(loc = 'best')
    

    不服輸的南瓜

  7. 將訓練資料劃分為訓練集和測試集:

    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3)
    
  8. 資料標準化:
    資料標準化主要是排除資料大小值對分類器的干擾,這對於資料集中特徵之間取值範圍較大時很有意義。部分程式碼如下:

    from sklearn.preprocessing import StandardScaler
    stdsc = StandardScaler()
    X_train_std =  stdsc.fit_trasform(X_train)
    X_test_std =  stdsc.fit_trasform(X_train)
    

    **PS:**它是針對每一個特徵維度來做的,而不是針對樣本。

  9. 訓練集交叉驗證:

    from sklearn.model_selection import ShuffleSplit
    cv = ShuffleSplit(n_splits = 20,test_size = 0.3)