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也将是真的!
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进行子采样分类所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)