前面有用爬虫抓取了一些简历数据,现在项目里有一个地方是要预测个人的薪资。这个需求用python来实现的话肯定会轻松很多,毕竟python有大量的计算库,php主要是web方面的。
确定了选用什么语言来写后,它们之间的对接用最省心的http协议来对接
算法原理很简单,就是用的多元线性回归来预测。
训练字段用的有:工作年限,行业,学历 目标字段:薪资
代码量还是很少的,毕竟靠的是后续调参和数据量撑起来的,但是效果还是挺不错的,预测的数据挺符合现实
不废话了,下面看代码和注释,还是很简单的:
首先是训练模型的代码:
import pandas as pd
import pickle
from sklearn.preprocessing import LabelEncoder as LE
from sklearn.linear_model import LinearRegression as LR
# 读取数据
train = pd.read_csv('./salary.csv')
# 数据预处理
# 去除空值
train.dropna(axis=0,how='any',inplace=True)
# 月薪分类处理为连续
def wage_cate(wage):
if wage <= 61:
return wage - 55
elif 61 < wage:
return wage - 425
train['Wage'] = train['Wage'].apply(wage_cate)
# 月薪分类还原
def wage_cate_re(cate):
if cate <= 6:
return cate + 55
elif cate > 6:
return cate + 425
# 多元线性回归模型
le = LE()
# 特征选择
X = train[['Years','Trade','Maxeducation']]
# 结果集
y = train['Wage']
# 模型学习
model = LR()
sa = model.fit(X,y)
# 保存模型
file = open('./model.pickle', 'wb')
# 把模型写入到文件中
pickle.dump(model, file)
# 关闭文件
file.close()
接着是预测代码,顺便加了flask用来做为web服务器和php代码对接:
from flask import Flask
from flask import request
import math
import pickle
# 以读二进制的方式打开文件
file = open("./model.pickle", "rb")
# 把模型从文件中读取出来
model = pickle.load(file)
# 关闭文件
file.close()
app = Flask(__name__)
@app.route('///',methods=['GET','POST'])
def home(years,trade,education):
pred = wage_cate_re(round(float(wage_pred(int(years),int(trade),int(education)))))
return str(pred)
# 月薪分类还原
def wage_cate_re(cate):
if cate <= 6:
return cate + 55
elif cate > 6:
return cate + 425
# 构建预测函数
def wage_pred(Years,trade,education):
pred = model.predict([[Years,trade,education]])
return pred
if __name__ == '__main__':
app.run()
代码提示:
月薪分类这个函数的存在是因为数据库里面这个分类不是连续的,训练数据的时候要把它处理成连续值。
代码总体很简单:其他端请求格式:http://127.0.0.1:5000/years/trade/education,
这三个参数实际使用要换成相应数字