Regression 就是找到一个函数 functionfunction ,通过输入特征 xx,输出一个数值 ScalarScalar。
股市预测(Stock market forecast)
输入:过去10年股票的变动、新闻咨询、公司并购咨询等
输出:预测股市明天的平均值
自动驾驶(Self-driving Car)
输入:无人车上的各个sensor的数据,例如路况、测出的车距等
输出:方向盘的角度
商品推荐(Recommendation)
输入:商品A的特性,商品B的特性
输出:购买商品B的可能性
Pokemon精灵攻击力预测(Combat Power of a pokemon):
输入:进化前的CP值、物种(Bulbasaur)、血量(HP)、重量(Weight)、高度(Height)
输出:进化后的CP值
step1:模型假设,选择模型框架(线性模型)
step2:模型评估,如何判断众多模型的好坏(损失函数)
step3:模型优化,如何筛选最优的模型(梯度下降)
使用损失函数(Loss function)
来衡量模型的好坏,即求【进化后的CP值】与【模型预测的CP值】差(从数学的角度来讲,是使用距离)。统计10组原始数据(真实值和预测后的数据之差的平方)的和,和越小模型越好。
推导公式如下:
推导图示:
我们将 w, b 在二维坐标图中展示,如图所示:
图中每一个点代表着一个模型对应的 w 和 b
颜色越深代表模型更优
可以与后面的等高线图
进行对比
步骤1
:随机选取一个 w0
步骤2
:计算微分,也就是当前的斜率,根据斜率来判定移动的方向
小于0向右移动(增加w)
大于0向左移动(减少w)
步骤3
:根据学习率移动 重复步骤2和步骤3,直到找到最低点
单参数 w 的情况:
多参数 w,b 的情况:
w和b偏微分的计算方法
- 每一条线围成的圈就是等高线,代表损失函数的值,颜色约深的区域代表的损失函数越小
- 红色的箭头代表等高线的法线方向
- 沿着红色箭头更新参数
使用训练集和测试集的平均误差来验证模型的好坏
我们使用将10组原始数据,训练集求得平均误差为31.9,如图所示:
然后再使用10组Pokemons测试模型,测试集求得平均误差为35.0 如图所示:
由上图可知,训练集的误差值小于预测值的误差值,这是因为,模型本来就是根据训练集选取的。
要想再减少误差值,需要重新定义模型:
在模型上,我们再可以进一部优化,使用更高次方的模型,如图所示
由上面的图可知:
可知,测试集的平均误差并没有随着训练集平均误差的减小而减小,反而减小到一定值后增大,这就是过拟合问题。
但是,对于训练数据来说:
每一个模型结果都是一个集合,5次模型⊇4次模型⊇3次模型,所以在4次模型里面找到的最佳模型,肯定不会比5次模型里面找到更差。
简单来说函数空间就是:满足给定条件的函数的集合(这里的空间是数学中的Space含义,并未物理意义上的空间,时间这种概念的空间);但更准确的,空间的概念是在集合上的更进一步,定义了元素的一些运算。
比如:要求拟合的函数形式是 y=ax^2 +bx+c,a b c 为实数 (这就定义了一个函数空间), 那么y =3x^2+ 2x+1, y=0x^2+0x+3=3, y=0x^2+5x+0=5x 这样这些函数都满足这个条件,由所有满足给定条件的函数组成的集合就是这个函数空间,再比如这个例子里 y=2x^3+1就不属于这个函数空间(不满足定义的形式)。
由上面的左图可知:输入更多Pokemons数据,相同的起始CP值,但进化后的CP差距竟然是2倍。
由上面的右图可知:其实将Pokemons种类通过颜色区分,就会发现Pokemons种类是隐藏得比较深得特征,不同Pokemons种类影响了进化后的CP值的结果。
Step1优化:2个input的四个线性模型是合并到一个线性模型中
Step2优化:如果希望模型更强大表现更好(更多参数,更多input)
Step3优化:加入正则化
将有两个输入的四个线性模型合并到一个线性模型中:
此时,训练测试后的结果如图所示:
由上图可知:误差更小,效果更好。
如果还想让模型更强大,可以考虑更多的参数,更多的输入。
在最开始我们有很多特征,图形化分析特征,将血量(HP)、重量(Weight)、高度(Height)也加入到模型中:
由上图可知:更多特征,更多input,数据量没有明显增加,仍旧导致overfitting。
更多特征,但是权重 w 可能会使某些特征权值过高,仍旧导致overfitting,所以加入正则化。
上图中的红框里面没有加b是因为,正则化中一般不考虑bias,因为我们预期的是想要一个平滑的function,而b的大小和function的平滑程度没有关系,调整b时只能使function上下移动。
由上图可知:在很多应用场景中,并不是 w 越小模型越平滑越好,但是经验值告诉我们 w 越小大部分情况下都是好的。