LinearRegression(线性回归)
回归是一种解题的方法,或者说是“学习的方法”,也是机器学习中比较重要的概念。 回归一词的英文是Regression,单词原型regress大概的意思是“回退,倒退,退化”。 其实Regression回归分析的意思借用了这么一层含义,是由果索因的过程,是一种归 纳的思想。当看到大量的事实所呈现的状态,推断出原因是如何的;当看到大量的数 字的时候,推断出他们之间的关系是什么样的。
线性回归是利用数理统计中回归分析来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。公式为:
e为误差服从均值为0 的高斯分布。
现实生活中有很多的东西和线性回归有着密切的关系,在气温预测,台风行径预测,风速预测,贷款金额预测等等。
我们经常使用的回归叫做多元一次回归方程:
其中w,x是一个矩阵:
用函数分段的方式表示:
矩阵的表示方式
回归
人类的生长是一个回归的过程,比如,七坐八趴。
狗,狗到几岁的时候就Over了。
回归分析:Y是因变量,X是解释型的变量
- 线性回归中,Y是一组连续的数字
- 预测2020年上海3号线大柏树房价为多少。
- 信用卡,你的额度是多少。
- 演员的电影,分析演员具有哪些特质会收到大众的喜爱(比如公益:喜欢指数是多少)。
- 零一回归中,Y是"是"或"不是"
- 能不能办理信用卡
- 定序回归中,Y是"图书"或者"游戏"或者"运动"或者是…
- 计数回归中,Y是数字,计算你有多少个包,是一个整数
- 生存回归中,Y是一个范围(70+)
普通线性回归
import numpy as np
以一个具体的例子来看。假设一帮孩子和家长出去旅游,去程坐的是bus,小孩票价为3元,家长票价为3.2元,总价是118.4元;回程坐的是Train,小孩票价为3.5元,家长票价为3.6元,总价是135.2元。问题是分别求小孩和家长的人数。我们就可以用下列矩阵求之。
普通的:
3 x 1 + 3.2 x 2 = 118.4 3x_1 + 3.2x_2 = 118.4 3x1+3.2x2=118.4
3.5 x 1 + 3.6 x 2 = 135.2 3.5x_1 + 3.6x_2 = 135.2 3.5x1+3.6x2=135.2
矩阵:
F e a t u r e s = [ 3 3.2 3.5 3.6 ] Features = \begin{bmatrix} 3 & 3.2 \\ 3.5 & 3.6 \end{bmatrix} Features=[33.53.23.6] L a b e l s = [ 118.4 135.2 ] Labels = \begin{bmatrix} 118.4 \\ 135.2 \end{bmatrix} Labels=[118.4135.2]
矩阵求解公式:
( X T X ) − 1 X T y (X^TX)^{-1}X^Ty (XTX)−1XTy
- X T X^T XT是矩阵的转置
- X T X X^TX XTX是 矩阵的转置 和 原来的矩阵 点积运算 得到一个方阵
- ( X T X ) − 1 (X^TX)^{-1} (XTX)−1方阵的逆矩阵
- y y y 是一个目标值
X = np.array([[3,3.2],\
[3.5,3.6]])
y = np.array([[118.4],\
[135.2]])
#转置
XT = X.T
#方阵
XTX = np.dot(XT,X)
#逆矩阵
INV = np.linalg.inv(XTX)
w = np.dot(np.dot(INV,XT),y)
w
np.dot(X,w)
from sklearn.linear_model import LinearRegression
#fit_intercept 需不需要截距=偏置项=误差
lrg = LinearRegression(fit_intercept=False).fit(X,y)
#获取 系数 和 误差
lrg.coef_,lrg.intercept_
分类的目标变量是标称型数据,而回归将会对连续型的数据做出预测。
应当怎样从一大堆数据里求出回归方程呢?
假定输人数据存放在矩阵X中,而回归系数存放在向量W中。那么对于给定的数据X1, 预测结果将会通过
Y=X*W
给出。现在的问题是,手里有一些X和对应的Y,怎样才能找到W呢?
一个常用的方法就是找出使误差最小的W。这里的误差是指预测Y值和真实Y值之间的差值,使用该误差的简单累加将使得正差值和负差值相互抵消,所以我
们采用平方误差。