机器学习中几种损失函数的分析

在机器学习中,损失函数是非常重要的,用于衡量目标结果的好坏,用于训练模型,损失函数就是目标函数了。常见的损失函数有以下几种:


1.‘0/1损失函数’

f(z)=1, 如果z是小于零的,其他就等于0.

性质:不是凸函数,不是连续的函数,数学性质不是非常好,一般用于感知机算法,感知机算法的损失函数就是这个。为了克服这个函数不连续,不是凸函数的问题,出现了其他几种可以替代的函数


2.hinge损失函数

f(z) = max(0, 1-z)

典型的应用就是支持向量机的损失函数就是这个。


3.指数损失函数

f(z)=exp(-z)


4.对数损失函数

f(z)=log(1+exp(-z))


5.平方损失函数

f(z)=(z-1)^2


代码:

import numpy as np;
import matplotlib.pyplot as plt;

x = np.linspace(-2, 2, 300)

hinge_loss_function = []
for i in (1-x):
	if i > 0:
		hinge_loss_function.append(i)
	else:
		hinge_loss_function.append(0)
exponential_loss_function = np.exp(-x)
logistic_loss_function = np.log(1+np.exp(-x))/np.log(2)

l0_1_loss_function = []
for j in x:
	if j < 0:
		l0_1_loss_function.append(1)
	else:
		l0_1_loss_function.append(0)

pingfang_loss_function = (x-1) ** 2

plt.plot(x, hinge_loss_function, 'r-')
plt.plot(x, exponential_loss_function, 'b-')
plt.plot(x, logistic_loss_function, 'g-')
plt.plot(x, l0_1_loss_function, 'k-')
plt.plot(x, pingfang_loss_function, 'c-')
plt.legend(['hinge_loss_function', 'exponential_loss_function', 'logistic_loss_function', 'l0_1_loss_function', 'pingfang_loss_function'])
plt.show()

结果:

机器学习中几种损失函数的分析_第1张图片


分析:

0/1损失函数是最理想的损失函数,如果分类错误(只要有一个错误)就是1,全部正确就是0。不过这个函数有凸函数,不连续等性质,在实际应用中很难实现,所以才有了几种替代的损失函数,他们都是连续,凸函数。其他的三个损失函数的0/1损失函数的上界,如果可以让其他的三个损失函数比较小,也就可以近似的让0/1损失函数比较小。hinge损失函数只要分类正确就不在要求,而其他的另个函数即使分类正确,也要追求更加正确,也就是说,如果你考60分几个,hinge损失函数知道你得到60分就满意。但是另外两个就不会满足于此,还会继续让你考80分,就是继续让你超更加好的方面更新,所以hinge损失函数是及格就好。要是不断追求完美,这就会容易导致过拟合。这几个函数的更新速度就是在分类效果差的时候,指数下降最快,慢慢变得分类效果好的时候,就是hinge下降最快。不过平方误差函数分类很正确和分类错误很严重都会导致很大的误差,模型会出问题,所以在分类的时候不用这个函数,只有在拟合的时候用这个损失函数。


你可能感兴趣的:(机器学习--ML)