数据挖掘算法基础—损失函数的说明
1.关于损失函数的说明
损失函数是数据挖掘优化的基础,基本上对损失函数求个偏导,也就是我们说的梯度,就是优化目标函数的方法,据此我们可以得到最优参数。
损失函数分两种,一种是回归问题损失函数,以平方损失、绝对值损失为主,另外一种是分类问题的损失函数,以指数函数和对数函数为主。
损失函数的本质是什么呢,如果预测对了不惩罚,如果预测错了损失函数要取一个很大的值。
2.回归问题损失函数
这种损失函数好理解,比如说我和我室友一个29、一个24、一个25,现在看我们三个住一起,大概是同龄人,又看我长相偏年轻,预测我们26岁,那么损失可以按平方算就是14,可以按绝对值算是6,还可以按其他很多方法算,就是比较简单。
2.1 方差损失函数
平方损失函数的标准形式为:
这个函数是最常用的损失函数形式,不仅在回归问题,在分类问题上也有应用,比如说gbdt,就是使用的平方损失作为损失函数。
2.2 绝对值损失函数
绝对值损失函数的标准形式为:
这个也是我们通常所说的L1损失,这个函数使用过程中的不方便之处在于他的导数时不连续的,会给求解造成一定的难度。但是由于这个损失函数考虑的是绝对损失,所以它对异常值会有更好的处理效果。
一般情况下,在回归问题我们会选方差损失函数,因为它的求导更简单一些。
2.3 Huber损失函数
Huber损失函数是一种比较麻烦的损失函数,基本形式如下:
Huber损失形式
这个函数主要是对绝对值函数的一个补充,在绝对误差相对较少的时候就变成平方损失函数,结合了绝对值损失和平方损失的优点,在必要时候可以用一下。
这个函数使用的时候要注意参数的选择,就是控制两种损失函数用哪种。
2.4 Log-cosh损失函数
其实大部分情况下到前边就已经结束了,这里的损失函数实际使用的少之又少。
简单介绍下
log-cosh函数形式
这个函数好是好,但是求导数和二阶导比较麻烦。
2.5 分位数损失函数
分位数损失函数是对绝对值损失函数的一种拓展,控制着对超过真实值或者小于真实值的惩罚程度,代码如下:
分位数损失函数
3.分类问题损失函数
3.1 对数损失函数
首先来一个对数损失函数的标准形式:
解释一下这个的数学意义P(Y|X)代表在特定观测数据X下,取得目标函数值Y的概率,我们要据此估计参数,即在什么参数下才最有可能获得当前的观测数据,然后这就是似然估计,取负数就变成损失函数了。
最典型的应用逻辑回归:
其中,N就是说批量损失的均值,后边那个就是似然函数对数的展开,本来是求最大似然,转换为求最小损失就加个负号,正好对上。然后优化就是对它求偏导,优化参数。
这里的y就是(0,1)不必考虑(-1,1)情况,要不然损失函数不成立。
这里有一个补充,我要是非要用(-1,1)作为类别标志呢,其实这个就是FM模型里的数据格式。对数损失函数变为另外一个模式,基本形式是这样的:
标签为-1和1时对数损失函数形式
然后取-log(P)。这里的P是概率也就是根据概率判断最终的预测值取-1还是1,阈值需要自己调,准确的说不是损失函数,因此在梯度下降的时候,这个数可能变大, 也可能变小,需要注意。
3.2 指数损失函数
指数损失函数的标准形式是:
指数损失函数主要用于boosting算法中,这就是集成算法,最典型的Adaboost算法,为什么要用指数损失,纯粹是为了计算的方便。具体可以参考这篇文章,写得很清楚adaboost推导。
从数学角度看这个损失函数,当y和预测值f(x)相同的时候,这个数最小,当y和预测值f(x)相反的时候,这个值最大,所以,用它做损失函数很合适。
指数函数更适合将目标函数值设置为(1,-1)而不是(0,1)。
3.3 0-1损失函数
0-1损失函数最好理解的损失函数,没有之一,一般都是用于分类问题。
指数损失函数的形式为:
0-1损失函数不管你预测差多少,差1也是错误,差100也是错误。实际使用的并不多,感知机用的就是这种损失函数。
3.4 Hinge损失函数
Hinge损失函数的形式为:
这个函数通常用于最大分隔的分类问题,分类目标y也表示为(-1,1)。最典型的应用就是支持向量机了。
具体可以参考带软间隔的支持向量机目标函数性质。