900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 多元线性回归用梯度下降法来训练模型

多元线性回归用梯度下降法来训练模型

时间:2019-08-12 22:18:25

相关推荐

多元线性回归用梯度下降法来训练模型

多元线性回归训练分为两种,一种是公式训练,一种是梯度下降法训练

公式训练

我已经记录了,具体可以看/qq_41342577/article/details/8234

梯度训练法

原理/qq_41342577/article/details/82718519

如何使用梯度下降法来求出所需参数

损失函数对求偏导公式推导如下

最后的是成立的,这是转置函数的互换位置

所以最后线性函数的损失函数MES对求偏导公式只需要 求*2/m

代码实现,这里是摘取一部分出来的代码

#损失函数def J(self, theta, x, y):#x_b = np.hstack([np.ones(len(x), 1), x])try:return np.sum((y - x.dot(theta))**2) / len(y)except:return float("inf")#损失函数对theta求偏导def dJ(self, theta, x, y):#x_b = np.hstack([np.ones(len(x), 1), x])# 以下for循环的方法是比较土的办法# res = np.empty(len(theta))# res[0] = np.sum(x_b.dot(theta) - y) / len(y)# for i in range(1, len(theta)):#res[i] = (x_b.dot(theta) - y).dot(x[:i])# return resreturn x.T.dot((x.dot(theta) - y)) * 2. / len(y)#梯度下降法训练def fit_gd(self, x_trains, y_trains):x_b = np.hstack([np.ones([len(x_trains), 1]), x_trains])theta = np.zeros(x_b.shape[1])e = 1e-8n = 0.01num = 100000while num >= 0:last_theta = thetatheta = theta - n * self.dJ(theta, x_b, y_trains)if abs(self.J(theta, x_b, y_trains) - self.J(last_theta, x_b, y_trains)) < e:breaknum -= 1self.theta_ = thetaself.coef_ = theta[0]self.interception_ = theta[1:]return self

注意事项

梯度下降法是很依赖数据的归一性的,所以使用梯度下架法的时候,必须要对数据做数值归一化

不过公式法就没有这样的问题,因为公式法求解过程并不考虑数值的单位,所以也对最后结果没有太大影响

优势

从注意事项看的话,貌似梯度下架法比公式法更没有优势,一条公式求解出来的参数,还有一个个去尝试,不过在数据的特征值很大的时候,梯度下降法的优势就出来了

公式法

梯度下降法

时间差了快6倍,而在我们日常的数据处理的时候,特征值往往是一个很大的数值,可能好几百,甚至好几千,所以日常中梯度下降法的使用率会高一些

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。