第1.2章:线性回归(Linear Regression)_参数的求解

第1.2章:线性回归参数的求解来源本章视频视频06:线性回归算法原理推导视频07:线性回归参数的求解(求函数最小值)1.正规方程法2.梯度下降法梯度下降背后的思想梯度下降的迭代方法1.代数法2.矩阵法3.几点补充梯度下降的参数选取1.初始参数2.学习率(步长)3.特征缩放4.终止条件5.其他模型转化为线性模型3.梯度下降法家族批量梯度下降随机梯度下降小批量梯度下降文中xix_{i}xi​表示第...
摘要由CSDN通过智能技术生成

简述一下线性回归流程:首先可以进行数据的预处理,包括但不限于:缺失值处理、线性相关的特征值处理、误差较大的脏数据处理。然后搭建一个线性回归模型,运用梯度下降或者正规方程法可以求出参数,这样模型就确定了。之后再用一些检测方法,评估模型是否合理并进行针对性的优化。

文中 y ^ \hat{y} y^为预测值, y ( i ) y^{(i)} y(i)为实际值, x i x_{i} xi表示第 i i i个变量(特征), x ( i ) x^{(i)} x(i)表示第 i i i组数据(样本),同理 x n ( m ) x_{n}^{(m)} xn(m)表示第m个样本的第n个特征

来源

Lecture_01

本章视频

06_线性回归算法原理推导、07_线性回归参数的求解

一、线性回归算法原理推导

二、线性回归参数的求解(求函数最小值)

1.正规方程法

  • 将目标函数(04)转化为矩阵形式可以简化推导过程,有利于代码实现: J ( θ ) = 1 2 ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 = 1 2 ( X θ − Y ) T ( X θ − Y )           ( 06 ) J(\theta)=\frac{1}{2} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}=\frac{1}{2}(X \theta-Y)^{T}(X \theta-Y)      (06) J(θ)=21i=1m(hθ(x(i))y(i))2=21(XθY)T(XθY)     06 其中 X = [ x 0 ( 1 ) x 1 ( 1 ) ⋯ x n ( 1 ) x 0 ( 2 ) x 1 ( 2 ) ⋯ x n ( 2 ) ⋯ ⋯ ⋯ ⋯ x 0 ( m ) x 1 ( m ) ⋯ x n ( m ) ] = [ 1 x 1 ( 1 ) ⋯ x n ( 1 ) 1 x 1 ( 2 ) ⋯ x n ( 2 ) ⋯ ⋯ ⋯ ⋯ 1 x 1 ( m ) ⋯ x n ( m ) ] \mathbf{X} = \left[\begin{array}{cccc}{x_{0}^{(1)}} & {x_{1}^{(1)}} & {\cdots} & {x_{n}^{(1)}} \\ {x_{0}^{(2)}} & {x_{1}^{(2)}} & {\cdots} & {x_{n}^{(2)}} \\ {\cdots} & {\cdots} & {\cdots} & {\cdots} \\ {x_{0}^{(m)}} & {x_{1}^{(m)}} & {\cdots} & {x_{n}^{(m)}}\end{array}\right] = \left[\begin{array}{cccc}{1} & {x_{1}^{(1)}} & {\cdots} & {x_{n}^{(1)}} \\ {1} & {x_{1}^{(2)}} & {\cdots} & {x_{n}^{(2)}} \\ {\cdots} & {\cdots} & {\cdots} & {\cdots} \\ {1} & {x_{1}^{(m)}} & {\cdots} & {x_{n}^{(m)}}\end{array}\right] X=x0(1)x0(2)x0(m)x1(1)x1(2)x1(m)xn(1)xn(2)xn(m)=111x1(1)x1(2)x1(m)xn(1)xn(2)xn(m) θ = [ θ 0 θ 1 ⋯ θ n ] \theta=\left[\begin{array}{l}{\theta_{0}} \\ {\theta_{1}} \\ {\cdots} \\ {\theta_{n}}\end{array}\right] θ=θ0θ1

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
import numpy as np from sklearn import datasets from sklearn.linear_model import LinearRegression np.random.seed(10) class Newton(object): def init(self,epochs=50): self.W = None self.epochs = epochs def get_loss(self, X, y, W,b): """ 计算损失 0.5sum(y_pred-y)^2 input: X(2 dim np.array):特征 y(1 dim np.array):标签 W(2 dim np.array):线性回归模型权重矩阵 output:损失函数值 """ #print(np.dot(X,W)) loss = 0.5np.sum((y - np.dot(X,W)-b)2) return loss def first_derivative(self,X,y): """ 计算一阶导数g = (y_pred - y)*x input: X(2 dim np.array):特征 y(1 dim np.array):标签 W(2 dim np.array):线性回归模型权重矩阵 output:损失函数值 """ y_pred = np.dot(X,self.W) + self.b g = np.dot(X.T, np.array(y_pred - y)) g_b = np.mean(y_pred-y) return g,g_b def second_derivative(self,X,y): """ 计算二阶导数 Hij = sum(X.T[i]X.T[j]) input: X(2 dim np.array):特征 y(1 dim np.array):标签 output:损失函数值 """ H = np.zeros(shape=(X.shape[1],X.shape[1])) H = np.dot(X.T, X) H_b = 1 return H, H_b def fit(self, X, y): """ 线性回归 y = WX + b拟合,牛顿求解 input: X(2 dim np.array):特征 y(1 dim np.array):标签 output:拟合的线性回归 """ self.W = np.random.normal(size=(X.shape[1])) self.b = 0 for epoch in range(self.epochs): g,g_b = self.first_derivative(X,y) # 一阶导数 H,H_b = self.second_derivative(X,y) # 二阶导数 self.W = self.W - np.dot(np.linalg.pinv(H),g) self.b = self.b - 1/H_bg_b print("itration:{} ".format(epoch), "loss:{:.4f}".format( self.get_loss(X, y , self.W,self.b))) def predict(): """ 需要自己实现的代码 """ pass def normalize(x): return (x - np.min(x))/(np.max(x) - np.min(x)) if name == "main": np.random.seed(2) X = np.random.rand(100,5) y = np.sum(X3 + X**2,axis=1) print(X.shape, y.shape) # 归一化 X_norm = normalize(X) X_train = X_norm[:int(len(X_norm)*0.8)] X_test = X_norm[int(len(X_norm)*0.8):] y_train = y[:int(len(X_norm)0.8)] y_test = y[int(len(X_norm)0.8):] # 牛顿求解回归问题 newton=Newton() newton.fit(X_train, y_train) y_pred = newton.predict(X_test,y_test) print(0.5np.sum((y_test - y_pred)**2)) reg = LinearRegression().fit(X_train, y_train) y_pred = reg.predict(X_test) print(0.5np.sum((y_test - y_pred)**2)) ——修改代码中的问题,并补全缺失的代码,实现牛顿最优化算
06-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值