ML系列文章先引入数学理论和代码实现结合。
一、数学理论篇
引言:
数值型自变量和数值型新变量之间关系分析方法就是相关与回归分析。是处理变量之间关系的一种统计方法。两个变量之间就是简单相关与简单回归分析;两个及以上是多元相关与多元回归分析。 如果从变量关系形态上又分为线性相关与线性回归和非线性相关非线性回归。
描述
当然如何对相关关系描述与测度呢(是否有关系,有什么关系,关系强度,样本能否代表总体变量关系):
- 1散点图
- 2相关系数(correlation coefficient) 样本的记做r,总体的记做ρ
注:r仅仅是线性关系的度量,可能存在非线性关系,r=0不能得出不存在相关关系,要结合散点图分析,也不一定意味着x与y一定有因果关系
显著性检验(t分布)
因为总体相关系数ρ未知,用样本相关系数r作为近似值会受到抽象波动影响所以要进行显著性检验:
显著性检验方法
回归模型
描述因变量y如何依赖自变量x和误差项ɛ的方程为回归方程(regression model)
y = β0 + β1x + ɛ (一元线性回归模型也称为理论回归模型)
注:误差项ɛ 是随机变量,E(ɛ )=0,对所有的x值,ɛ 的方差σ^2都相等,服从正态分布。 给定任何一个x,y都服从期望值为β0+β1*x,方差为σ^2的正态分布。
估计回归方程
方程:
对于x和y的n对观测值,用描述的直线就很多,这时就需要引入一个原则来判定哪条代表两个变量之间关系。 这个方法就是最小二乘法(method of least squares)
区分:
- 回归模型是对统计关系进行定量描述的一种数学模型.
- 回归方程是对变量之间统计关系进行定量描述的一种数学表达式.指具有相关的随机变量和固定变量之间关系的方程.主要有回归直线方程.
- 当几个变量有多重共线性时,多元回归分析得出的回归方程,靠手算精确值计算量太大,所以只能得出估计值
回归直线的拟合优度(goodness of fit)
-
判定系数
是对拟合优度的度量
需要了解概念SST(总平方和), SSR(回归平方和),SSE(残差平方和), R^2 (判定系数)= SSR/SST R^2∈[0,1] - 估计标准误差
了解的概念:估计标准误差(standard error of estimate)
,是均方残差(MSE)
的平方和.MSE是度量实际观测值与回归观测值的差异程度。
回归分析的显著性检验 (F分布)
回归分析以及显著性检验
注:F检验是检验总体回归关系的显著性,而t检验则是各个回归系数的显著性
用回归方程预测
- 置信区间估计:对x的一个给定值x0,求y的平均值的区间估计
- 期望估计值标准差的估计量的计算公式:自己找一找
- 预测区间估计:对x的一个给定值x0,求y的一个个别值的区间估计
- 个别估计值的标准差的估计量的计算公式:自己找一找
残差分析
确定假定的 ɛ是否成立的方法之一是残差分析
-
残差(residual)
:因变量的观测值与根据估计的回归方程求的预测值之间的差。反映了用估计的回归方程去预测yi而引起的误差。 - 残差计算公式:略
-
标准化残差(standardized residual)
:残差除以它的标准差的数值,也称为Pearson残差或者半学生化残差(semi-studentized residuals) 计算公式:略 ,它是残差的标准化估计,因为假定 误差项ɛ服从正态分布成立,那么标准化残差的分布也服从正态分布。
引申多元线性回归
前面说的是一元,可以引申为多远是一样的,只是多了几个变量,概念和它的意义和上面一样。因为自变量多,可能就会存在多重共线性
的问题(自变量之间存在相关关系)。
判定
计算各对变量之间的相关关系。处理
这个问题有点大,可以后续说明,读者可以先自行了解。一般来说就是剔除,使自变量尽可能不相关-
变量选择
因为在建立回归模型的时候,不能将所有自变量都引进入模型,所以需要一定筛选。- 向前选择
- 向后剔除
- 逐步回归
- 最优子集
上述相关方法读者可以自行了解。
二、编程篇
yi = βxi + α + ɛi
我们假设y是用户i每天花在网站上的分钟数,xi是用户i已有的朋友数,而ɛi是误差项,我们求出alpha和beta就可以进行预测了
#预测
def predict(alpha,beta,x_i):
return beta * x_i + alpha
#计算误差
def error(alpha,beta,x_i,y_i):
return y_i - predict(alpha,beta,x_i)
单纯把各个误差加起来不是很合理,因为有的预测太高,有的太低,相加会抵消,因此求误差的平方和
def sum_of_squared_errors(alpha,beta,x,y):
return sum(error(alpha,beta,x_i,y_i)**2
for x_i, y_i in zip(x,y))
也可利用最小二乘法选择alpha和beta,使得sum_of_squared_errors 尽可能小
#利用微积分求:
def least_squares_fit(x,y):
beta = correlation(x,y) * standard_deviation(y) / standard_deviation(x)
alpha = mean(y) - beta* mean(x)
return alpha,beta
用决定系数(coefficient of determination)R^2 这一指标来评估模型对数据的拟合效果
def total_sum_of_squares(y):
return sum(v**2 for v in de_mean(y))
def r_squared(alpha,beta,x,y):
return 1.0 - (sum_of_squared_errors(alpha,beta,x,y) / total_sum_of_squares(y))
利用梯度下降法:
定义个theta = [alpha,beta]
def squared_error(x_i,y_i,theata):
alpha,beta = theta
return error(alpha,beta,x_i,y_i) ** 2
def squared_error_gradient(x_i,y_i,theta):
alpha, beta = theta
return [-2*error(alpha,beta,x_i,y_i), #alpha偏导数
-2*error(alpha,beta,x_i,y_i)*x_i] #beta偏导数
为什么选择最小二乘法?其中一个最大原因就是最大似然估计(maximum likelihood estimation)