多变量线性回归
前面在上一篇笔记中,讨论了单变量/特征的回归模型,这一篇我们将重点将多变量(多维特征)线性回归问题
𝑚 代表训练集中实例的数量
𝑥 代表特征/输入变量
𝑦 代表目标变量/输出变量
(𝑥, 𝑦) 代表训练集中的实例
(𝑥(𝑖), 𝑦(𝑖)) 代表第𝑖 个观察实例
h代表学习算法的解决方案或者函数,也称为假设(hypothesis)
在这里我们接着增加一些变量
n代表特征的数量,x_(i)代表第 𝑖 个训练实例,是特征矩阵中的第𝑖行,是一个向量(vector)。
就比如这里的x_(2).T=[1416,3,2,40] (注意这里的向量一般是列向量,加上转置T就成了行向量)
但是在这个h_𝜃(x)函数里面有n+1个参数,n个变量,为了能够使我们的公式更加简化一些,我们引入X_0=1,这样公式就变为了
这样,模型中的参数就是一个n+1维的向量,任何一个训练实例也都是n+1维的向量,特征矩阵X的维度是m*(n+1)。因此公式就可以利用线性代数的知识化简为
ℎ_𝜃(𝑥) = 𝜃.𝑇X( .T表示矩阵的转置)
这样的表示不仅看起来直观简洁,在代码实现里面也可以利用python提前下载好的包来实现,便于数据集的导入与使用。
多变量梯度下降
多变量线性回归与单变量线性回归是极其类似的,在多变量线性回归中,同样也有代价函数,只不过代价函数的参数不再是两个变量𝜃_0和𝜃_1,而是一个n+1维的向量𝜃。
代价函数同样是所有建模误差的平方和:
其中:ℎ_𝜃(𝑥) = 𝜃_𝑇𝑋 = 𝜃_0*1+ 𝜃_1*𝑥_1+……+𝜃_n*x_n
上图即为我们的批量梯度下降算法,目的和我们的单变量线性回归问题一样,要找出使代价函数最小的𝜃的(n+1)维向量
图中的公式也不难理解,m为样本数,因为是批量梯度下降,所以要取全部样本对其进行偏差值求和,其实这一块就是对我们的代价函数进行求导,只乘X_r (i)的原因是求偏导的知识,所以还是得学好数学叭
和我们的单变量一样,还是随机选择一系列的参数值,计算所有的预测结果后,再给所有的参数一个新的值,不断循环,直至收敛
def computerCost(X,y,theta):
inner=np.power(((X*theta.T)-y),2)
#X为m*(n+1)维的矩阵,theta为1*(n+1)维的矩阵,或者说是(n+1)维的行向量,所以要进行转置
#np.power是numpy包里面自带的一个函数,将(X*theta.T)-y)的每一行平方
return np.sum(inner)/(2*len(X))
#np.sum()函数是将inner矩阵的每一行进行相加,
#/len(X)是除以样本数,/2是后面求偏导可以消掉有一定的帮助