不平衡的dataset
的最佳技术是什么?
我有一个11967年的dataset
实例,其中正标记的数量为139,负标记的数量为11828。
如何拆分dataset
进行测试(在该技术之前或之后)?
答案 0 :(得分:2)
处理不平衡数据集的好方法很少:
欠采样:这意味着采用较少的多数类(在您的情况下为负标签,以便使新数据集平衡)。
过采样:这意味着复制少数类(正标签)的数据以平衡数据集。
还有第三种处理不平衡数据集的方法,即 smote 。随时查看此链接:https://www.analyticsvidhya.com/blog/2016/09/this-machine-learning-project-on-imbalanced-data-can-add-value-to-your-resume/
答案 1 :(得分:0)
我建议您在sklearn.model_selection.train_test_split中使用 stratify 方法。如果设置此statify ='y'(y是数据集的标签),则将对数据进行划分,以使训练集和测试集包含相等百分比的正样本和负样本。这在不平衡的数据集中非常有用。除了将数据集随机分为两个部分之外,它还会考虑标签。
这是示例代码:
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size =0.2,statify = y)
有关更多信息,请参阅文档: http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html
答案 2 :(得分:0)
使用sklearn分割数据集的标准方法如下:
#splitting the datasets into training and validation sets (60% training)
from sklearn.model_selection import train_test_split
xTrain, xVald, yTrain, yVald = train_test_split(Xs, y, train_size=0.60, random_state = 2)
其中Xs和y是预测变量和响应变量。
如前所述,您的数据集的类分布不均衡。这种分布不允许您构建预测模型,因为该模型会将您的罕见事件(阳性水平)视为随机噪声,并且无法很好地预测新数据集。
在建立任何预测模型之前,您可能必须对稀有事件进行升采样以使其在分布中达到平衡。如果您想坚持原始分布,则可以运行随机森林模型,该模型也适用于不平衡数据。有关更多信息,请参见以下链接: https://elitedatascience.com/imbalanced-classes
如果要对数据进行上采样,则可以尝试以下操作:
from sklearn.utils import resample
# Separate majority and minority classes
df_majority = df[df.pos_neg==0] #I classified negative class as '0'
df_minority = df[df.pos_neg==1]
# Upsample minority class
df_minority_upsampled = resample(df_minority,
replace=True, # sample with replacement
n_samples=11828, # to match majority class
random_state=123) # reproducible results
# Combine majority class with upsampled minority class
df_upsampled = pd.concat([df_majority, df_minority_upsampled])
# Display new class counts
df_upsampled.value_counts()
# 1 11828
# 0 11828