线性回归
Posted eastblue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线性回归相关的知识,希望对你有一定的参考价值。
1. 线性回归
核心公式:
w = (XTX)-1XTY
流程伪代码:
读入数据,将数据特征x、特征标签y存储在矩阵x、y中 验证 x^Tx 矩阵是否可逆 使用最小二乘法求得 回归系数 w 的最佳估计
核心代码:
1 def standRegres(xArr, yArr): 2 xMat = mat(xArr) 3 yMat = mat(yArr).T 4 # 矩阵乘法的条件是左矩阵的列数等于右矩阵的行数 5 xTx = xMat.T * xMat 6 # 因为要用到xTx的逆矩阵,所以事先需要确定计算得到的xTx是否可逆,条件是矩阵的行列式不为0 7 # linalg.det() 函数是用来求得矩阵的行列式的,如果矩阵的行列式为0,则这个矩阵是不可逆的,就无法进行接下来的运算 8 if linalg.det(xTx) == 0.0: 9 print("This matrix is singular, cannot do inverse") 10 return 11 # 最小二乘法 12 # 求得w的最优解 13 ws = xTx.I * (xMat.T * yMat) 14 return ws
2. 局部加权线性回归
(就是中间乘上权值W)
核心公式:
参数w = (XTWX)-1XTWY
权值Wi = exp( ||xi - x|| / ( -2*k2) )
流程伪代码:
读入数据,将数据特征x、特征标签y存储在矩阵x、y中 利用高斯核构造一个权重矩阵 W,对预测点附近的点施加权重 验证 X^TWX 矩阵是否可逆 使用最小二乘法求得 回归系数 w 的最佳估计
核心代码:
1 def lwlr(testPoint, xArr, yArr, k=1.0): 2 xMat = mat(xArr) 3 yMat = mat(yArr).T 4 # 获得xMat矩阵的行数 5 m = shape(xMat)[0] 6 # eye()返回一个对角线元素为1,其他元素为0的二维数组,创建权重矩阵weights,该矩阵为每个样本点初始化了一个权重 7 weights = mat(eye((m))) 8 for j in range(m): 9 # testPoint 的形式是 一个行向量的形式 10 # 计算 testPoint 与输入样本点之间的距离,然后下面计算出每个样本贡献误差的权值 11 diffMat = testPoint - xMat[j, :] 12 # k控制衰减的速度 13 weights[j, j] = exp(diffMat * diffMat.T / (-2.0 * k ** 2)) 14 # 根据矩阵乘法计算 xTx ,其中的 weights 矩阵是样本点对应的权重矩阵 15 xTx = xMat.T * (weights * xMat) 16 if linalg.det(xTx) == 0.0: 17 print("This matrix is singular, cannot do inverse") 18 return 19 # 计算出回归系数的一个估计 20 ws = xTx.I * (xMat.T * (weights * yMat)) 21 return testPoint * ws
以上是关于线性回归的主要内容,如果未能解决你的问题,请参考以下文章
R语言回归分析(regression)常见算法:简单线性回归多项式回归多元线性回归多水平回归多输出回归逻辑回归泊松回归cox比例风险回归时间序列分析非线性回归非参数回归稳健回归等