# 風險和損失最小化
> 原文:[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