招聘数据真假分类

此次机器学习课程大作业-招聘数据真假分类,是一个二分类问题。训练集中共有14304个样本,每个样本有18个特征,目标是判断不含有标签的招聘信息的真假性。
利用Pandas读取训练集和测试集后,进行数据预处理,检查并修正数据中的错误值,补充缺失值,通过使用sklearn中的TfidfVectorizer构建词汇表(特征词表)时考虑了词语文档频次,可以通过设置min_df和max_df来实现通过文档频次进行特征选择。之后,对离散型特征进行特征工程处理,对连续型特征进行特征缩放(归一化)。建立多种机器学习模型(如:逻辑回归、支持向量机、集成学习、朴素贝叶斯),和基于pytorch的深度学习模型。最后,完成测试集的预测,并生成各个模型对应的结果文件。

关键词:真假分类 机器学习 模型对比 深度学习。

一、问题介绍

招聘信息的真假性进行判断,实质上为一个二分类问题,即招聘为真,招聘为假。数据集大小为14304,数据共计14个特征,目标是预测该样本是否为虚假招聘信息(是虚假信息则为1,反之为0)。
选择合适的机器学习算法,用以预测测试集中的真假,最后根据recall_score(召回率),f1_score来评价模型的准确性。

二、算法概述

在实验中,我运用了以下4类机器学习算法(logistic回归,svc支持向量集,朴素贝叶斯,XBGoost)和深度学习算法,对比测试各类算法在测试集中的分类效果,最后找出可以找出最适合本问题的算法。

2.1 Logistic Regression

logistic回归是一种广义线性回归(generalized linear model),因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同,都具有 w‘x+b,其中w和b是待求参数,其区别在于他们的因变量不同,多重线性回归直接将w‘x+b作为因变量,即y =w‘x+b,而logistic回归则通过函数L将w‘x+b对应一个隐状态p,p =L(w‘x+b),然后根据p与1-p的大小决定因变量的值。如果L是logistic函数,就是logistic回归,如果L是多项式函数就是多项式回归。
logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释,多类可以使用softmax方法进行处理。实际中最为常用的就是二分类的logistic回归。
● 优点:计算代价不高,易于理解和实现。
● 缺点:容易欠拟合,分类精度可能不高。
● 适用类型:数值型、标称型。

2.2 SVC

支持向量机SVM理论中,有DPS系统提供支持向量机分类功能,其中包含C-SVC和V-SVC。
工作原理:根据输入的数据不同可做不同的模型。通过寻求结构化风险最小来提高学习机泛化能力,实现经验风险和置信范围的最小化,从而达到在统计样本量较少的情况下,亦能获得良好统计规律的目的。
优点: 
    (1)使用核函数可以向高维空间进行映射
    (2)使用核函数可以解决非线性的分类
    (3)分类思想很简单,就是将样本与决策面的间隔最大化
    (4)分类效果较好。
缺点: 
(1)SVM算法对大规模训练样本难以实施
    (2)用SVM解决多分类问题存在困难
(3) 对缺失数据敏感,对参数和核函数的选择敏感。
适用范围:数值型、标称型。

2.3 朴素贝叶斯

朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法。

在机器学习的分类问题的应用中,朴素贝叶斯分类器的训练过程就是基于训练集 D 来估计类先验概率 P© ,并为每个属性估计条件概率 P(xi | c) 。这里就需要使用极大似然估计 (maximum likelihood estimation, 简称 MLE) 来估计相应的概率。
● 优点:朴素贝叶斯算法假设了数据集属性之间是相互独立的,因此算法的逻辑性十分简单,并且算法较为稳定,当数据呈现不同的特点时,朴素贝叶斯的分类性能不会有太大的差异。
● 缺点:数据集属性的独立性在很多情况下是很难满足的,因为数据集的属性之间往往都存在着相互关联,如果在分类过程中出现这种问题,会导致分类的效果大大降低。

2.4 集成学习(XGBoost)

XGBoost 是对梯度提升算法的改进,求解损失函数极值时使用了牛顿法,将损失函数泰勒展开到二阶,另外损失函数中加入了正则化项。训练时的目标函数由两部分构成,第一部分为梯度提升算法损失,第二部分为正则化项。损失函数定义为

其中n为训练函数样本数,l是对单个样本的损失,假设它为凸函数, 为模型对训练样本的预测值, 为训练样本的真实标签值。正则化项定义了模型的复杂程度:

