工业蒸汽量预测-模型训练

本文改编自《阿里云天池大赛赛题解析-机器学习篇》的第一部分工业蒸汽量预测的第四章-模型训练的内容。根据原有内容进行了部分素材的替换和知识点的归纳总结。sklearn模型训练步骤的总结,以及对线性回归、K近邻回归、树回归、随机森林和LightGBM回归的使用介绍

4 模型训练

4.1回归及相关模型

4.1.1 回归的概念

         回归是一种来自统计的技术,用于在目标数量连续时预测所需目标数量的值。通过房屋面积来预测房屋的价格就是一个典型的回归问题,如下图所示。
在这里插入图片描述

4.1.2 回归模型训练和预测

        回归模型训练和预测的步骤:

(1)导入需要的工具库。

(2)对数据预处理,包括导入数据集处理数据特征工程等操作,具体为缺失值处理连续型特征归一化类别型特征转化等。

(3)训练模型。选择合适的机器学习模型,利用训练集对模型进行训练,达到最佳拟合效果。

(4)预测结果。将待预测的数据集输入到训练好的模型中,得到预测结果。

4.1.3 线性回归模型

        假定因变量Y与自变量X呈线性相关,则可以采用线性模型找出自变量X和因变量Y的关系,以便预测新的自变量X的值,这就是线性回归模型。

1.一元线性回归模型

        一元线性回归模型使用单一特征来预测目标变量,拟合的最佳曲线通过最小化预测值和真实值之间的误差得到。

2.多元线性回归模型

        多元线性回归模型是利用多个自变量估计因变量,从而解释预测因变量的值。多元线性回归模型的一般形式:
y = β 0 + β 1 x 1 + β 2 x 2 + . . . + β p x p + ϵ y=\beta_0 + \beta_1x_1+\beta_2x_2+...+\beta_px_p+\epsilon y=β0+β1x1+β2x2+...+βpxp+ϵ
写成矩阵形式为 y = x β + ϵ y=x\beta+\epsilon y=xβ+ϵ,其中,

y = ( y 1 y 1 y 2 . . . y n ) y=\begin{pmatrix}y_1\\ y_1\\y_2\\...\\y_n\\\end{pmatrix} y=y1y1y2...yn x = ( 1 x 11 x 12 . . . x 1 p 1 x 21 x 22 . . . x 2 p . . . . . . . . . . . . . . . 1 x n 1 x n 2 . . . x n p ) n ∗ ( p + 1 ) {x=\begin{pmatrix}1&x_{11}&x_{12}&...&x_{1p}\\1&x_{21}&x_{22}&...&x_{2p}\\...&...&...&...&...\\1&x_{n1}&x_{n2}&...&x_{np}\\\end{pmatrix}}_{n*(p+1)} x=11...1x11x21...xn1x12x22...xn2............x1px2p...xnpn(p+1) β = ( β 0 β 1 . . . β p ) \beta=\begin{pmatrix}\beta_0\\\beta_1\\...\\\beta_p\\\end{pmatrix} β=β0β1...βp ϵ = ( ϵ 0 ϵ 1 . . . ϵ p ) \epsilon=\begin{pmatrix}\epsilon_0\\\epsilon_1\\...\\\epsilon_p\\\end{pmatrix} ϵ=ϵ0ϵ1...ϵp

        例如,房价可能跟城镇人口犯罪率、一氧化氮浓度(每1000万份)、辐射状公路的可达性指数、城镇师生比例等等因素都有关系,因此可以建立如下模型:
s a l e s = β 0 + β 1 ∗ C R I M + β 2 ∗ N O X + β 3 ∗ R A D + β 4 ∗ R T R A T I O sales = \beta_0 + \beta_1*CRIM+\beta_2*NOX+\beta_3*RAD+\beta_4*RTRATIO sales=β0+β1CRIM+β2NOX+β3RAD+β4RTRATIO

