什么是目标函数?
定义是:指所关心的目标与相关的因素的函数关系。举个例子,假如我们想要预测公司楼下手抓饼店明天能卖多少张手抓饼,已知过去10天每天卖多少,以及每天的天气情况,是否有节假日,和手抓饼店老板和老板娘的感情状况,这几项数据都统计好了。对应到目标函数的解释就是:
- 关心的目标是明天能卖多少手抓饼,未知量。
- 相关因素是每天数量,天气情况,节假日,老板老板娘感情状况,已知量。
- 目标函数:按照一定的思路把这些已知条件利用起来,去求解未知量的函数关系式。
损失函数
也叫代价函数,是同一个东西。是用来评估模型的预测值f(x)与真实值Y的差距,它是一个非负实值函数。稍等一下,为什么是非负的呢?举个例子:比如上面说的手抓饼,模型预测第一天是30,真实值是29,差距30-29是1;预测第二天是35,真实值是36,差距35-36是-1;如果把它们直接加起来就是1-1 = 0,难到没有差距?非常明显是错误的,差距是0人家还以为都预测对了呢,其实都预测错了,所以不能有负值,可以用绝对值,平方或者一些其它的数学运算。
常用的损失函数有:
- LR逻辑回归:log对数损失函数 参考:https://xiaozhuanlan.com/topic/7491865230
- 最小二乘法:平方损失函数 参考: https://xiaozhuanlan.com/topic/3129560874
- Adaboost:指数损失函数 (后面会专门介绍这个算法)
好的,现在我们再来看一下目标函数通常的定义形式:
Obj(Θ)=L(Θ)+Ω(Θ)
中文翻译一下是 :
目标函数 = 损失函数 + 正则项
目标函数和损失函数我们都理解了,那么正则项是干什么的呢?
正则化
回到我们前面举的那个例子,如果第五天有个人中彩票了然后兴奋的来买了1百张手抓饼,比几天的量都多,很明显这个情况会影响我们的模型训练,这个情况就是过拟合。而加入正则项的目的就是使模型避免过拟合。
常用的有L1,L2正则化,很熟悉对不对,前面讲过的线性代数中的L1,L2范数有些类似。其实本质是一样的,在机器学习里叫正则化,线性代数叫范数,统计学里叫惩罚项。
机器学习里:L1使用的是绝对值距离,也叫曼哈顿距离,L2使用的是平方距离,也叫做欧式(Euclidean)距离
线性代数:L1 范数计算的是向量所有元素绝对值的和,L2 范数计算的是通常意义上的向量长度 参考:
https://xiaozhuanlan.com/topic/4961780352
总结:
介绍了目标函数,损失函数和正则项的作用,优化损失函数使模型避免欠拟合使损失函数最小化,优化正则项使模型避免过拟合。