深度学习(1)线性回归模型
1. 线性回归模型

x称为特征,y称为标签,就是你通过特征来预测标签
打个比方一个人,一年能挣一百万,你的学历,工作经验,父母的关系等特征,来体现这个人一年能挣多少钱
模型本质上就是预测,通过你的学历,国家,性别,工作经验等元素,来预测你的收入是多少,但是每个x特征所影响的占比是不同的,比如说学历影响肯定大一些,性别影响肯定小一些,所以我们用W1X1+W2X2+.....+WnXn来表达,w就是这个x特征所对应的权重
b称为偏置,是用来平衡我们最后输出的值,比如说你的特征x全都为0,没读过书,没有工作经验等,那么你的收入就是0吗,显然不可能,一定是有一个基本工资的。
因此,模型好不好就取决于w和b

求解线性回归模型,就是求解w,b
那么在我们的现实生活中,数据集的值不可能都恰好在一条直线上,因为数据一定都是有误差的,有损失的,所以我们要找一组(w,b)使得在直角坐标系中,所有的数据距离这条直线最近,也就是误差最小,损失最小,那么这组(w,b)就是最成功的,那么我们就可以预测

1.穷举法

理论上讲,是可以帮助我们找到合理的w和b,但是在实际的角度来讲,随着w和b的增加,求解的维度也在不断的增加,所以不现实,这时候就可以用最小二乘法
2.最小二乘法

f(x)是我们的线性模型,y是对应的真实值(标签),其实我们会发现,它其实就是二次函数,二次函数天然带有最值

因为w是变量,所以对w进行求导,得出相应的值或者关系,比如这里的w=y/x,再用穷举法去试,很快就能得出答案。
那么如果有多个w1,w2...呢?那就对w1,w2分别求偏导数



2.梯度下降法
最小二乘法并不适用所有的场景,因为在求解的时候涉及到可逆矩阵,但是不是所有矩阵都是可逆的,所以会导致最小二乘法出现无解的情况。
因此我们使用梯度下降法来求解,梯度下降法在线性回归、逻辑回归、深度学习都使用到了,很重要。

梯度就是导数,就是曲线的切线,以右半边为例,切线方向是朝上的,所以我们加上负号-,让它往下走,a指的就是步幅,a不能太大,我们要慢慢靠近最低点,不然一下子就越过了最低点,直接到了左半边的坡上了,然后就会导致,w一直在左右坡上反复横跳,但也不能太少,会导致下降的特别慢,消耗资源和时间。

参数多了也一样求偏导数

例如


1.模拟代码
# 定义数据集
# 定义数据特征
x_data = [1,2,3]
# 定义数据标签
y_data = [2,4,6]
# 初始化参数W
w = 4
# 定义线性回归模型
def forword(x):
return x * w
# 定义损失函数
def cost(xs,ys):
costValue = 0
for(x,y) in zip(xs,ys):
y_pred = forword(x)
costValue = costValue + (y_pred - y)**2
return costValue / len(xs)
# 定义计算梯度的函数
def gradient(xs,ys):
grad = 0
for(x,y) in zip(xs,ys):
grad = 2 * x * (x*w -y)
return grad / len(xs)
for epoch in range(100):
cost_val = cost(x_data,y_data)
grad_val = gradient(x_data,y_data)
w = w - 0.01 * grad_val
print("训练的轮次:",epoch,"w=",w,"loss",cost_val)
更多推荐
所有评论(0)