机器学习预测的不确定性
由于大多数算法的统计特性,机器学习存在固有的不确定性。这种不确定性的来源之一是不正确的标签,这是由于数据错误或难以确定正确标签的情况。例如,在回归类型的问题中,我们可以将我们的预测建模为:
这里ε是目标中固有的不确定性。假设它遵循正态分布,我们可以将这情况的贡献写入到似然函数中:
这里我们假设为简单线性回归
似然函数是这些值的乘积,似然函数的负对数给出了成本函数:
奇怪的是,不确定性信息已经从成本函数中消失了。这是非常常见的最大后验方法。为了利用数据估计不确定性程度,我们必须使用更强大的方法,如贝叶斯线性回归。
现在时假设所有情况的不确定性σ都相同。如果不是这样的话怎么办?给数据集打上标签的人可以表示他对给定的示例不确定。例如,鉴于其评级,给定债券的收益率异常低,但是却有异常高的交易量,这使得贴标人怀疑存在错误。对于计算机视觉问题,可能有人在给定的mnist示例中很难区分1和7。
一种非常常见的方法是删除这些记录。但是,如果我们想要使用这些信息,不要太信任它。
在线性回归机器学习模型的情况下,我们可以通过增加σ来指示不确定性增加 。为方便起见,我们将指数乘以精度τ:
τ为1表示信任的常规水平,而τ的较低值表示增加的不确定性。为了证明这一点,让我们绘制两条曲线。
%matplotlib inline import numpy as np import matplotlib.pyplot as plt def linreg_likelihood(x, y, theta, sigma, tau): return np.exp(-(y-theta*x)**2 * tau/2/sigma**2)/np.sqrt(2*np.pi*sigma**2/tau) fig, ax = plt.subplots(1, 1) y = np.linspace(1, 10, 100) ax.plot(y, linreg_likelihood(5,y,1,0.5,1), 'r-', lw=1, alpha=1, label='Reg. Uncertainty') ax.plot(y, linreg_likelihood(5,y,1,0.5,0.3), 'b-', lw=1, alpha=1, label='High Uncertainty') plt.legend();
我们发现不确定性较高的例子会导致更广泛的分布,因为我们不确定目标值。如果我们把这个反馈给成本函数,我们会得到一个修正的成本函数:
这里τ(i)是第i个实例的相对精度。实际上,它们中的大多数将是1,但是贴标者可以降低τ(i)的一些可疑的数据集的例子。
拥有不寻常的损失函数应该不是问题,因为像TensorFlow这样的框架提供了梯度的自动计算。
二元分类的不确定性
对于机器学习中的二元分类问题,我们必须使用伯努利分布而不是正态分布。
其中ρ是分布的参数,k∈0,1
由于分布只有一个参数,因此无法在不改变均值的情况下更改方差。也没有明显的方法通过增加方差来指示不确定性。
我们将根据贝叶斯概率概念推导出这个方程。在我们的例子中,k是观察到的结果,而真正的目标值t可能不同于k,我们可以用另一个伯努利分布来形式化它:
这里δ是Kronecker符号,a∈[0.5,1]是不确定度。如果a = 1,我们绝对确定标签。a = 0.5也是一种极端情况(当我们说我们根本不信任标签时)。
那么给出ρ和a的观测值的概率是:
在这里,我们使用贝叶斯规则(忽视未知真实标签值)。
在相对简单的计算之后,我们得出修正的伯努利分布公式:
其中
例如,在二元逻辑回归问题中,您将用sigmoid函数替换ρ:
并遵循梯度下降法的常规程序。成本函数如下:
这是通常的交叉熵,除了ρ~基于不确定性进行校正
多类分类的不确定性
将机器学习二元分类推广到机器学习多类分类中是非常容易的。用分类分布代替伯努利分布
在这种情况下,对于不确定类的每次观察,我们都可以定义值ac,这是该示例属于c类的概率。我们得到更新的值ρ~:
在这种情况下,ρ应使用softmax函数而不是逻辑函数建模。
一个例子可能是mnist数据集,对于给定的情况,数字看起来像1或7.在这种情况下,你将a1和a7设置为1/2,其余的设置为0。在这种情况下,您的成本函数在预测为1或7时不会受到惩罚,但在其他数字被错误预测时会受到惩罚。
结论
这一切都意味着,如果您怀疑某些数据,则不必丢弃它们,而是估计不确定度并将其包含在算法中。确实,您最终拥有自定义成本函数,但这可以通过使用TensorFlow等自动计算渐变的框架轻松解决。
您也可以使用此方法来解决异常值。我们都知道,他们可以相当显著地影响回归和分类结果。相反,如果您认为可能存在数据错误,则可以为它们分配较低的权重。