【问题标题】:Sklearn split Pandas Dataframe and CSR Matrix into Test and Training setSklearn 将 Pandas Dataframe 和 CSR Matrix 拆分为测试和训练集
【发布时间】:2016-02-22 23:54:25
【问题描述】:

我正在尝试使用 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:

_matrix = generate_tf_idf_matrix(training_df['corpus'].values)

返回一个 csr 矩阵(CountVectorizer -> TfidfTransformer)

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

    train_X = _matrix
    train_Y = training_df[['cat1','cat2']]

用于多标签分类

我现在的问题是:

如何将我的数据框和我的 csr 矩阵拆分为测试集和训练集? 如果我在创建矩阵之前拆分数据框,则 csr 矩阵的大小会有所不同,因为我的文档具有不同的特征。

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

【问题讨论】:

    标签: python pandas scikit-learn classification


    【解决方案1】:

    scikit-learns 包已经包含一个非常强大的模块,用于 train-val-test 交叉验证功能。您可以快速浏览整个模块sklearn.cross_validation(此处为API)。

    一般train_test_split 会做这项工作:

    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)
    

    但是,如果您的类 y 非常不平衡,您可能会对 StratifiedShuffleSplit 感兴趣,它在训练/测试数据集中拆分数据,但在每个训练/测试集中保留每个类的百分比.

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

    【讨论】:

      猜你喜欢
      • 2021-03-02
      • 2023-01-24
      • 2015-09-26
      • 2021-06-28
      • 2017-11-01
      • 2017-06-11
      • 2018-12-26
      • 2018-11-19
      • 1970-01-01
      相关资源
      最近更新 更多