3.线性回归调用方法

        首先对预处理后的数据进行特征工程,主要是PCA降维,保留16个特征维度的数据量。第一部分的代码需要第三章特征工程里的内容,有需求的小伙伴可以转至工业蒸汽量预测-特征工程

from sklearn.model_selection import train_test_split 
new_train_pca_16 = new_train_pca_16.fillna(0)
train = new_train_pca_16[new_test_pca_16.columns]
target = new_train_pca_16['target']
# 切分数据,训练数据为80%,验证数据为20%
train_data,test_data,train_target,test_target = train_test_split(train,target,test_size=0.2,random_state=0)

        第二部分的模型训练的基本套路如下:

  1. 导入对于的模型类 from sklearn.xxx import xxx
  2. 获取对于模型类的对象 xx = xxx()
  3. 用数据去训练模型(训练模型参数) xx.fit(data,target)或xx.fit_transform(train_data,train_target)。后者(fit_transform)是在前者的基础上增加了数据处理(特征工程等一些方法)
  4. 使用训练好的模型(对象)去对测试数据进行预测或分类 xx.predict(test_data)
  5. 通过各种评价指标计算得分 score = xyz(test_target,predict)
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
clf = LinearRegression()
clf.fit(train_data,train_target)
test_predict = clf.predict(test_data)
score = mean_squared_error(test_target,test_predict)
print("LinearRegression:  ",score)
# 结果 LinearRegression:   0.27169582706646955

4.1.4 K近邻回归模型

1.K近邻回归介绍

        K近邻算法不仅可以用来分类,还可以用于回归。通过找出某个样本的K个最近邻居,将这些邻居的某个(些)属性的平均值赋给该样本,就可以得到该样本对应属性的值。

2.K近邻回归调用方法

        如何才能知道哪些数据样本最相近呢?设有两个点P和Q其中
P = p 1 , p 2 , p 3 , . . . , p n , Q = q 1 , q 2 , q 3 , . . . , q n P = p_1,p_2,p_3,...,p_n, Q=q_1,q_2,q_3,...,q_n P=p1,p2,p3,...,pnQ=q1,q2,q3,...,qn
        那么P与Q之间的距离表示为 d d d,则根据欧式距离公式如下所示。
d = ( p 1 − q 1 ) 2 + ( p 2 − q 2 ) 2 + . . . + ( p n − q n ) 2 d=\sqrt{(p_1-q_1)^2+(p_2-q_2)^2+...+(p_n-q_n)^2} d=(p1q1)2+(p2q2)2+...+(pnqn)2
        使用sklearn调用K近邻回归算法进行预测。

from sklearn.neighbors import KNeighborsRegressor
from sklearn.metrics import mean_squared_error
scores = []
for i in range(1,10):
    knf = KNeighborsRegressor(n_neighbors=i)
    knf.fit(train_data,train_target)
    test_predict = knf.predict(test_data)
    score = mean_squared_error(test_target,test_predict)
    scores.append(score)
plt.figure(figsize=(13,8))
plt.plot(range(1,10),scores)
plt.title('KNeighborsRegressor K-MSE')
plt.xlabel('k')
plt.ylabel('MSE score')

4.1.5 决策树回归模型

1.决策树回归模型介绍

        决策树回归可以理解为根据一定准则(评估方式),将一个空间划分为若干个子空间,然后利用子空间内所有点的信息表示这个子空间的值。

2.决策树回归模型举例
3.决策树回归调用方法
from sklearn.tree import DecisionTreeRegressor
DTR = DecisionTreeRegressor()
DTR.fit(train_data,train_target)
test_pred = DTR.predict(test_data)
score = mean_squared_error(test_target,test_pred)
print("DecisionTreeRegressor",score)

4.1.6 集成学习回归模型

