【深度学习学习笔记】2.线性回归之一:最小二乘实现模型优化
2020-07-28 20:54
316 查看
用最小二乘法进行模型优化。
原理:
最小二乘法即使经验风险最小化。
用平方损失函数衡量真实标签和预测标签的差异,经验风险函数R(x)=12∣∣y−XTw∣∣2R(x)=\frac{1}{2}||y-X^Tw||^2R(x)=21∣∣y−XTw∣∣2,yyy是真实标签,XTwX^TwXTw得到预测值。其对w的偏导数为∂R(w)∂w=−X(y−XTw)\frac{∂R(w)}{∂w}=−X(y − X^Tw)∂w∂R(w)=−X(y−XTw)。令
∂R(w)∂w=0\frac{∂R(w)}{∂w}=0∂w∂R(w)=0得到最优的参数为w∗=(XXT)−1Xyw^*=(XX^T)^{-1}Xyw∗=(XXT)−1Xy
特征矩阵X,标签y
数据集下载
参数优化公式:
w∗=(XXT)−1Xyw^*=(XX^T)^{-1}Xyw∗=(XXT)−1Xy
代码
import numpy as np import matplotlib.pyplot as plt
def readdata(filename): # filename = './train.txt' with open(filename, "r") as f: # 打开文件 data = f.readlines() # 读取文 X = [] Y = [] for line in data: list = line.split() X.append(float(list[0])) Y.append(float(list[1])) X = np.array(X) Y = np.array(Y) return X, Y
最小二乘法核心代码
def Leastsq(X, Y): # w∗ = (X·X转置)逆· X· y, # 其中X矩阵是n个样本点矩阵下面新增一行1 array_1 = np.ones(len(X)) X = np.vstack((X.T, array_1.T)) w = np.dot(np.dot(np.linalg.inv(np.dot(X, X.T)), X), Y) return w
def main(X,Y): # train_file = './train.txt' # X, Y = readdata(train_file) w = Leastsq(X, Y) k = w[0] b = w[1] def f(x): y = k * x + b return y return f
def evaluate(ys, ys_pred): """评估模型。""" std = np.sqrt(np.mean(np.abs(ys - ys_pred) ** 2)) return std
# 程序主入口(建议不要改动以下函数的接口) if __name__ == '__main__': train_file = 'train.txt' test_file = 'test.txt' # 载入数据 x_train, y_train = readdata(train_file) x_test, y_test = readdata(test_file) print(x_train.shape) print(x_test.shape) # 使用线性回归训练模型,返回一个函数f()使得y = f(x) f = main(x_train, y_train) y_train_pred = f(x_train) std = evaluate(y_train, y_train_pred) print('训练集预测值与真实值的标准差:{:.1f}'.format(std)) # 计算预测的输出值 y_test_pred = f(x_test) # 使用测试集评估模型 std = evaluate(y_test, y_test_pred) print('预测值与真实值的标准差:{:.1f}'.format(std))
结果可视化
plt.plot(x_train, y_train, 'ro', markersize=3) plt.plot(x_test, y_test) plt.plot(x_test, y_test_pred, 'k') plt.xlabel('x') plt.ylabel('y') plt.title('Linear Regression') plt.legend(['train', 'test', 'pred']) plt.show()
运行结果:
(300,)
(200,)
训练集预测值与真实值的标准差:2.0
预测值与真实值的标准差:2.2
相关文章推荐
- 【深度学习学习笔记】2.线性回归之三:用随机梯度下降优化模型
- 【动手学深度学习pytorch版笔记NO.3】3.2 线性回归的从零开始实现
- 【动手学深度学习pytorch版笔记NO.4】3.3 线性回归的简洁实现
- 4.2 模型之母:简单线性回归的代码实现学习笔记
- 【深度学习学习笔记】2.线性回归之二:不同基函数的实现
- scikit-learn学习笔记:1.1 广义线性模型-普通的最小二乘(Ordinary Least Squares)
- ElitesAI·动手学深度学习PyTorch版学习笔记-线性回归;Softmax与分类模型、多层感知机
- 机器学习入门学习笔记:(2.2)线性回归python程序实现
- Coursera deeplearning.ai 深度学习笔记4-2-Deep Convolutional Models Case Studies-深度卷积模型案例及代码实现
- ESL3.5 学习笔记(主成分回归,偏最小二乘回归步骤详解)
- TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络
- 使用 Numpy 手动实现深度学习 -- 线性回归
- 深度学习基础模型算法原理及编程实现--02.线性单元
- 机器学习笔记——4 广义线性模型的基本思想和各个常用的回归特例(附logistic模型的python实现)
- 动手学深度学习Task01-Task02:线性回归;Softmax与分类模型;多层感知机;文本预处理;语言模型;循环神经网络
- 【动手学深度学习pytorch版笔记NO.2】3.1线性回归
- Ng深度学习笔记 1-线性回归、监督学习、成本函数、梯度下降
- TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络
- 吴恩达老师深度学习视频课笔记:逻辑回归公式推导及C++实现
- 人工智能算法学习笔记(三)——线性模型之逻辑回归