python – 使用scikit-learn进行子采样分类

python – 使用scikit-learn进行子采样分类,第1张

概述我正在使用Scikit-learn进行二进制分类任务..我有: 0级:观察200次 第1类:有50次观察 因为我有一个不平衡的数据..我想采取多数类的随机子样本,其中观察的数量将与少数类相同,并希望使用新获得的数据集作为分类器的输入.子采样和分类的过程可以重复多次.我有以下代码用于子采样,主要是Ami Tavory的帮助 docs_train=load_files(rootdir,categori 我正在使用Scikit-learn进行二进制分类任务..我有:
0级:观察200次
第1类:有50次观察

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

docs_train=load_files(rootdir,categorIEs=categorIEs,enCoding='latin-1')X_train = docs_train.datay_train = docs_train.targetmajority_x,majority_y=x[y==0,:],y[y==0]  # assuming that class 0 is the majority classminority_x,minority_y=x[y==1,y[y==1]inds=np.random.choice(range(majority_x.shape[0]),50)majority_x=majority_x[inds,:]majority_y=majority_y[inds]

它的工作方式就像一个魅力,但是,在处理most_x和majority_y的最后,我希望能够用新的较小的集合替换在X_train,y_train中表示class0的旧集合,以便将其传递给分类器或管道:

pipeline = Pipeline([    ('vectorizer',CountVectorizer( tokenizer=tokens,binary=True)),('classifIEr',SVC(C=1,kernel='linear')) ])pipeline.fit(X_train,y_train)

我做了什么为了解决这个问题:
因为结果数组中有numpy数组,而且因为我是整个区域的新手而且我真的很努力学习..我试图将两个结果数组合在一起,使seven_x minority_x组合起来形成我的训练数据想…我不能给它一些错误,我试图解决,直到现在…但即使我可以..我怎么能保持他们的索引所以most_y和minority_y也将是真的!

解决方法 处理了most_x和minority_y后,您可以将训练集合并到

X_train = np.concatenate((majority_x,minority_x))y_train = np.concatenate((majority_y,minority_y))

现在X_train和y_train将首先包含y = 0的所选样本,然后是y = 1的样本.

您的相关问题的想法:
通过创建多数样本数量长度的随机排列向量,选择大多数样本.
然后选择该向量的前50个索引,然后选择下一个50,依此类推.
当您使用该向量时,每个样本将被选择一次.
如果您想要更多迭代或剩余的排列向量太短,您可以采用随机选择.

正如我在评论中提到的,您可能还想在np.random.choice中添加参数“replace = False”,如果你想在一次迭代中多次阻止相同的样本.

总结

以上是内存溢出为你收集整理的python – 使用scikit-learn进行子采样分类全部内容,希望文章能够帮你解决python – 使用scikit-learn进行子采样分类所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1197518.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存