【学习笔记】线性回归

统计量:
集中趋势衡量:均值、中位数、众数
离散趋势衡量:方差、标准差

  • 回归(regression) :Y变量为连续数值型(continuous numerical variable),如:房价,人数,降雨量
  • 分类(Classification): Y变量为类别型(categorical variable),如:颜色类别,电脑品牌,有无信誉

简单线性回归(Simple Linear Regression)

回归分析(regression analysis)用来建立方程模拟两个或者多个变量之间如何关联
回归的意思是用一条直线来概括所有点的分布规律

简单线性回归包含一个自变量(x)和一个因变量(y),以上两个变量的关系用一条直线来模拟
如果包含两个以上的自变量,则称作多元回归分析(multiple regression)

简单线性回归模型
被用来描述因变量(y)和自变量(X)以及偏差(error)之间关系的方程叫做回归模型
在这里插入图片描述
关于偏差ε的假定:

  • 是一个随机的变量,均值为0
  • ε的方差(variance)对于所有的自变量x是一样的
  • ε的值是独立的
  • ε满足正态分布

因为不可能存在一条直线连接所有的散列点.所以我们计算出的值是有误差的,或者说我们回归出的这条直线是有误差的.我们回归出的这条线的目的是用来预测下一个点的位置。
考虑一下,一件事情我们规律总结的不准,原因是什么?是不是因为我们观察的不够细或者说观察的维度不够多呢?当我们掷一个骰子,我们清楚的知道他掷出的高度,落地的角度,反弹的力度等等信息,那上帝视角的我们是一定可以知道他每次得到的点数的.我们观测不到所有的信息,所以我们认为每次投骰子得到的点数是不确定的,是符合一定概率的,未观测到的信息我们称为误差。

简单线性回归方程
E(y) = β0+β1x
这个方程对应的图像是一条直线,称作回归线
其中,β0是回归线的截距,β1是回归线的斜率,E(y)是在一个给定x值下y的期望值(均值)

估计的简单线性回归方程
ŷ=b0+b1x
这个方程叫做估计线性方程(estimated regression line)
其中,b0是估计线性方程的纵截距,b1是估计线性方程的斜率,ŷ是在自变量x等于一个给定值的时候,y的估计值

线性回归分析流程
第一:我们有个x和y的关系模型,用方程(Ey)来描述这个模型,目的用已有的数据估计出β0和β1
第二:准备样本数据
第三:用样本数据拟合估计方程,得到b0和b1
第四:用估计值代替β0和β1(真实模型中参数是β0和β1,特定样本中参数是b0和b1)
在这里插入图片描述
举例
汽车卖家做电视广告数量与卖出的汽车数量:
在这里插入图片描述
如何练出适合简单线性回归模型的最佳回归线?
在这里插入图片描述
使sum of squares最小:真实值与估计值之差平方和最小
在这里插入图片描述
如何使sum of squares最小?
估计方程计算步骤:
在这里插入图片描述
分子 = (1-2)(14-20)+(3-2)(24-20)+(2-2)(18-20)+(1-2)(17-20)+(3-2)(27-20)= 6 + 4 + 0 + 3 + 7=20
分母 = (1-2)^2 + (3-2)^2 + (2-2)^2 + (1-2)^2 + (3-2)^2 = 1 + 1 + 0 + 1 + 1=4
b1 = 20/4 =5
在这里插入图片描述
b0 = 20 - 5*2 = 20 - 10 = 10

预测:
假设有一周广告数量为6,预测的汽车销售量是多少?
x_given = 6
Y_hat = 5*6 + 10 = 40

Python实现

import numpy as np

def fitSLR(x, y):
    n = len(x)
    dinominator = 0
    numerator = 0
    for i in range(0, n):
        numerator += (x[i] - np.mean(x))*(y[i] - np.mean(y))
        dinominator += (x[i] - np.mean(x))**2
    b1 = numerator/float(dinominator)
    b0 = np.mean(y)/float(np.mean(x))
    return b0, b1

def predict(x, b0, b1):
    return b0 + x*b1


x = [1, 3, 2, 1, 3]
y = [14, 24, 18, 17, 27]    

b0, b1 = fitSLR(x, y)

print("intercept:", b0, " slope:", b1)

x_test = 6
y_test = predict(x_test, b0, b1)

print("y_test:", y_test)

多元线性回归(Multivarate Linear Regression)

多元回归模型
y=β0+β1x1+β2x2+ … +βpxp+ε
其中:β0,β1,β2… βp是参数,ε是误差值

多元回归方程
E(y)=β0+β1x1+β2x2+ … +βpxp

估计多元回归方程
ŷ=b0+b1x1+b2x2+ … +bpxp
一个样本被用来计算β0,β1,β2… βp的点估计b0, b1, b2,…, bp

估计方法
使sum of squares最小
在这里插入图片描述
运算与简单线性回归类似,涉及到线性代数和矩阵代数的运算

举例
一家快递公司送货:
X1: 运输里程 X2: 运输次数 Y:总运输时间
在这里插入图片描述
Python实现

from numpy import genfromtxt
from sklearn import linear_model

dataPath = r"test1.csv"
deliveryData = genfromtxt(dataPath, delimiter=',')

print("data", deliveryData)

X = deliveryData[:, :-1]
Y = deliveryData[:, -1]

print("X:", X)
print("Y: ", Y)

regr = linear_model.LinearRegression()
regr.fit(X, Y)

print("coefficients", regr.coef_)
print("intercept: ", regr.intercept_)

# 预测
xPred = [[102, 6]]
yPred = regr.predict(xPred)
print("predicted y: ", yPred)

如果自变量中有分类型变量(categorical data) , 如何处理?
在这里插入图片描述
类别型数据转换为矩阵(010代表1型,100代表0型,001代表2型)
在这里插入图片描述
同样用上述代码进行计算
在这里插入图片描述

参考文献
多元线性回归推导过程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值