Python Sklearn将数据框架和CSR矩阵拆分为测试和训练集

Python Sklearn将数据框架和CSR矩阵拆分为测试和训练集,python,pandas,scikit-learn,classification,Python,Pandas,Scikit Learn,Classification,我正在尝试使用scikit learn DecisionTree和Pandas Dataframe对文本进行分类: 首先,我构建了一个如下所示的数据帧: cat1 cat2 corpus title 0 0 1 Test Test Test erster titel 1 1 0 Test Super

我正在尝试使用scikit learn DecisionTree和Pandas Dataframe对文本进行分类: 首先,我构建了一个如下所示的数据帧:

   cat1  cat2                             corpus           title
0     0     1                     Test Test Test    erster titel
1     1     0                   Test Super Super   zweiter titel
2     0     1                     Test Test Test   dritter titel
3     0     1                    Test Super Test   vierter titel
4     1     0                   Super Test Super  fuenfter titel
5     1     1         Super einfacher Test Super  fuenfter titel
6     1     1  Super simple einfacher Test Super  fuenfter titel
然后我生成一个TF IDF矩阵:

_matrix = generate_tf_idf_matrix(training_df['corpus'].values)
它返回csr矩阵(CountVectorizer->TfidfTransformer)

对于我的分类器,我想使用

    train_X = _matrix
    train_Y = training_df[['cat1','cat2']]
对于多标签分类

我现在的问题是:

如何将数据帧和csr矩阵拆分为测试集和训练集? 如果在创建矩阵之前拆分数据框,csr矩阵会有另一个大小,因为我的文档具有不同的功能。


限制:我不想将我的矩阵转换为数组,这样我就可以轻松地拆分它。

scikit learns软件包已经包含一个非常强大的用于train val测试交叉验证功能的模块。您可以快速查看整个模块(此处为)

一般来说,他们会做这项工作:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)
但是,如果您的类
y
非常不平衡,您可能会对分割训练/测试数据集中的数据,但保留每个训练/测试集中每个类的百分比的方法感兴趣

因此,在您的情况下,首先创建
X=_矩阵
y=training_df[['cat1','cat2']]
,然后使用
scikit learn
函数将其拆分到训练/测试数据集中