详情

慢吞云雾缓吐愁 Lv.8

关注
深度学习中有离群值吗?

是的,和许多刚刚打仗深度学习的工程师默认的不一样的是——深度学习中也会碰到离群值(Outliers)。这些非常值大概存在于输入数据或标签中,并对模子的练习和推测结果产生负面影响。

深度学习中的离群值泉源:


  • 输入特性非常:

    • 数据收罗错误(比方传感器故障或录入错误)。
    • 数据预处理处罚错误特性缩放题目。(这些错误乃至大概是模子练习者本身举行错误的数据增强造成的)

  • 标签非常:

    • 手动标注错误(比方分类错误的标签,在一些著名的开源数据会集,偶尔也会存在这类题目)。在一篇新论文中,麻省理工 CSAIL 和亚马逊的研究者对 10 个主流呆板学习数据集的测试集睁开了研究,发现它们的匀称错误率竟高达 3.4%。此中,最著名的 ImageNet 数据集的验证会集至少存在 2916 个错误,错误率为 6%;QuickDraw 数据会集至少存在 500 万个错误,错误率为 10%。论文链接:https://arxiv.org/pdf/2103.14749.pdf
    • 噪声或非常样本影响练习数据集。

  • 特性空间毛病:

    • 特性分布存在长尾效应极度值

  • 对抗样本:

    • 特意计划的输入,导致模子错误分类或输出非常结果(比方对抗攻击)。


处理处罚离群值的计谋:

1. 数据预处理处罚阶段:

(a) 可视化分析


  • 绘制箱线图、散点图或直方图观察非常值分布。
  • 示例代码
  1. import matplotlib.pyplot as plt
  2. plt.boxplot(data)
  3. plt.show()
(b) 统计检测法


  • 使用 Z-Score 或 IQR 方法检测离群值(恰当小规模数据)。
© 洗濯数据


  • 删除离群值: 假如非常值是错误数据,可以直接移除。
  • 更换或修正: 更换为均值、中位数或插值估计值。

2. 数据增强和鲁棒模子:

(a) 数据增强(Data Augmentation):


  • 使用扩增技能天生更多样化的样本,淘汰非常值的影响(错误的数据增强也会产生离群值数据,要对数据增强产生的数据举行检测,以克制该题目)。
(b) 使用鲁棒模子:


  • 在练习深度学习模子时接纳丧失函数对离群值不敏感的方法,比方:

    • Huber Loss:分身均方偏差和绝对偏差。
    • Smooth L1 Loss:对离群值具有更高的鲁棒性。
    • 示例代码
    1. import torch.nn as nn
    2. loss = nn.SmoothL1Loss()


3. 模子练习阶段:

(a) Early Stopping 和正则化:


  • 使用Early Stopping防止模子过拟合非常样本。
  • 使用L1/L2正则化束缚权重,低沉对极度值的敏感性。
(b) Dropout 技能:


  • 随机扬弃部门神经元,淘汰模子对非常值的依靠。

4. 非常检测集成模子:

(a) 使用孤立丛林或 LOF 检测非常值:
在深度学习之前,可以团结呆板学习算法先检测非常样本,再将洗濯后的数据输入深度学习模子。
(b) 使用主动编码器(Autoencoder):
练习一个自编码器重修输入数据,盘算重修偏差来检测非常值。
  1. from keras.models import Model, Sequential
  2. from keras.layers import Dense, Input
  3. # 建立 Autoencoder
  4. input_dim = X_train.shape[1]
  5. model = Sequential([
  6.     Dense(64, activation='relu', input_shape=(input_dim,)),
  7.     Dense(32, activation='relu'),
  8.     Dense(64, activation='relu'),
  9.     Dense(input_dim, activation='sigmoid')
  10. ])
  11. model.compile(optimizer='adam', loss='mse')
  12. # 使用重建误差检测异常值
  13. reconstruction = model.predict(X_test)
  14. mse = np.mean(np.power(X_test - reconstruction, 2), axis=1)
  15. threshold = np.percentile(mse, 95)  # 取阈值
  16. outliers = X_test[mse > threshold]

怎样处理处罚对抗样本?


  • 对抗练习: 使用天生对抗样本增强模子鲁棒性。
  • 正则化束缚: 如 FGSM(Fast Gradient Sign Method)等方法进步模子的稳固性。
  • 检测机制: 在输入层增长检测模块,过滤非常输入。

总结:

深度学习中的离群值大概泉源于输入特性或标签的非常分布,对模子练习和推测精度产生负面影响。因此,可以通过数据预处理处罚、鲁棒丧失函数、正则化、数据增强和非常检测模子等方法低沉其影响。同时,对于更复杂的题目如对抗样本,须要额外计划防御机制来掩护模子安全性。
别的如今也有专门用于处理处罚数据集标注错误的深度学习模子,有爱好的朋侪可以去自行相识一下。
关键字:置信学习。可参考阅读: 关于置信学习的文献综述(浅易版)
可以或许使用PyTorch检测离群值吗?

起首答复,是的。不外方法大同小异。
PyTorch 中,可以使用多种方法来检测离群值。以下是几种常用的方法及代码示例:

1. 基于 Z-Score 的离群值检测

原理:

