机器学习与建模、划分数据集

学习:通过接收到的数据,归纳提取相同和不同。

机器学习:让计算机以数据为基础,进行归纳与总结。

模型:数据解释现象的系统。

训练集:用来训练与拟合模型

验证集:当通过训练集训练出多个模型后,使用验证集数据纠偏或比较预测

测试集:模型泛化能力的考量

泛化:对未知数据的预测能力

一般情况下:训练集:测试集:验证集=6:2:2,或者,训练集:测试集=8:2

K-fold交叉验证:将数据集分成K份,每份轮流作一遍测试集,其他作训练集

数据分割:

import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler,StandardScaler
from sklearn.preprocessing import LabelEncoder,OneHotEncoder
from sklearn.preprocessing import Normalizer
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.decomposition import PCA
def hr_preprocessing(sl=False,le=False,npr=False,amh=False,tsc=False,wa=False,pl5=False,dp=False,slr=False,lower_d=False,ld_n=1):
    df=pd.read_csv("HR.csv")  #读入数据
    #1.清洗数据
    df=df.dropna(subset=["satisfaction_level","last_evaluation"])
    df=df[df["satisfaction_level"]<=1][df["salary"]!="nme"]
    #2.得到标注
    label=df["left"]
    df=df.drop("left",axis=1)  #axis=1以列删除
    #3.特征选择
    #4.特征处理
    scaler_lst=[sl,le,npr,amh,tsc,wa,pl5]
    column_lst=["satisfaction_level","last_evaluation","number_project",\
               "average_monthly_hours","time_spend_company","Work_accident",\
                           "promotion_last_5years"]
    for i in range(len(scaler_lst)):
        if not scaler_lst[i]:
            df[column_lst[i]]=\
             MinMaxScaler().fit_transform(df[column_lst[i]].values.reshape(-1,1)).reshape(1,-1)[0]
            #reshape(-1,1)列,reshape(1,-1)[0]二维向量取第零个
        else:
            df[column_lst[i]]=\
             StandardScaler().fit_transform(df[column_lst[i]].values.reshape(-1,1)).reshape(1,-1)[0]
    scaler_lst=[slr,dp]
    column_lst=["salary","department"]
    for i in range(len(scaler_lst)):
        if not scaler_lst[i]:
            if column_lst[i]=="salary":
                df[column_lst[i]]=[map_salary(s) for s in df["salary"].values]
            else:
                df[column_lst[i]]=LabelEncoder().fit_transform(df[column_lst[i]])
            df[column_lst[i]]=MinMaxScaler().fit_transform(df[column_lst[i]].values.reshape(-1,1)).reshape(1,-1)[0]#再归一化或标准化也可不进行
        else:
            df=pd.get_dummies(df,columns=[column_lst[i]])  #pandas提供的独热
    if lower_d:
        #return LinearDiscriminantAnalysis(n_components=ld_n)
        #LDA这里的n_components不能大于标注的类的个数,有限值,改用无限制的PCA方法
        return PCA(n_components=ld_n).fit_transform(df.values),label
    
    return df,label
#由于LabelEncoder会默认按英文字母排序,为了让low为0,medium为1,high为2,需自定义
d=dict([("low",0),("medium",1),("high",2)])
def map_salary(s):
    return d.get(s,0)  #如果没有找到就返回0,默认是低收入人群 
def hr_modeling(features,label):
    #切分训练集和验证集(测试集)
    from sklearn.model_selection import train_test_split
    f_v=features.values  #原先的数据是DataFrame,装换为数值
    l_v=label.values
    x_tt,x_validation,y_tt,y_validation=train_test_split(f_v,l_v,test_size=0.2)
    #将训练集再切分为训练集和测试集
    x_train,x_test,y_train,y_test=train_test_split(x_tt,y_tt,test_size=0.25)
    print(len(x_train),len(x_validation),len(x_test))
def main():
    features,label=hr_preprocessing()
    hr_modeling(features,label)
if __name__=="__main__":
    main()

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值