机器学习基础-监督学习-标签平衡处理之Tomek-links欠采样

661 阅读3分钟

Tomek links 欠采样是一种欠采样方法,其思想是删除在 Tomek links 中较多的多数类样本,以使得多数类样本数量与少数类样本数量相近。

Tomek links 指的是不同类别之间距离比较近的样本对,具体定义如下:

  • 如果样本 ii 和样本 jj 属于不同的类别,且 iijj 是对方的 KNN(K Nearest Neighbors),则称 iijj 之间存在 Tomek link。

在进行欠采样时,可以使用 Tomek links 方法删除一些多数类样本,以使得多数类样本数量与少数类样本数量相近。具体方法如下:

  1. 对于少数类样本,使用 KNN 方法找到其 K 个最近邻的多数类样本。
  2. 对于多数类样本,使用 KNN 方法找到其 K 个最近邻的少数类样本。
  3. 对于每个少数类样本,如果其没有找到任何一个最近邻是多数类样本,或者其最近邻中没有 Tomek link,则保留该样本;否则,将其与 Tomek link 中的多数类样本一起删除。

下面给出一个简单的 Python 代码示例来演示如何使用 Tomek links 方法进行欠采样:

from imblearn.under_sampling import TomekLinks
from sklearn.datasets import make_classification

# 生成一个不平衡数据集
X, y = make_classification(n_samples=1000, weights=[0.9, 0.1])

# 使用 Tomek links 进行欠采样
tl = TomekLinks()
X_resampled, y_resampled = tl.fit_resample(X, y)

在上述示例中,TomekLinks() 是 imblearn 库中的一个类,可以用来进行 Tomek links 欠采样。fit_resample() 方法可以对输入的数据进行欠采样,返回欠采样后的数据集。通过调整参数,可以修改 KNN 方法的参数,或者使用其他的欠采样方法。

需要注意的是,Tomek links 欠采样方法虽然能够减少多数类样本数量,但也有可能导致信息丢失,因此需要根据具体问题和数据集进行选择。

另外,如果数据集中存在噪声或异常值,Tomek links 方法可能会误判一些多数类样本为少数类样本,导致错误的欠采样。因此,在使用 Tomek links 方法之前,需要对数据集进行预处理和清洗。

最后,Tomek links 方法只适用于二分类问题,并且需要计算 KNN,因此对于大规模数据集,可能会导致计算复杂度较高的问题。

下面给出一个简单的示例来演示 Tomek links 欠采样的效果,代码如下:

import numpy as np
import matplotlib.pyplot as plt
from imblearn.datasets import make_imbalance
from imblearn.under_sampling import TomekLinks

# 生成一个不平衡数据集
X, y = make_imbalance(n_samples=1000, n_classes=2, class_sep=2,
                      weights=[0.95, 0.05], random_state=42)

# 可视化原始数据集
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='coolwarm', alpha=0.8)
plt.title('Original Data')
plt.show()

# 使用 Tomek links 进行欠采样
tl = TomekLinks()
X_resampled, y_resampled = tl.fit_resample(X, y)

# 可视化欠采样后的数据集
plt.scatter(X_resampled[:, 0], X_resampled[:, 1], c=y_resampled, cmap='coolwarm', alpha=0.8)
plt.title('Tomek Links Undersampling')
plt.show()

上述代码使用 imblearn 库中的 make_imbalance() 函数生成一个不平衡数据集,并使用 Tomek links 方法进行欠采样。

Tomek links 方法并未能够解决极度不平衡的数据集问题,仍然只删除了一部分多数类样本,少数类样本数量仍然极少。因此,在实际应用中,需要根据具体问题和数据集选择合适的欠采样方法,避免欠采样导致的信息丢失和不均衡问题。