1.随机森林回归模型
from sklearn.ensemble import RandomForestRegressor
clf = RandomForestRegressor(n_estimators=200) # 200棵树模型
clf.fit(train_data,train_target)
test_predict = clf.predict(test_data)
score = mean_squared_error(test_target,clf.predict(test_data))
print('RandomForestRegressor score',score)
2.LightGBM回归模型
3.其他常用模型

        弹性网络(Elastic Net)回归是在参数空间中对L1和L2范数进行正则化的线性回归模型,可以理解为岭回归和Lasso回归的结合,其主要用在正则化融合的技术中。

        SVR(Support Vector Regression)是支持向量机在线性回归模型中的应用。支持向量机主要用于分类。这类模型的优势在采用核函数后,可以自动升维拟合,提高拟合效果,并且参数计算量并没有增加。

4.2 赛题模型训练

4.2.1 导入相关库

from sklearn.neighbors import KNeighborsRegressor  # K近邻回归
from sklearn.linear_model import LinearRegression  # 线性回归
from sklearn.tree import DecisionTreeRegressor  # 决策树回归
from sklearn.ensemble import RandomForestRegressor # 随机森林
from sklearn.svm import SVR #支持向量回归
import lightgbm as lgb # LightGBM模型

from sklearn.metrics import mean_squared_error # 评价指标 MSE
from sklearn.model_selection import train_test_split # 数据集切分

from sklearn.model_selection import learning_curve
from sklearn.model_selection import ShuffleSplit

4.2.2 切分数据

对训练集进行切分,得到80%的训练数据和20%验证数据。

from sklearn.model_selection import train_test_split 
new_train_pca_16 = new_train_pca_16.fillna(0)
train = new_train_pca_16[new_test_pca_16.columns]
target = new_train_pca_16['target']
# 切分数据,训练数据为80%,验证数据为20%
train_data,test_data,train_target,test_target = train_test_split(train,target,test_size=0.2,random_state=0)

4.2.3 多元线性回归

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
reg_linear = LinearRegression()
reg_linear.fit(train_data,train_target)
test_predict = reg_linear.predict(test_data)
score = mean_squared_error(test_target,reg_linear.predict(test_data))
print("LinearRegression MSE:  ",score)
#LinearRegression MSE:   0.27169238212011

优点:模型简单,部署方便,回归权重可以用于结果分析;训练快。

缺点:精度低,特征存在一定的共线性问题。

使用技巧:需要进行归一化处理,建议进行一定的特征选择,尽量避免高度相关的特征同时存在

4.2.4 K近邻回归

reg_KNN = KNeighborsRegressor(n_neighbors=5)
reg_KNN.fit(train_data,train_target)
test_pred = reg_KNN.predict(test_data)
score = mean_squared_error(test_target,reg_KNN.predict(test_data))
print("KNeighborsRegressor MSE:  ",score)
# KNeighborsRegressor MSE:   0.2661117858823529

优点:模型简单,易于理解,对于数据量小的情况方便修改,可视化方便

缺点:计算量大,不适合数据量大的情况;需要调参数。

使用技巧:特征需要归一化,重要的特征可以适当加一定比例的权重

4.2.5 随机森林回归

reg_RFR = RandomForestRegressor(n_estimators=200) 
reg_RFR.fit(train_data,train_target)
test_pred = reg_RFR.predict(test_data)
score = mean_squared_error(test_target,reg_RFR.predict(test_data))
print("RandomForestRegressor MSE:  ",score)
# RandomForestRegressor MSE:   0.2504218045885812

优点:使用方便,特征无须做过多变换,精度较高;模型并行训练快。

缺点:结果不容易解释

使用技巧:参数调节,提高精度。

本题结果:比较合适

4.2.5 LGB模型回归

reg_lgb = lgb.LGBMRegressor(
    learning_rate=0.01,
    max_depth=-1,
    n_estimators=5000,
    boosting_type='gbdt',
    random_state=2019,
    objective='regression',
)
#训练模型
reg_lgb.fit(train_data,train_target)
score = mean_squared_error(test_target,reg_lgb.predict(test_data))
print('LightGBM socre ',score)
#LightGBM socre  0.24271210461687062

优点:精度高。

缺点:训练时间长,模型复杂。

使用技巧:有效的验证集防止过拟合;参数搜索。

本题结果:适用。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值