# 风险和损失最小化
> 原文:[https://www.textbook.ds100.org/ch/15/bias_risk.html](https://www.textbook.ds100.org/ch/15/bias_risk.html)
```
# HIDDEN
# Clear previously defined variables
%reset -f
# Set directory for data loading to work properly
import os
os.chdir(os.path.expanduser('~/notebooks/15'))
```
```
# HIDDEN
import warnings
# Ignore numpy dtype warnings. These warnings are caused by an interaction
# between numpy and Cython and can be safely ignored.
# Reference: https://stackoverflow.com/a/40846742
warnings.filterwarnings("ignore", message="numpy.dtype size changed")
warnings.filterwarnings("ignore", message="numpy.ufunc size changed")
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
%matplotlib inline
import ipywidgets as widgets
from ipywidgets import interact, interactive, fixed, interact_manual
import nbinteract as nbi
sns.set()
sns.set_context('talk')
np.set_printoptions(threshold=20, precision=2, suppress=True)
pd.options.display.max_rows = 7
pd.options.display.max_columns = 8
pd.set_option('precision', 2)
# This option stops scientific notation for pandas
# pd.set_option('display.float_format', '{:.2f}'.format)
```
```
# HIDDEN
def df_interact(df, nrows=7, ncols=7):
'''
Outputs sliders that show rows and columns of df
'''
def peek(row=0, col=0):
return df.iloc[row:row + nrows, col:col + ncols]
if len(df.columns) <= ncols:
interact(peek, row=(0, len(df) - nrows, nrows), col=fixed(0))
else:
interact(peek,
row=(0, len(df) - nrows, nrows),
col=(0, len(df.columns) - ncols))
print('({} rows, {} columns) total'.format(df.shape[0], df.shape[1]))
```
为了使用数据进行预测,我们定义了一个模型,在整个数据集中选择一个损失函数,并通过最小化损失来拟合模型的参数。例如,为了进行最小二乘线性回归,我们选择模型:
$$ \begin{aligned} f_\hat{\theta} (x) &= \hat{\theta} \cdot x \end{aligned} $$
损失函数:
$$ \begin{aligned} L(\hat{\theta}, X, y) &= \frac{1}{n} \sum_{i}(y_i - f_\hat{\theta} (X_i))^2\\ \end{aligned} $$
和以前一样,我们使用$\hat \theta$作为模型参数的向量,$x$作为包含一行数据矩阵的向量,$x$和$y$作为观测值的向量进行预测。$X$I$是$X$的第$I$行,$Y$I$是 Y 的第$I$项。
注意,我们在数据集中丢失的函数是每行数据的丢失函数值的平均值。如果我们定义平方损失函数:
$$ \begin{aligned} \ell(y_i, f_\hat{\theta} (x)) &= (y_i - f_\hat{\theta} (x))^2 \end{aligned} $$
然后我们可以更简单地重写平均损失函数:
$$ \begin{aligned} L(\hat{\theta}, X, y) &= \frac{1}{n} \sum_{i} \ell(y_i, f_\hat{\theta} (X_i)) \end{aligned} $$
上面的表达式抽象了特定的损失函数;不管我们选择什么损失函数,我们的整体损失都是平均损失。
通过最小化平均损失,我们选择最适合我们观测数据集的模型参数。到目前为止,我们已经避免对生成数据集的总体进行陈述。然而,在现实中,我们非常有兴趣对整个人口做出良好的预测,而不仅仅是我们已经看到的数据。
## 风险[¶](#Risk)
如果我们的观测数据集$X$和$Y$是从给定的人群中随机抽取的,那么我们的观测数据就是随机变量。如果我们观察到的数据是随机变量,我们的模型参数也是随机变量,每次我们收集一组新的数据并拟合一个模型时,模型$f_ \hat \theta(x)$的参数将略有不同。
假设我们从人群中随机抽取一对输入输出对$Z、\gamma$。我们的模型在这个值上产生的损失是:
$$ \begin{aligned} \ell(\gamma, f_\hat{\theta} (z)) \end{aligned} $$
请注意,这个损失是一个随机变量;不同的观测数据集$X$和$Y$以及来自我们的人口的不同点$Z、\gamma$的损失都会发生变化。
模型$F \Theta 的**风险**是上述所有训练数据$X$、$Y$和所有点$Z$、$Gamma$在人群中的预期损失值:
$$ \begin{aligned} R(f_\hat{\theta}(x)) = \mathbb{E}[ \ell(\gamma, f_\hat{\theta} (z)) ] \end{aligned} $$
请注意,风险是对随机变量的期望,因此 _ 不是 _ 随机本身。公平的六面模具辊的预期值为 3.5,即使辊本身是随机的。
上面的风险有时被称为**真正的风险**,因为它说明了一个模型在整个人群中的作用。如果我们能够计算出所有模型的真实风险,我们就可以简单地选择风险最小的模型,并确定在我们选择损失函数时,模型的长期性能将优于所有其他模型。
## 经验风险
然而,现实并非如此善良。如果我们将期望的定义代入真实风险的公式,我们得到:
$$ \begin{aligned} R(f_\hat{\theta}) &= \mathbb{E}[ \ell(\gamma, f_\hat{\theta} (z)) ] \\ &= \sum_\gamma \sum_z \ell(\gamma, f_\hat{\theta} (z)) P(\gamma, z) \\ \end{aligned} $$
为了进一步简化这个表达式,我们需要知道$P(\gamma,z)$,观察人口中任何点的全局概率分布。不幸的是,这并不容易。假设我们正试图根据表的大小预测提示量。一张三人桌给 14.50 美元小费的概率是多少?如果我们准确地知道点的分布,我们就不必收集数据或拟合模型,我们就已经知道任何给定表的最大可能提示量。
虽然我们不知道人口的确切分布,但是我们可以使用观测数据集$X$和$Y$来近似它。如果从我们的人口中随机抽取$X$和$Y$点,则$X$和$Y$点的分布与人口分布类似。因此,我们将 x 美元和 y 美元视为我们的人口。然后,任何输入输出对$x_i$,$y_i$出现的概率是$\frac 1 n,因为每对输入输出对在$n$积分总数中出现一次。
这允许我们计算**经验风险**,这是真实风险的近似值:
$$ \begin{aligned} \hat R(f_\hat{\theta}) &= \mathbb{E}[ \ell(y_i, f_\hat{\theta} (X_i)) ] \\ &= \sum_{i=1}^n \ell(y_i, f_\hat{\theta} (X_i)) \frac{1}{n} \\ &= \frac{1}{n} \sum_{i=1}^n \ell(y_i, f_\hat{\theta} (X_i)) \end{aligned} $$
如果我们的数据集很大,并且数据是随机从人群中提取的,那么经验风险$\hat R(f \theta)$接近真实风险$R(f \hat \theta)$。这使我们能够选择最小化经验风险的模型。
请注意,此表达式是节开头的平均损失函数!通过最小化平均损失,我们也可以最小化经验风险。这解释了为什么我们经常使用平均损失作为我们的整体损失函数,而不是最大损失,例如。
## 摘要[¶](#Summary)
预测模型的真实风险描述了模型将为人口带来的总体长期损失。由于我们通常不能直接计算真实风险,因此我们计算的是经验风险,并使用经验风险找到一个合适的预测模型。由于经验风险是观测数据集上的平均损失,因此在拟合模型时,我们通常将平均损失最小化。
- 一、数据科学的生命周期
- 二、数据生成
- 三、处理表格数据
- 四、数据清理
- 五、探索性数据分析
- 六、数据可视化
- Web 技术
- 超文本传输协议
- 处理文本
- python 字符串方法
- 正则表达式
- regex 和 python
- 关系数据库和 SQL
- 关系模型
- SQL
- SQL 连接
- 建模与估计
- 模型
- 损失函数
- 绝对损失和 Huber 损失
- 梯度下降与数值优化
- 使用程序最小化损失
- 梯度下降
- 凸性
- 随机梯度下降法
- 概率与泛化
- 随机变量
- 期望和方差
- 风险
- 线性模型
- 预测小费金额
- 用梯度下降拟合线性模型
- 多元线性回归
- 最小二乘-几何透视
- 线性回归案例研究
- 特征工程
- 沃尔玛数据集
- 预测冰淇淋评级
- 偏方差权衡
- 风险和损失最小化
- 模型偏差和方差
- 交叉验证
- 正规化
- 正则化直觉
- L2 正则化:岭回归
- L1 正则化:LASSO 回归
- 分类
- 概率回归
- Logistic 模型
- Logistic 模型的损失函数
- 使用逻辑回归
- 经验概率分布的近似
- 拟合 Logistic 模型
- 评估 Logistic 模型
- 多类分类
- 统计推断
- 假设检验和置信区间
- 置换检验
- 线性回归的自举(真系数的推断)
- 学生化自举
- P-HACKING
- 向量空间回顾
- 参考表
- Pandas
- Seaborn
- Matplotlib
- Scikit Learn