美文网首页
线性回归

线性回归

作者: SUNFC | 来源:发表于2017-05-04 17:23 被阅读238次

链接:
1. 线性回归总结
2. 正则化
3. 逻辑回归
4. Boosting
5. Adaboost算法


一. 模型介绍

线性回归简而言之就是在平面中用一条直线去拟合一些点数据,在三维空间中就是用一个平面去拟合三维中的数据,而我们要做的就是寻找出一条最佳的线段或者平面去拟合数据,当然高维情况类似去寻找超平面。
初中的时候我们就学习过一元一次方程,那就是一个简单的拟合过程,只不过那个是完全可以拟合在一条线上,现在要做的是在有误差或者数据非线性排列的情况下,我们只能去尽力找出一条最佳的拟合线路:

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1,10,2).reshape(-1,1)
y = a*2 
plt.plot(x,y,'r-',linewidth=2, label=u"线性拟合")
plt.plot(x,y, 'bo')
plt.show()
完全拟合,二元一次方程组求解;(数据线性情况下)
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

x = np.arange(1,10,2).reshape(-1,1)
y = a*2 + np.random.randn(5)
linear_model = LinearRegression()
linear_model.fit(x.reshape(-1, 1),y)
y_pre = linear_model.predict(x)
plt.plot(x,y_pre,'r-',linewidth=2, label=u"线性拟合")
plt.plot(x,y, 'bo')
plt.show()
线性回归;寻找最佳的拟合线段;(数据非线性情况下)

定义一下一些符号表达,我们通常习惯用X=(x1,x2,...,xn)T∈ℝn×p表示数据矩阵,其中xi∈ℝp表示一个p维度长的数据样本;y=(y1,y2,...,yn)T∈ℝn表示数据的label,这里只考虑每个样本一类的情况。

线性回归的模型是这样的,对于一个样本xi,它的输出值是其特征的线性组合:

线性表达式

其中,w0称为截距,或者bias,通过设置X中X0=1,向量表达,简化了形式,因此实际上xi有p+1维度。
线性回归的目标是用预测结果尽可能地拟合目标label,

二. 损失函数

从下图来直观理解一下线性回归优化的目标——图中线段距离(平方)的平均值,也就是最小化到分割面的距离和。


三维中拟合后的情况

这里我们要做的是在随机放置权值W的情况下不断的优化程式,以达到效果最佳的情况,这里的优化指的是尽量让各个点拟合在所求超平面,如果不能拟合,也要使得其距离超平面最近为好,也就是可以定义损失函数

损失函数

三. 求解过程

由于上述损失函数图形如下,我们这里选用两种方式去求解


J(θ)平面

1. 矩阵满秩:###

这种形式下我们可以通过求解导数为零的方式求解算法,可以直接得到最后的W权值.


矩阵形式转换
求解过程

1. 矩阵不满秩:###

当矩阵不满秩,无法求得上述的矩阵逆解,这里采用梯度下降法进行求解,梯度下降法通常分为三种形式:整体批次梯度下降法,随机梯度下降法和批量梯度下降法.
  梯度下降算法是一种求局部最优解的方法,对于F(x),在a点的梯度是F(x)增长最快的方向,那么它的相反方向则是该点下降最快的方向,具体参考wikipedia
   原理:将函数比作一座山,我们站在某个山坡上,往四周看,从哪个方向向下走一小步,能够下降的最快;注意:当变量之间大小相差很大时,应该先将他们做处理,使得他们的值在同一个范围,这样比较准确。
1)首先对θ赋值,这个值可以是随机的,也可以让θ是一个全零的向量。
2)改变θ的值,使得J(θ)按梯度下降的方向进行减少。
 描述一下梯度减少的过程,对于我们的函数J(θ)求偏导J:


下图表达出解得最终结果与初始值相关:
梯度下降方式

在这里我们需要进行的是:


迭代公式

在批量梯度下降中,每一次参数更新都会遍历全部的训练数据{x1, y1}, {x2, y2}, ... , {xm,ym}对于线性回归问题,这种方法可以得到一个全局最优解,但是当样本数据量很大的时候,会非常耗时。

多项式回归

我们可以通过设计高阶特征在线性回归的基础上实现多项式回归。对于线性回归的hypothesis,



令$ x2=x1^2, x3=x1^3 $,实现了一个3次多项式的回归:



这也是用线性模型实现非线性的常用方法。这种方式能够拟合出非线性的超平面,有时候表现出很好的特性
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
X_train = [[6], [8], [10], [14], [18]]
y_train = [[7], [9], [13], [17.5], [18]]
X_test = [[6], [8], [11], [16]]
y_test = [[8], [12], [15], [18]]

quadratic_featurizer = PolynomialFeatures(degree=2)
X_train_quadratic = quadratic_featurizer.fit_transform(X_train)
X_test_quadratic = quadratic_featurizer.transform(X_test)
xx = np.linspace(0, 26, 100)
regressor_quadratic = LinearRegression()
regressor_quadratic.fit(X_train_quadratic, y_train)
xx_quadratic = quadratic_featurizer.transform(xx.reshape(xx.shape[0], 1))
plt.plot(xx, regressor_quadratic.predict(xx_quadratic), 'r-')
plt.show()
多项式回归与一般线性回归对比

线性回归代码地址

参考:
机器学习方法:回归(一):线性回归Linear regression
机器学习-----线性回归浅谈(Linear Regression)
Stanford机器学习笔记-1.线性回归
线性回归

相关文章

  • 机器学习实战——回归

    本章内容】 线性回归 局部加权线性回归 岭回归和逐步线性回归 例子 【线性回归】 wHat = (X.T*X).I...

  • 线性回归模型

    参考:1.使用Python进行线性回归2.python机器学习:多元线性回归3.线性回归概念 线性回归模型是线性模...

  • 通俗得说线性回归算法(二)线性回归实战

    前情提要:通俗得说线性回归算法(一)线性回归初步介绍 一.sklearn线性回归详解 1.1 线性回归参数 介绍完...

  • 第一次打卡

    线性回归主要内容包括: 线性回归的基本要素线性回归模型从零开始的实现线性回归模型使用pytorch的简洁实现线性回...

  • 2020-02-14

    线性回归:线性回归分为一元线性回归和多元线性回归,一元线性回归用一条直线描述数据之间的关系,多元回归是用一条曲线描...

  • 逻辑回归和线性回归对比

    简单说几点 线性回归和逻辑回归都是广义线性回归模型的特例。他们俩是兄弟关系,都是广义线性回归的亲儿子 线性回归只能...

  • 算法概述-02

    1.逻辑回归和线性回归的联系和区别: 逻辑回归和线性回归的都是广义的线性回归。 线性回归是根据最小二乘法来建模,逻...

  • 【机器学习实践】有监督学习:线性分类、回归模型

    线性模型 为线性模型 分类和回归的区别 分类:离散回归:连续本文主要关注线性回归模型 常用线性回归模型类型 OLS...

  • 统计学习基础复习浓缩版

    1.简单线性回归 2.多元线性回归 3.多项式回归 4.广义线性回归(含逻辑斯谛回归) 广义线性回归模型通过拟合响...

  • Linear Regression

    在线性回归模型中,我们分为单元线性回归和多元线性回归(Multivariate Linear Regression...

网友评论

      本文标题:线性回归

      本文链接:https://www.haomeiwen.com/subject/ofrdtxtx.html