Kaggle[3] - Job Salary Prediction (Adzuna)

比赛链接在这里:http://www.kaggle.com/c/job-salary-prediction

比赛的内容是根据历史的招聘数据,然后预测每个测试集中每行数据对应的薪水。衡量模型好坏的标准是MAE。

特征及前几条样本数据如下:

Kaggle[3] - Job Salary Prediction (Adzuna)_第1张图片

FullDescription是一段文字,描述职位的。后续会用到,n-gram,tfidf建立特征。

先看看处理特征的方法。这一块主要是在Title、和FullDescription上。

具体步骤的话可以先分词,然后统计每个词(或者词组,n-gram, n取2)的出现频率,把频率低的词(组)去掉,然后将得到的词表作为特征向量(或者用tfidf替代)加入到每个样本中去(特征维数很大,但是稀疏)。

经过这些特征的建立后,就可以开始建模了。

本身比赛是要我们预测一个工作提供的薪水,而薪水的预测可以看成一个回归问题,其实也可以看成一个分类问题(自己设定一些区间)。

比赛中,用到的模型有

1. Linear Regression (Lasso and Ridge) 

2. Logistic Regression

3. Knn

4. Random Forest

6. SVR

5. Neural Network

下面细说下,每个模型的情况。

1. 效果不太好

2. Logistic Regression 这里有2种用途。第一是先把原来的数据分成高薪和底薪2个类,然后分别建立回归模型,最后预测的时候先判断高薪还是底薪,接着预测具体的薪水。第二是把原来的薪水分成k个区间(第三名取了30个),然后跑一个softmax。

3 - 5. knn没啥好说的,这里用1NN。 RandomForest提供的是benchmark。 SVR也是用来做回归,但是由于特征维度很大,只能用线性核(LIBLINEAR),导致结果也一般。

6. Neural Network是在这个比赛最成功的(前两名都用的是NN)。

第一名训练了几个神经网络然后融合起来(可以看成每个网络会学到一些有用特征,然后融合起来),具体网络构造包含2-3层隐层,第一隐含层包含4000个隐神经元,后面2层1000个。(特征中只有1-gram,即只有bag of words, 没有2-gram)

第二名训练1个神经网络,输入的维度是100万,2层隐含层都是30个隐神经元,特征用到了2-gram。由于输入很稀疏,训练的时候,稍微改进了下BP。


最后说下一般的做法,大部分人还是尝试融合模型(融合LR,SVR,KNN等)。这一步也的确可以帮助他们提高最终的结果。

这个比赛其实并不是太复杂,关键还得尝试各种模型和算法。(好像没有看到人用GBM或者GBDT)

不过从神经网络的成功应用来看,这个题目中主要还是要靠非线性model啊。不知道用deep NN会不会有更优的效果呢

你可能感兴趣的:(Kaggle)