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

标签 python machine-learning scikit-learn

我正在使用 Scikit-learn 进行二元分类任务……并且我有: 0 类:有 200 个观察值 第 1 类:有 50 个观察值

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

docs_train=load_files(rootdir,categories=categories, encoding='latin-1')

X_train = docs_train.data
y_train = docs_train.target

majority_x,majority_y=x[y==0,:],y[y==0]  # assuming that class 0 is the majority class
minority_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]

它就像一个魅力,但是,在处理 majority_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 数组,并且因为我是整个领域的新手而且我真的非常努力学习..我试图将两个结果数组组合在一起 majority_x+minority_x 以形成训练数据我想要..我不能给出一些错误,直到现在我一直在努力解决这些错误......但即使我可以..我怎样才能保留他们的索引,以便 majority_y 和 minority_y 也为真!

最佳答案

在处理 majority_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 进行子采样 + 分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35106112/

相关文章:

machine-learning - 完美的决策树分类

optimization - 提高以下计算 softmax 导数的代码性能的技巧

随机森林回归 - 累积 MSE?

python - 属性错误 : 'RandomForestClassifier' object has no attribute 'fit_transform'

python - GridSearchCV的 retrofit 和scorer的组合不清楚

python - 从对中创建 pandas 数据框的快速方法

python - App Engine Standard 上的 Postgres - 插入时出错

python - 导入错误 : cannot import name np_utils

javascript - 二叉树在后端或前端的实现

python - Python sklearn coef_ 输出中的 target 是什么?