Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用多个目标变量(多输出)超/欠采样数据?_Python_Python 3.x_Classification_Sampling_Smote - Fatal编程技术网

Python 如何使用多个目标变量(多输出)超/欠采样数据?

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

假设我有一个数据集,有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    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您可以对任何列进行这种重采样,而不仅仅是类。我不知道你对文本栏有什么担心