盘算每个数据点的 Z-Score,假如其绝对值大于某个阈值(如 3),则以为是离群值。
代码示例:

  1. import torch
  2. # 示例数据
  3. data = torch.tensor([10, 12, 11, 13, 300, 14, 15], dtype=torch.float)
  4. # 计算均值和标准差
  5. mean = torch.mean(data)
  6. std = torch.std(data)
  7. # 计算 Z-Score
  8. z_scores = (data - mean) / std
  9. # 筛选离群值
  10. threshold = 3  # 设置阈值
  11. outliers = data[torch.abs(z_scores) > threshold]
  12. print("Outliers:", outliers)

2. 基于 IQR 的离群值检测

原理:

通过盘算四分位数范围 (IQR),判断是否超出 1.5 倍 IQR 的范围。
代码示例:

  1. import torch
  2. # 示例数据
  3. data = torch.tensor([10, 12, 11, 13, 300, 14, 15], dtype=torch.float)
  4. # 计算四分位数
  5. Q1 = torch.quantile(data, 0.25)
  6. Q3 = torch.quantile(data, 0.75)
  7. IQR = Q3 - Q1
  8. # 计算边界
  9. lower_bound = Q1 - 1.5 * IQR
  10. upper_bound = Q3 + 1.5 * IQR
  11. # 筛选离群值
  12. outliers = data[(data < lower_bound) | (data > upper_bound)]
  13. print("Outliers:", outliers)

3. 使用主动编码器(Autoencoder)检测离群值

原理:



  • 练习一个自编码器将输入数据重修,假如重修偏差较大,则以为是离群值。
  • 自编码器恰当处理处罚高维数据或复杂模式的离群检测。
代码示例:

  1. import torch
  2. import torch.nn as nn
  3. import torch.optim as optim
  4. # 数据集
  5. data = torch.tensor([[10.0], [12.0], [11.0], [13.0], [300.0], [14.0], [15.0]])
  6. # 定义 Autoencoder
  7. class Autoencoder(nn.Module):
  8.     def __init__(self):
  9.         super(Autoencoder, self).__init__()
  10.         self.encoder = nn.Sequential(
  11.             nn.Linear(1, 4),
  12.             nn.ReLU(),
  13.             nn.Linear(4, 2),
  14.             nn.ReLU()
  15.         )
  16.         self.decoder = nn.Sequential(
  17.             nn.Linear(2, 4),
  18.             nn.ReLU(),
  19.             nn.Linear(4, 1)
  20.         )
  21.     def forward(self, x):
  22.         x = self.encoder(x)
  23.         x = self.decoder(x)
  24.         return x
  25. # 初始化模型和参数
  26. model = Autoencoder()
  27. criterion = nn.MSELoss()
  28. optimizer = optim.Adam(model.parameters(), lr=0.01)
  29. # 训练模型
  30. epochs = 100
  31. for epoch in range(epochs):
  32.     optimizer.zero_grad()
  33.     outputs = model(data)
  34.     loss = criterion(outputs, data)
  35.     loss.backward()
  36.     optimizer.step()
  37. # 检测异常值
  38. with torch.no_grad():
  39.     predictions = model(data)
  40.     mse = torch.mean((data - predictions) ** 2, dim=1)
  41.     threshold = torch.quantile(mse, 0.95)  # 设定阈值
  42.     outliers = data[mse > threshold]
  43.     print("Outliers:", outliers)

4. 使用 Isolation Forest 检测离群值(借助 sklearn)

固然 PyTorch 没有直接支持 Isolation Forest,但可以团结 sklearn 的 Isolation Forest 提取非常值后处理处罚。
代码示例:

  1. from sklearn.ensemble import IsolationForest
  2. import torch
  3. # 示例数据
  4. data = torch.tensor([[10], [12], [11], [13], [300], [14], [15]], dtype=torch.float)
  5. # 使用 Isolation Forest 模型
  6. clf = IsolationForest(contamination=0.1, random_state=42)
  7. predictions = clf.fit_predict(data)
  8. # 筛选离群值
  9. outliers = data[predictions == -1]
  10. print("Outliers:", outliers)

5. 使用基于密度的算法(DBSCAN)检测离群值

原理:

DBSCAN 根据密度聚类检测密度较低的数据点,这些点大概是离群值。
代码示例:

  1. from sklearn.cluster import DBSCAN
  2. import torch
  3. # 示例数据
  4. data = torch.tensor([[10], [12], [11], [13], [300], [14], [15]], dtype=torch.float)
  5. # 使用 DBSCAN 模型
  6. dbscan = DBSCAN(eps=3, min_samples=2)
  7. labels = dbscan.fit_predict(data)
  8. # 筛选离群值
  9. outliers = data[labels == -1]
  10. print("Outliers:", outliers)

总结:

深度学习中存在非常值,而且会产生负面影响。可以使用以下方法举行处理处罚:

  • 低维数据: 可以直接使用 Z-Score 或 IQR 等统计方法检测非常值。
  • 高维或复杂数据: 使用 Autoencoder 或 Isolation Forest 检测非常值。
  • 密度分析: DBSCAN 更恰当非线性分布或簇状数据的离群检测。
这些方法可以根据具体任务需求机动选择和组合使用。
相干阅读



  • 什么是离群值?怎样检测?
  • 文天职类中的离群值特性
  • 关于置信学习的文献综述(浅易版)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
115阅读
0回复

暂无评论,点我抢沙发吧