统计量:
集中趋势衡量:均值、中位数、众数
离散趋势衡量:方差、标准差
- 回归(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型)
同样用上述代码进行计算
参考文献
多元线性回归推导过程