哪些网站可以找到做海报的素材,网站升级的内容包括哪些,贵阳网站建设平台,wordpress淘宝客自动采集原谅把你带走的雨天 在渐渐模糊的窗前 每个人最后都要说再见 原谅被你带走的永远 微笑着容易过一天 也许是我已经 老了一点 那些日子你会不会舍不得 思念就像关不紧的门 空气里有幸福的灰尘 否则为何闭上眼睛的时候 又全都想起了 谁都别说 让我一个人躲一躲 你的承诺 我竟然没怀…
原谅把你带走的雨天 在渐渐模糊的窗前 每个人最后都要说再见 原谅被你带走的永远 微笑着容易过一天 也许是我已经 老了一点 那些日子你会不会舍不得 思念就像关不紧的门 空气里有幸福的灰尘 否则为何闭上眼睛的时候 又全都想起了 谁都别说 让我一个人躲一躲 你的承诺 我竟然没怀疑过 反反覆覆 要不是当初深深深爱过 我试着恨你 却想起你的笑容 陈楚生/单依纯《原谅》 在机器学习和数据科学中数据集的不平衡是一个常见的问题。当一个数据集中的某一类样本数量远远超过其他类时模型往往会偏向多数类从而影响分类器的性能。为了解决这一问题研究人员提出了多种技术其中过采样和欠采样是两种最常用的方法。本文将详细介绍过采样和欠采样的概念、原理以及在实际应用中的注意事项。
什么是不平衡数据集
不平衡数据集是指某些类的样本数量显著多于其他类的情况。假设有一个二分类问题其中类别0有950个样本而类别1只有50个样本。由于类别0的样本数量远远多于类别1模型在训练时更容易学习到类别0的特征忽略类别1从而导致分类性能下降。
过采样Oversampling
过采样是一种通过增加少数类样本数量来平衡数据集的方法。其主要思想是生成新的少数类样本使少数类的样本数量增加到与多数类相同或相近。
常见的过采样方法
随机过采样Random Oversampling
通过随机复制少数类样本来增加其数量。这种方法简单易行但可能导致过拟合因为它没有引入新的信息。
from imblearn.over_sampling import RandomOverSamplerros RandomOverSampler(random_state42)
X_resampled, y_resampled ros.fit_resample(X_train, y_train)SMOTESynthetic Minority Over-sampling Technique
通过在少数类样本之间插值生成新的样本。SMOTE不仅复制少数类样本还生成新的合成样本从而减少了过拟合的风险。
from imblearn.over_sampling import SMOTEsmote SMOTE(random_state42)
X_resampled, y_resampled smote.fit_resample(X_train, y_train)ADASYNAdaptive Synthetic Sampling Approach for Imbalanced Learning
ADASYN是对SMOTE的改进它根据样本的分类难度自适应地生成合成样本。分类难度大的样本生成更多的新样本分类难度小的样本生成较少的新样本。
from imblearn.over_sampling import ADASYNadasyn ADASYN(random_state42)
X_resampled, y_resampled adasyn.fit_resample(X_train, y_train)欠采样Undersampling
欠采样是一种通过减少多数类样本数量来平衡数据集的方法。其主要思想是减少多数类样本的数量使其与少数类的样本数量接近从而达到平衡数据集的目的。
常见的欠采样方法
随机欠采样Random Undersampling
随机删除多数类样本使其数量减少到与少数类相同或相近。虽然简单但可能会丢失大量有用信息导致模型性能下降。
from imblearn.under_sampling import RandomUnderSamplerrus RandomUnderSampler(random_state42)
X_resampled, y_resampled rus.fit_resample(X_train, y_train)集成欠采样Cluster Centroids
通过聚类算法将多数类样本聚类为若干个簇并用簇的中心代替原始样本从而减少多数类样本的数量。
from imblearn.under_sampling import ClusterCentroidscc ClusterCentroids(random_state42)
X_resampled, y_resampled cc.fit_resample(X_train, y_train)Tomek Links
通过删除与少数类样本最接近的多数类样本对Tomek链接从而减少多数类样本数量。这种方法不仅减少了多数类样本还清除了数据集中的噪声样本。
from imblearn.under_sampling import TomekLinkstl TomekLinks()
X_resampled, y_resampled tl.fit_resample(X_train, y_train)过采样与欠采样的选择
选择过采样还是欠采样取决于具体的数据集和问题 过采样适用于 少数类样本特别少直接删除多数类样本会导致信息丢失过多。数据集足够小生成合成样本不会显著增加计算开销。 欠采样适用于 多数类样本特别多随机复制少数类样本会导致过拟合。数据集足够大删除部分多数类样本不会导致信息丢失过多。 在实际应用中有时可以结合过采样和欠采样的方法进一步提高模型性能。例如先通过欠采样减少多数类样本数量再通过过采样增加少数类样本数量从而达到更好的平衡效果。
实战案例结合过采样和欠采样
以下是一个结合过采样和欠采样的方法来平衡数据集的示例
from imblearn.combine import SMOTETomek
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from collections import Counter# 生成一个不平衡的数据集
X, y make_classification(n_samples1000, n_features20, n_informative2, n_redundant10, n_clusters_per_class1, weights[0.9, 0.1], flip_y0, random_state42)# 查看数据分布
print(f原始数据集类别分布: {Counter(y)})# 划分训练集和测试集
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42, stratifyy)# 使用SMOTETomek进行过采样和欠采样
smote_tomek SMOTETomek(random_state42)
X_resampled, y_resampled smote_tomek.fit_resample(X_train, y_train)# 查看过采样和欠采样后的数据分布
print(f过采样和欠采样后数据集类别分布: {Counter(y_resampled)})结论
过采样和欠采样是处理不平衡数据集的两种重要技术。过采样通过增加少数类样本数量来平衡数据集而欠采样则通过减少多数类样本数量来达到同样的目的。根据具体问题和数据集的特点选择合适的方法可以显著提高模型的性能。在实际应用中结合使用这两种方法往往可以取得更好的效果。希望本文能帮助你理解并掌握过采样和欠采样的基本原理和实现方法为你的机器学习项目提供支持。如果你有任何问题或建议欢迎在评论区留言