机器学习之回归模型汇总详解

回归模型

1. 线性回归

多元函数在某一点的梯度是一个非常特殊的向量,其由多元函数对每个变量的偏导数组成,其方向为函数在该点增加最快的方向,大小为函数在该点的最大变化率。

找到最佳的w0和w1来描述输入和输出的关系。如何确定最佳直线呢。我们就需要用总体样本误差最小的方法来判断。样本误差就是这个点的y值与预测函数对应y值的差的平方。将所有样本误差加在一起求和再乘以1/2。可以将预测函数y用w0和w1来表示,表示后就是该直线方程的损失函数。当损失函数取最小值时就是最佳直线。

梯度下降就是不断更新参数去找出最低点。参数更新公式:
w n = w n − 1 − α ∗ ∂ y ∂ x w_n=w_{n-1}-α*\frac{\partial y }{\partial x} wn=wn1αxy

import sklearn.linear_model as lm
# 创建模型
model = lm.LinearRegression()
# 训练模型
# 输入为一个二维数组表示的样本矩阵
model.fit(输入, 输出)   #训练模型
# 预测输出  
# 输入array是一个二维数组,每一行是一个样本,每一列是一个特征。
result = model.predict(array)

2. 误差评估:r2得分

import sklearn.metrics as sm

#平均绝对值误差:1/m∑|实际输出-预测输出|     
sm.mean_absolute_error(y, pred_y)
# 平均平方误差:1/mΣ(实际输出-预测输出)
sm.mean_squared_error(y, pred_y)
# 中位绝对值误差:MEDIAN(|实际输出-预测输出|)
sm.median_absolute_error(y, pred_y)
# R2得分,(0,1]区间的分值。分数越高,误差越小。
sm.r2_score(y, pred_y)

3. 模型的保存于读取

import pickle
# 将训练好的模型对象保存到磁盘文件中
with open('../../data/linear.pkl', 'wb') as f:
    pickle.dump(model, f)
# 从磁盘文件中加载模型对象
with open('../../data/linear.pkl', 'rb') as f:
    model = pickle.load(f)
# 根据输入预测输出
pred_y = model.predict(x)

4. 岭回归

通过添加正则项来调整损失函数的占比,从而达到提高多数正常样本拟合精度。

import sklearn.linear_model as lm
# 创建模型
model=lm.Ridge(正则强度,fit_intercept=True)
# fit_intercept为是否训练截距,y轴上的值。
model.fit(输入, 输出)
# 预测输出  
# 输入array是一个二维数组,每一行是一个样本,每一列是一个特征。
result = model.predict(array)

5. 多项式回归

是将一次项特征进行扩展得到高次项。然后将高次项看做一个变量,进行多元线性回归。使用sklearn提供的数据管线实现两个步骤的顺序执行。

import sklearn.pipeline as pl
import sklearn.preprocessing as sp
import sklearn.linear_model as lm
model = pl.make_pipeline(
   sp.PolynomialFeatures(10),  # 多项式特征扩展器
   lm.LinearRegression())     # 线性回归器

6. 决策树:CART分类回归树

相似的输入必会产生相似的输出。为了防止过拟合,可以做适当剪枝操作。

遍历所有特征,将每个特征值两两之间取平均数作为分割value,左边是小于value的样本,右边是大于value的样本。然后将原训练样本带入这棵树求mse(预测值与实际值),左右mse之和取得最小值时就是最优的特征值与特征value。然后用这个特征与value将原样本分成两个集合。然后重复上面步骤,直到最终条件。

import sklearn.tree as st
# 创建决策树回归器模型
model=st.DecisionTreeRegressor(max_depth=4, min_samples_split=2)
model.fit(train_x, train_y)
# 预测
pred_test_y = model.predict(test_x)

特征重要性:决策树副产品

划分子表时选择特征的顺序就标志了该特征的重要程度,通过feature_importances_获取特征。

model.fit(train_x, train_y)
cl=trainx.columns  #获取列名
mi=model.feature_importances_  #获取特征
sortimp=mi.argsort()[::-1]  #特征值进行排序

7. 集合算法:天生防止过拟合

根据多个弱分类器给出的预测结果,利用平均值(回归)或者投票(分类)的方法,得出最终预测结果。

Boosting(提升)类模型:先训练一个弱分类器

AdaBoost模型(正向激励)

将原始样本随机分配初始权重构建弱分类器决策树,然后将训练样本带入模型,根据权重预测其输出(回归就用平均值,分类就用投票)。然后对预测值与实际值误差大的样本,提高其权重重构决策树。再循环带入、预测、对比、修改权重值。最终通过不同权重值来创建线性回归模型。

import sklearn.tree as st
import sklearn.ensemble as se
# model: 决策树模型(一颗)
tree=st.DecisionTreeRegressor(max_depth=4)
# n_estimators:构建400棵不同权重的决策树训练模型
model=se.AdaBoostRegressor(tree,n_estimators=400 #最大400棵树 ,random_state=7 #随机权重)
GBDT(梯度提升树):先构建一棵cart决策树

先产生一个弱分类器,将训练样本带入模型算出预测值,将实际值与预测值的残差作为一个新的y,每个样本残差构成了损失函数,通过梯度下降寻求损失函数最小值的模型参数。

通过残差构建第二课树,对残差进行预测。如果预测值等于残差值,那么结果就是多棵树预测结果之和。

import sklearn.tree as st
import sklearn.ensemble as se
# 自适应增强决策树回归模型	
# n_estimators:构建400棵不同权重的决策树,训练模型
model=se.GridientBoostingRegressor(max_depth=10,n_estimators=1000,
                                   min_samples_split=2)

Bagging(打包)类模型:随机一个弱分类器

随机森林

自助聚合的基础上,随机选择样本和特征,不仅规避了强势样本的影响,也削弱了强势特征的影响,使模型的预测能力更加泛化。

import sklearn.ensemble as se
# 随机森林回归模型	
model=se.RandomForestRegressor(max_depth=10 #最大深度为10, 
                               n_estimators=100 #一共构建100棵树, 
                               min_samples_split=2 #子表拆分到2个样本后就不再拆分了)

你可能感兴趣的:(机器学习)