LR模型实现离职分类

数据集到kagle官网下载:https://www.kaggle.com/

LR优点:

  • 实现简单,广泛的应用于工业问题上;
  • 分类时计算量非常小,速度很快,使用资源低;
  • 方便观测样本概率分数;

LR缺点:

  • 当特征空间很大时,LR的性能不是很好;
  • 容易欠拟合,准确度不太高;
  • 不能很好地处理大量多类特征或变量;
  • 通常只处理二分类问题,多分类需要使用softmax(LR在多分类的推广),且必须线性可分;
  • 对于非线性特征,需要进行转换;

二分类

import pandas as pd
from sklearn.feature_extraction import DictVectorizer
from sklearn.preprocessing import LabelEncoder
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from torch.nn import BCELoss, BCEWithLogitsLoss, CrossEntropyLoss


train=pd.read_csv('train.csv',index_col=0)
test=pd.read_csv('test.csv',index_col=0)

# print(train.head())
# print(train.columns)
# 查看没列的数据类型
print(train.info())

# print(train['Attrition'].value_counts())
# 处理Attrition字段
train['Attrition']=train['Attrition'].map(lambda x:1 if x=='Yes' else 0)

# 查看数据是否有空值
# print(train.isna().sum())

# 去掉没用的列 员工号码,标准工时(=80)
train = train.drop(['EmployeeNumber', 'StandardHours'], axis=1)
test = test.drop(['EmployeeNumber', 'StandardHours'], axis=1)

# 对于分类(非数据类型)特征进行特征值编码
attr=['Age','BusinessTravel','Department','Education','EducationField','Gender','JobRole','MaritalStatus','Over18','OverTime']
lbe_list=[]
# 在这个数据集中,测试集出现的标签,在训练集都出现过,
# 一般还可以将训练集和测试集统一起来,一起进行 fit_transform
for feature in attr:
    # 标签编码:如果有10个类别,会编码成0-9
    lbe=LabelEncoder()
    # fit_transform:先 fit(指定对应关系) 再 transform(应用这种对应关系)
    train[feature]=lbe.fit_transform(train[feature])
    # 测试集不需要fit,因为上面已经生成了规则,直接应用就可以,如果重新生成就会和训练集有可能对应规则不同
    test[feature]=lbe.transform(test[feature])
    lbe_list.append(lbe)
#print(train)
train.to_csv('train_label_encoder.csv')

# 拆分训练集和验证集
X_train, X_valid, y_train, y_valid = train_test_split(train.drop('Attrition',axis=1), train['Attrition'], test_size=0.2, random_state=2021)

# 分类模型,二分类
model = LogisticRegression(max_iter=100,
                           verbose=True,
                           random_state=2021,
                           tol=1e-4
                          )
# 训练
model.fit(X_train, y_train)
# 使用验证集提前了解模型的效果
# valid_predict = model.predict(X_valid)
# loss_fn = BCELoss()
# loss = loss_fn(valid_predict, y_valid)

# 预测 predict:用来预测样本,也就是分类,predict_proba:输出分类概率。返回每种类别的概率,按照分类类别顺序给出
# predict = model.predict(test)
predict = model.predict_proba(test)[:, 1]
test['Attrition']=predict

print(test['Attrition'])
test[['Attrition']].to_csv('submit_lr.csv')
print('submit_lr.csv saved')
# 转化为二分类输出
#test['Attrition']=test['Attrition'].map(lambda x:1 if x>=0.5 else 0)
#test[['Attrition']].to_csv('submit_lr.csv')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值