Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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 二次抽样+;使用scikit学习进行分类_Python_Machine Learning_Scikit Learn - Fatal编程技术网

Python 二次抽样+;使用scikit学习进行分类

Python 二次抽样+;使用scikit学习进行分类,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,我正在使用Scikit学习进行二进制分类任务。。我有: 0级:200次观察 第1类:50次观察 因为我有一个不平衡的数据。。我想从多数类中随机抽取一个子样本,其中观测值的数量将与少数类相同,并希望使用新获得的数据集作为分类器的输入。。二次抽样和分类过程可以重复多次。。我有以下代码,主要是借助 它像一个符咒一样工作,但是,在处理多数集x和多数集y的末尾,我希望能够用新的较小集替换表示x\u列、y\u列中class0的旧集,以便按如下方式将其传递给分类器或管道: pipeline = Pipelin

我正在使用Scikit学习进行二进制分类任务。。我有: 0级:200次观察 第1类:50次观察

因为我有一个不平衡的数据。。我想从多数类中随机抽取一个子样本,其中观测值的数量将与少数类相同,并希望使用新获得的数据集作为分类器的输入。。二次抽样和分类过程可以重复多次。。我有以下代码,主要是借助

它像一个符咒一样工作,但是,在处理多数集x和多数集y的末尾,我希望能够用新的较小集替换表示x\u列、y\u列中class0的旧集,以便按如下方式将其传递给分类器或管道:

pipeline = Pipeline([
    ('vectorizer',  CountVectorizer( tokenizer=tokens, binary=True)),
    ('classifier',SVC(C=1,kernel='linear')) ])

pipeline.fit(X_train, y_train)
为了解决这个问题,我做了什么:
因为结果是numpy数组,而且我对整个领域都是新手,所以我非常努力地学习。。我尝试将两个结果数组组合在一起,以形成我想要的训练数据。。我不能,它给了我一些错误,我正在努力解决,直到现在。。。但即使我能。。我怎样才能保持他们的指数,这样大多数人和少数人也会是真实的

在处理多数和少数之后,您可以将您的训练集与

X_train = np.concatenate((majority_x,minority_x))
y_train = np.concatenate((majority_y,minority_y))
现在,X_列和y_列将首先包含y=0的所选样本,然后包含y=1的样本

您的相关问题的想法: 通过创建多数样本数长度的随机排列向量来选择多数样本。 然后选择该向量的前50个索引,然后选择下50个索引,依此类推。 当您完成该向量时,每个样本将被精确地选择一次。 如果你想要更多的迭代或者剩余的置换向量太短,你可以求助于随机选择

正如我在评论中提到的,您可能还希望在np.random.choice中添加参数“replace=False”,
如果您想避免在一次迭代中多次使用同一个样本。

只是为了确保这不是一个问题:您是否真的在寻找类似的东西?也许你可以简单地解释一下为什么(如果有的话)这是一个不同的问题,然后为不平衡的数据构建一个CV管道?从你给我的页面上的示例来看,分层函数似乎总是会返回一个与我的情况不同的训练和测试集。。。我现在只在训练场工作。。。我想稍后提供测试集,因为它是基于不同的标准分割的,而不是基于随机分割的。如果我理解您的问题(如何将新的子采样集合并在一起),您可能希望查看
numpy.concatenate((多数,少数))
。作为补充说明,您可能需要在random.choice中添加
replace=False
,以防止对同一样本进行多次采样。谢谢。。我已经按照你的建议做了,在一个小程序中,一切都做得非常好。。直到我把它移到我原来的程序。。看起来原来的x_列车并不像我想的那样是一个列表!它只是一个列表,每个项目的开头都有一个附加的“u”!。。我正在从文本文件加载我的原始数据,这就是原因!我怎样才能四处走动呢that@user2739381
打印(类型(x\U列))的输出是什么
?如果它真的只是一个列表,我不认为你可以做
mostive\ux=x\u train[y==0,:]
(顺便说一下,在你的问题中,你有
mostive\ux=x[y==0,:]
那x和x\u train一样吗?)虽然我不确定会发生什么。是的,这是一个列表,我将它转换到numpy数组中,我已将多数代码更改为多数_x=x[y==0]。。它起作用了。。会发生什么错误?你认为连接现在起作用了吗?如果它是一个列表,您应该能够将它们与
多数\ux+少数\ux
合并。
X_train = np.concatenate((majority_x,minority_x))
y_train = np.concatenate((majority_y,minority_y))