其中, 和 为人工设置的参数,w为决策树所有叶子节点值形成的向量,T为叶子节点数。

2.5 pytorch深度学习框架

利用pytorch快速搭建神经网络。即利用torch.nn以及torch.optim库来快捷搭建一个简单的神经网络来实现二分类功能。
使用方法:利用pytorch已经包装好的库(torch.nn)来快速搭建神经网络结构。
利用已经包装好的包含各种优化算法的库(torch.optim)来优化神经网络中的参数,如权值参数w和阈值参数b。

2.6深度学习和传统机器学习区别及优势

1、传统的需要人工去提取特征、但是深度学习不需要进行特征提取。
2、传统的机器学习表达能力有限,深度学习表达能力强。
3、深度学习适合处理大数据,而数据量比较小的时候,用传统机器学习方法也许更合适。
4、时间维度上传统的机器学习一般训练时间短,深度学习时间长,但是深度学习一旦将模型训练好,预测就快了。

三、实验过程和结果分析

3.1 数据集分析



3.1.1 不确定数据分析

经过对数据的初步筛选可以看出在title、location、 department、salary_range、company_profile、description、requirements、benefits、Telecommuting、has_company_logo、has_questions、employment_type、required_experience、required_education、industry、function这15属性中,
均存在不确定的数据。

3.1.2 特征分析

以下为各特征对应的数据类型值,连续数据标记为continuous,离散特征和文本特征将其所有分类列出。
title:Midlands Level 2 and 3 DGV NVQ Assessors,Customer Success Manager…
location:GB, BIR, Midlands, US, CA, Gardena…
department:Engineering, Creative, Services, Sales, Marketing…
salary_range:continuous
company_profile: Established on the principles that full time education is not for everyone, Adventure Cow (that’s us!) builds interactive books – stories…
description:As a NVQ Assessor you will be supporting learners who are undertaking a NVQ, We are activity searching for a Senior Financial Analyst to support the organization…
requirements:Remuneration:Competitive, dependant on candidate experience with a generous bonus element, If interested, send work samples!..

benefits:The potential to change the way of learning for millions of users, Remuneration:Competitive, dependant on candidate experience with a generous bonus element
telecommuting:yes , no;
has_company_logo:yes , no
has_questions:yes , no;
employment_type:Temporary, Full-time, Other, Part-time;
required_experience:Mid-Senior level, Entry level, Associate, Not Applicable
required_education:Bachelor’s Degree, Some College Coursework Completed, High School or equivalent, Unspecified…
industry:Logistics and Supply Chain, Financial Services, Computer Software, Information Technology and Services…
function:Engineering, Customer Service, Information Technology, Marketing…

连续特征为:salary_range,job_id.
离散特征为:title、location、 department、salary_range、company_profile、description、requirements、benefits、Telecommuting、has_company_logo、has_questions、employment_type、required_experience、required_education、industry、function
可以得出连续特征共2个,离散特征和文本特征共16个

3.2 导入数据

利用pandas库自带的read_csv函数导入训练集和测试集。

3.3 数据预处理

  1. 判断数据中是否有空值,如果有,利用fillna函数将空值对应特征数据的众数来代替。判断数据中是否有?缺失值,如果有,先将所有?转换为空值,然后利用fillna函数将空值对应特征数据的众数来代替。
  2. 然后使用TfidfVectorizer将数据中的文本信息进行向量化表示。
  3. 将标签值’真’,’假’,转换为对应的0,1变量。
  4. 将原数据修改后得到新的Dataframe

3.4 数据分析

由于最后使用的是深度学习框架,因此没有对拆分特征元素。直接按照613个特征进行权重赋值,然后进行神经网络训练,通过loss.backward()反馈,进行反向惩罚,从而达到一个较好的效果。可以查看初始未处理数据的0,1分布

3.5 特征工程

利用sklearn.feature_extraction.text中的TfidfVectorizer,将离散文本特征进行进行特征词赋予权值,该权值会减少常见词,提高不常见词。将15种文本特征和离散特征通过变成807向量维度特征。
通过波士顿房价预测的借鉴使用
for i in range(613):
plt.subplot(13,2,i+1)
plt.scatter(x_data[:,i],y_data,s=10)
plt.show()
print(np.corrcoef(x_data[:i]),y_data)
调用numpy中的corrcoef()函数得到每个特征和真假性的相关系数矩阵,最后筛选出613个相关性高的特征。
注:由于特征过多只筛选了部分可视化图片

