线性回归基础--用于预测

线性回归可以说是机器学习中最基本的问题类型了,这里就对线性回归的原理和算法做一个小结。

1. 线性回归的模型函数和损失函数由来

线性回归遇到的问题一般是这样的。我们有m个样本,每个样本对应于n维特征和一个结果输出,如下:

   

   

由上面推到,可知线性回归可以使用最小二乘法进行求解:

由于矩阵法表达比较的简洁,后面我们将统一采用矩阵方式表达模型函数和损失函数。

2. 线性回归的算法

可见另一篇文章: 最小二乘法(least squares)介绍

当然线性回归,还有其他的常用算法,比如牛顿法和拟牛顿法,这里不详细描述。

3. 线性回归的推广:多项式回归

4. 线性回归的推广:广义线性回归

5. 线性回归的正则化

为了防止模型的过拟合,我们在建立线性模型的时候经常需要加入正则化项。一般有L1正则化和L2正则化。

线性回归的L1正则化通常称为Lasso回归,它和一般线性回归的区别是在损失函数上增加了一个L1正则化的项,L1正则化的项有一个常数系数αα来调节损失函数的均方差项和正则化项的权重,具体Lasso回归的损失函数表达式如下:

 Lasso回归可以使得一些特征的系数变小,甚至还是一些绝对值较小的系数直接变为0。增强模型的泛化能力。

 Lasso回归的求解办法一般有坐标轴下降法(coordinate descent)和最小角回归法( Least Angle Regression) 

线性回归的L2正则化通常称为Ridge回归,它和一般线性回归的区别是在损失函数上增加了一个L2正则化的项,和Lasso回归的区别是Ridge回归的正则化项是L2范数,而Lasso回归的正则化项是L1范数。具体Ridge回归的损失函数表达式如下:

Ridge回归在不抛弃任何一个特征的情况下,缩小了回归系数,使得模型相对而言比较的稳定,但和Lasso回归比,这会使得模型的特征留的特别多,模型解释性差。

      Ridge回归的求解比较简单,一般用最小二乘法。这里给出用最小二乘法的矩阵推导形式,和普通线性回归类似。

除了上面这两种常见的线性回归正则化,还有一些其他的线性回归正则化算法,区别主要就在于正则化项的不同,和损失函数的优化方式不同,这里就不累述了。

来自 <https://www.cnblogs.com/pinard/p/6004041.html>

   

   

简单的测试代码:

建模的流程大三步:数据清理处理,模型选择,检验,下面以线性回归为例:

import matplotlib.pyplot as plt

import numpy as np

from sklearn import datasets,linear_model

   

diabetes=datasets.load_diabetes() #加载数据

diabetes_X=diabetes.data[:,np.newaxis,2] #嵌套列表转化成列表

diabetes_X_train=diabetes_X[:-20]         #剔除后面20个作为训练集

diabetes_X_test=diabetes_X[-20:]        #剔除前面20个作为测试集合

diabetes_y_train=diabetes.target[:-20]

diabetes_y_test=diabetes.target[-20:]

regr=linear_model.LinearRegression()        #创建线性回归对象

regr.fit(diabetes_X_train,diabetes_y_train) #将训练集放进去拟合

   

print("Coefficients:\n",regr.coef_)         #输出系数

print("Residual sum of sqares:%.2f"

%np.mean((regr.predict(diabetes_X_test)-diabetes_y_test)**2))                #输出残差平方和

print("Variance score:%.2f" %regr.score(diabetes_X_test,diabetes_y_test)) #R^2

   

plt.scatter(diabetes_X_test,diabetes_y_test,color='black')                #测试集散点图

plt.plot(diabetes_X_test,regr.predict(diabetes_X_test),color='blue',linewidth=3)        #拟合方程

plt.title("The Linear Model")

plt.show()

   

   

转载于:https://www.cnblogs.com/yifanrensheng/p/11571843.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值