理论部分:
平常接触最多的就是回归分析了,统计学中的回归分析主要强调的是解释变量与被解释变量之间的相关关系,并在假设检验的基础上进行参数估计,往往重视这个方程是否显著,各个参数是否显著。机器学习中的回归有点不同,把解释变量看成是一种输入,被解释变量视为一种输出,更加强调找到最优函数,没有假设,而是用训练数据来提取信息,再由测试数据验证结果,哪个模型的平均残差小,就选择哪个模型。(个人的小小见解)
下面是我在学习过程中的笔记:(由于本人有点懒~~就直接把手写的扫描版搬上来啦)

实践部分:
此处,梯度下降法是用来解决回归中未知参数问题的。下面是有关梯度下降法的练习,我只是对一些不懂的地方进行了注释,原创请看如下链接。
https://datawhalechina.github.io/leeml-notes/#/chapter4/chapter4
'''
练习梯度下降法:
1)迭代过程
2)记录关键信息
2)画图:突显你的目标
如何展现梯度下降法:
预先给定参数范围与计算出损失函数,形成网格坐标,制定等高线;
运用梯度下降法的步骤描绘过程路径
问题:
不同参数的学习率,为什么要用偏微分后的结果确定?
'''
import numpy as np
import matplotlib.pyplot as plt
from pylab import mpl
plt.rcParams['font.sans-serif'] = ['Simhei'] # 显示中文
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
x_data = [338.,333.,328.,207.,226.,25.,179.,60.,208.,606.]
y_data = [640.,633.,619.,393.,428.,27.,193.,66.,226.,1591.]
#y_data = b + w*x_data
x_d = np.asarray(x_data)##将列表变为数组
y_d = np.asarray(y_data)
x = np.arange(-200, -100, 1)#x,y为随机设的参数值
y = np.arange(-5, 5, 0.1)
Z = np.zeros((len(x), len(y)))##返回给定形状的新数组,并用0填充
X, Y = np.meshgrid(x, y)##生成网格点坐标矩阵
# loss function
#用于确定不同位置的颜色,等高线是预先设定的
for i in range(len(x)):
for j in range(len(y)):
b = x[i]
w = y[j]
Z[j][i] = 0 # meshgrid吐出结果:y为行,x为列
for n in range(len(x_data)):
Z[j][i] += (y_data[n] - b - w * x_data[n]) ** 2
Z[j][i] /= len(x_data)
#先给b和w一个初始值,计算出b和w的偏微分
# linear regression
b = -120
w = -4
lr = 1
iteration = 100000
b_history = [b]
w_history = [w]
#将学习率分为两个
lr_b = 0
lr_w = 0
import time
start = time.time()
for i in range(iteration):
b_grad = 0.0
w_grad = 0.0
for n in range(len(x_data)):
b_grad = b_grad - 2.0 * (y_data[n] - n - w * x_data[n]) * 1.0
w_grad = w_grad - 2.0 * (y_data[n] - n - w * x_data[n]) * x_data[n]
#b,w有不同的learning rate
lr_b = lr_b + b_grad ** 2
lr_w = lr_w + w_grad ** 2
# update param
b -= lr / np.sqrt(lr_b) * b_grad
w -= lr / np.sqrt(lr_w) * w_grad
b_history.append(b)
w_history.append(w)
# plot the figure
plt.contourf(x, y, Z, 50, alpha=0.5, cmap=plt.get_cmap('jet')) # 填充等高线
plt.plot([-188.4], [2.67], 'x', ms=12, mew=3, color="orange")
plt.plot(b_history, w_history, 'o-', ms=3, lw=1.5, color='black')
plt.xlim(-200, -100)
plt.ylim(-5, 5)
plt.xlabel(r'$b$')
plt.ylabel(r'$w$')
plt.title("线性回归")
plt.show()版权声明:本文为weixin_55118952原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。