3.6 特征缩放

1.由于提供的数据只有14307,同时是一个非均匀分类问题,正样本比负样本少很多,因此采用过采样,欠采样,StratifiedKFold的方式进行采样,从而增加‘fraudulent’ = 1的样本数。
2.利用sklearn.preprocessing中的MinMaxScaler类将处理好的数据特征进行归一化处理,减小某些特征向量值过大的影响,从而导致产生过拟合的影响。

3.7 模型生成

通过sklearn库导入上述提到的5类机器学习模型和一类深度学习模型

from xgboost import XGBClassifier#XGBoost
from sklearn.model_selection import GridSearchCV#网格搜索调参器
from sklearn import linear_model #logistics回归
from sklearn.naive_bayes import GaussianNB          #朴素贝叶斯
from sklearn.svm import SVC                         #SVM
import torch#导入pytroch
import torch.nn as nn #神经网络模块
import torch.nn.functional as F #模型

神经网络

class Net(nn.Module):
#初始化def __init__(self):super(Net,self).__init__()self.fc1 = nn.Linear(613,10)self.fc2 = nn.Linear(10,2)
#前向传播def forward(self,x):if not isinstance(x, torch.FloatTensor):x = torch.FloatTensor(x)x = self.fc1(x)x = F.relu(x)x = self.fc2(x)return x
#接受输入并预测类(0或1)def predict(self,x):pred = F.softmax(self.forward(x))ans = []for t in pred:if t[0]>t[1]:ans.append(0)else:ans.append(1)return torch.tensor(ans)

该网络包含一个输入层,一个中间层,一个输出层,中间层包含 10 个神经元,使用的激活函数是 relu。当然,中间层的神经元越多,分类效果一般越好,但这个 10 层的网络对于我们的样本数据已经足够。

3.8 结果分析

3.8.1 模型准确度分析

通过自己将训练集按照8:2(9:1)的比例重新划分训练集和分层验证集之后,测试了各模型的recall_score和f1_score

3.8.2 交叉验证调整合适的超参

由于运行时间关系,此处只选择XGBoost的代码进行分析。
model = XGBClassifier()
learning_rate = [0.0001, 0.001, 0.01, 0.1, 0.2, 0.3]
param_grid = dict(learning_rate=learning_rate)
kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=7)
grid_search = GridSearchCV(model, param_grid, scoring=“neg_log_loss”, n_jobs=-1, cv=kfold)
grid_result = grid_search.fit(new_x_train, y_train)

使用StratifiedKFold模块对数据集进行拆分9:1,然后使用gridSearchCV(网格搜索)自动对学习率参数进行调节,然后将较好的模型进行输出。


由结果可以看出,当lr=0.2的时候效果最好,对应的准确度最高,此时就能确定一个较为合适的超参,其他超参的确定同样可以采用交叉验证的方式。

3.8.3 测试集预测结果分析

因为结果中是只含0 / 1的数据,现在利用np.sum对结果求和,统计1个个数(即招聘信息为假的结果)

由训练集可知招聘信息为假的723个,总训练集个数14235人,占比5.07%。如果训练集和测试集是出于同分布的数据,那么测试集数据中招聘信息为假的占比越接近5.07%,则说明预测的效果就可能更好。
则初步估计效果排名如下:

  1. Pytorch optim.Adam ,Pytorch optim.SGD
  2. Graidentboost Classifier
  3. GaussianNB Classifier
  4. xgboost Classifier
  5. SVM Classifier
  6. Logistic Regression
  7. GaussianNB Classifier
    注:估计基于数据的实际分布情况,具体效果还需要根据实际的测量值为准
    深度学习visdom图

