返回

扫除数据失衡,Tomek Links 欠采样保驾护航

人工智能

揭秘 Tomek Links 欠采样:数据失衡的灵丹妙药

当我们遇到类别严重不平衡的数据集时,机器学习模型往往会偏袒数量众多的类别,而忽视数量稀少的类别。这会导致模型在预测少数类别时准确率低下,影响模型的整体性能。

为了解决这一难题,数据科学家们提出了各种策略,其中最受欢迎的一种就是欠采样 。欠采样顾名思义,就是从数量众多的类别中删除部分数据,以降低其在数据集中的比例,从而达到平衡数据分布的目的。

在众多的欠采样方法中,Tomek Links 欠采样 脱颖而出,成为数据科学家的宠儿。它以其简单易行、效果显著的优点,在数据预处理领域占有重要的一席之地。

Tomek Links 欠采样的工作原理

Tomek Links 欠采样算法的工作原理非常简单,它首先会计算出所有样本之间的距离。然后,算法会找出那些距离最近的多数类样本和少数类样本对,并将其中一个样本删除。

如此反复,直到多数类样本的数量与少数类样本的数量相近为止。这种方法可以有效地减少数据集中多数类样本的数量,从而提高模型对少数类样本的预测准确率。

Tomek Links 欠采样的优势与局限

Tomek Links 欠采样算法具有以下优点:

  • 简单易行: 算法的实现非常简单,即使是初学者也可以轻松掌握。
  • 计算效率高: 算法的计算复杂度较低,可以快速处理大型数据集。
  • 效果显著: 算法可以有效地减少数据集中多数类样本的数量,提高模型对少数类样本的预测准确率。

但是,Tomek Links 欠采样算法也存在一些局限性:

  • 可能导致信息丢失: 算法在删除多数类样本时,可能会丢失一些有价值的信息,从而影响模型的整体性能。
  • 可能产生噪声: 算法在删除样本时,可能会产生一些噪声数据,从而降低模型的预测准确率。

示例

以下 Python 代码展示了如何使用 Tomek Links 欠采样算法对数据集进行欠采样:

import numpy as np
from sklearn.neighbors import NearestNeighbors
from sklearn.utils import resample

# 加载数据集
X, y = load_data()

# 查找距离最近的样本对
nbrs = NearestNeighbors(n_neighbors=2).fit(X)
distances, indices = nbrs.kneighbors(X)

# 创建空列表以存储要删除的样本
to_remove = []

# 遍历所有样本对
for i in range(X.shape[0]):
    # 如果样本对属于不同的类别,并且距离足够近
    if y[i] != y[indices[i, 1]] and distances[i, 1] < threshold:
        # 将其中一个样本添加到要删除的列表中
        to_remove.append(i)

# 删除要删除的样本
X = np.delete(X, to_remove, axis=0)
y = np.delete(y, to_remove, axis=0)

# 对数据集重新采样以平衡类别分布
X_resampled, y_resampled = resample(X, y, n_samples=min(np.bincount(y)))

结论

Tomek Links 欠采样算法是一种简单易行、计算效率高、效果显著的欠采样方法。它可以有效地减少数据集中多数类样本的数量,提高模型对少数类样本的预测准确率。但是,算法也存在一些局限性,因此在使用时需要谨慎选择。

常见问题解答

1. Tomek Links 欠采样算法何时使用?

Tomek Links 欠采样算法在类别不平衡的数据集中特别有用,其中数量众多的类别会干扰模型对数量稀少的类别进行学习。

2. Tomek Links 欠采样算法的优缺点是什么?

优点:简单易行,计算效率高,效果显著。缺点:可能导致信息丢失,可能产生噪声。

3. Tomek Links 欠采样算法的参数有哪些?

Tomek Links 欠采样算法的一个参数是阈值,它用于确定哪些样本对被认为距离足够近。

4. Tomek Links 欠采样算法如何与其他欠采样方法相比较?

与其他欠采样方法相比,Tomek Links 欠采样算法通常在提高对少数类样本的预测准确率方面表现出色。

5. Tomek Links 欠采样算法是否存在替代方法?

有许多其他欠采样方法,例如随机欠采样、自适应合成采样和 Borderline-SMOTE。