Python 如何使用多个目标变量(多输出)超/欠采样数据?
假设我有一个数据集,有2个独立特征和6个相依特征,如下所示,Python 如何使用多个目标变量(多输出)超/欠采样数据?,python,python-3.x,classification,sampling,smote,Python,Python 3.x,Classification,Sampling,Smote,假设我有一个数据集,有2个独立特征和6个相依特征,如下所示,AA和BB是独立的,a、B、C、D、E、F是因变量 AA BB A B C D E F teacher No 1 0 0 1 0 0 student Yes 1 1 0 1 0 0 officer Yes 0 0 1 0 0 0 engineer Maybe 1 1 1 0 0 0 student Sure 0 1 1 0 0 1 lawyer
AA和BB
是独立的,a、B、C、D、E、F
是因变量
AA BB A B C D E F
teacher No 1 0 0 1 0 0
student Yes 1 1 0 1 0 0
officer Yes 0 0 1 0 0 0
engineer Maybe 1 1 1 0 0 0
student Sure 0 1 1 0 0 1
lawyer Maybe 1 1 0 0 1 0
student Yes 1 0 0 1 1 0
teacher No 1 1 1 0 0 0
doctor No 0 1 1 0 0 0
engineer Maybe 1 0 0 1 1 0
如果我想通过上采样、下采样或过采样来平衡数据,我该怎么做?普通的SMOTE和sklearn技术不会攻击多个目标,也不会抛出很多错误。有人能帮我一下吗。免责声明:如果重新采样类/加权损失函数使训练集更接近测试集中的类分布,它只会改善您的结果。在这种情况下,首选加权损失函数 如何对数据集重新采样:
class_counts = df['AA'].value_counts()
class_weights = len(class_counts)/class_counts
resampled_df = df.sample(
n=class_counts.max()*len(class_counts),
weights=df['AA'].map(class_weights),
replace=True)
免责声明:重新采样类/加权损失函数只有在使训练集更接近测试集中类的分布时,才能改善结果。在这种情况下,首选加权损失函数 如何对数据集重新采样:
class_counts = df['AA'].value_counts()
class_weights = len(class_counts)/class_counts
resampled_df = df.sample(
n=class_counts.max()*len(class_counts),
weights=df['AA'].map(class_weights),
replace=True)
只对类进行加权要容易得多,其结果与您使用的分类器/框架相同?我使用了带SGDClassizer的MultiOutputClassifier,没有调整普通分类器,我无法提高精度,因为类是不平衡的。您是在尝试“平衡”吗类或者你有一个特定的目标要达到吗?为了平衡类,只需将
class\u weight='balanced'添加到
sgdclassizer的参数中`只对类进行加权就容易多了,结果与你使用的分类器/框架相同?我使用了带有sgdclassizer的多输出分类器,没有调整普通分类器,我无法提高准确性,因为课程不平衡。你是想“平衡”课程,还是想达到一个特定的目标?平衡课程,只需将class_weight='balanced'添加到
sgdclassizer'的参数中,最后一个目标列不会得到改进,在给定的情况下,它会得到全部零,并且这里的限制是,如果独立列是文本列,那么它会给出与之前相同的结果@Marat@AniketRele您可以对任何列进行这种重采样,而不仅仅是类。我不确定您对文本列的关注是什么最后一个目标列没有得到改进,在给定的情况下,它将全部为零,并且这里的限制是,如果独立列是文本列,那么它将给出与以前相同的结果@Marat@AniketRele您可以对任何列进行这种重采样,而不仅仅是类。我不知道你对文本栏有什么担心