基于深度学习的简单二分类(招聘信息的真假)相关推荐

  1. ECG分析:基于深度学习的ECG心律失常分类入门(3)

    ECG分析:基于深度学习的ECG心律失常分类入门(3) 数据库的Python读取 本次读取数据,用的是一款专门读取MITAB数据的工具--WFDB-python,WFDB包下载 ,全称是 Python ...

  2. ECG分析:基于深度学习的ECG心律失常分类入门(1)

    ECG分析:基于深度学习的ECG心律失常分类入门(1) 写作动机 由于受突发疫情的影响,开学时间推迟了(在此特向奋斗在前线的各行各业的工作者们致以崇高的敬意!).前天晚上刚好看到一篇新出的论文,跟自己 ...

  3. ECG分析:基于深度学习的ECG心律失常分类入门(5)

    ECG分析:基于深度学习的ECG心律失常分类入门(5) 数据和模型完成了之后,就是训练和测试了,这里顺带提一下,MITAB的数据是48条记录的,而我们在做ECG分析的时候,都是去掉了四条记录(102, ...

  4. ECG分析:基于深度学习的ECG心律失常分类入门(2)

    ECG分析:基于深度学习的ECG心律失常分类入门(2) 数据来源:MIT-BIH Arrhythmia Database 数据库介绍和获取 前面已经对ECG信号有了简单的认识,那么现在来简单看看我们的 ...

  5. Data Augmentation for Deep Learning-based Radio ModulationClassification解读(基于深度学习的无线电调制分类数据扩充)

    摘要:深度学习最近被应用于自动分类接收无线电信号的调制类别,而无需人工经验.然而,训练深度学习模型需要大量的数据.训练数据不足会导致严重的过度拟合问题,降低分类精度.为了处理小数据集,数据增强被广泛应 ...

  6. ECG分析:基于深度学习的ECG心律失常分类入门(4)

    ECG分析:基于深度学习的ECG心律失常分类入门(4) 在搭建模型之前,讲一下本次任务需要区分的类别,MITAB根据心拍类型划分了14个小类: 也可以用wfdb查看: wfdb.show_ann_la ...

  7. 基于深度学习的推荐(二):基于FM初始化的FNN

    公众号 关注公众号:推荐算法工程师,输入"进群",加入交流群,和小伙伴们一起讨论机器学习,深度学习,推荐算法. 前言 论文地址:https://arxiv.org/pdf/1601 ...

  8. 深度学习2.1二分类(Binary Classification)

    二分类-深度学习2.1-吴恩达老师课程 介绍 案例 符号定义 仅作为个人学习记录 介绍 当实现一个神经网络的时候,我们需要知道一些非常重要的技术和技巧.例如有一个包含mmm个样本的训练集,你很可能习惯 ...

  9. 深度学习1:二分类问题

    IMDB数据 包含来自互联网电影数据库的50000条两极分化的评论,数据集被分为用于训练的25000条评论与用于测试的25000条评论,训练集和测试集都包含百分之五十的正面评论和百分之五十负面评论. ...

最新文章

  1. 在做mvc时遇到的一些问题
  2. Spring 钩子之BeanFactoryPostProcessor和BeanPostProcessor
  3. .NET Core 3.1通用主机原理及使用
  4. BGP 路由属性 公认可选 LOCAL_PREF
  5. java包名命名规则_告别编码5分钟,命名2小时!史上最全的Java命名规范参考!
  6. Win10系统winload.efi丢失或损坏怎么办?修复步骤(以联想笔记本为例)
  7. 科学计算机使用方法,[转载]科学计算器的使用方法
  8. html5 苹果 风格,[网页设计]8个超炫酷仿苹果应用的HTML5动画
  9. 散文:dflow 是如何实现slice的
  10. mysqly优化 入门 第一篇
  11. 微信聊天记录删了怎么恢复找回来2022 微信聊天记录删了怎么恢复找回来步骤
  12. 10种网站推广的常用方法
  13. 我和欧阳娜娜一起搞研发
  14. 微信小程序基于百度云实现图文识别(胎教级教程)
  15. 辅修计算机编程,求帮忙~计算机C语言的编程题!大学选的辅修课没去过,要考试了不会? 爱问知识人...
  16. 类脑智能:人造超级大脑
  17. 浅谈 web 端测试点
  18. 手机adb调试出现Not running as root. Try“adb root“ first.
  19. MacBook好用的电脑垃圾清理管家工具CleanMyMac X
  20. 用python发微博

热门文章

  1. Tomcat管理页面弱口令页面Getshell
  2. java的按钮点击事件_java处理按钮点击事件的方法
  3. 《大话机器学习算法》贝叶斯—用贝叶斯计算吃火锅的概率
  4. Python基础_05:元祖
  5. linux安装php7
  6. unity代码 获取dropdown_Unity--互动组件(DropDown )
  7. 统一资源定位符URL的简单了解
  8. 如果电脑不小心按了关机,但突然又不想关机了,应该怎样立刻取消?
  9. Bash脚本的空格和“期待一元表达式”错误
  10. 紫羚云秦鸿林:如何更有效实施ITSM谈谈紫羚云成功实施的“法宝”