【问题标题】:Divide data for training and test set with all subject in the training set将训练集和测试集的数据除以训练集中的所有主题
【发布时间】:2019-01-14 04:31:14
【问题描述】:

我是机器学习的新手,我正在尝试处理 SVM。我有一个包含近 3000 个数据的语料库,其中包含大约 47 个主题,我计划对其进行 10 倍交叉验证。但是在交叉验证期间,我如何确保所有 47 个受试者都在 10 个组中的每个组中?

例如,一些主题是“apple”、“blackberry”、“sony”、“canon”、“htc”。我想确保交叉验证中的所有组都包含“apple”、“blackberry”、“sony”、“canon”、“htc”等,这意味着第 1 组 - 第 10 组有它们。

那么我如何确保这一点?我应该先将数据按主题分开,然后只将它们分成10组,然后再将它们全部合并在一起吗?

但是如果是这样,这是否意味着我已经手动将 10 组数据分成训练和测试集,10 次(手动交叉验证)然后只传递给 libSVM?或者我只需要准备 10 个包含所有主题的组,然后让 libSVM 进行自动交叉验证 -v 10?

回到主题,我如何用 Python 编程来分割数据?我的数据有 2 列(标签),一列用于主题,一列用于内容/文本。

【问题讨论】:

    标签: python-2.7 svm cross-validation libsvm


    【解决方案1】:

    您可以使用 sklearn 库来拆分数据

    from sklearn.model_selection import train_test_split    
    x_train,x_test,y_train,y_test = train_test_split(df,tar,test_size=0.30)
    

    上面的代码会将数据以 7:3 的比例拆分为训练和测试,并打乱它们,这样你就可以获得训练和验证的所有目标值。

    【讨论】:

      【解决方案2】:

      您要执行的操作称为分层。它确保在拆分数据时,保留每个类中样本的百分比。

      在 python 中,这可以通过 scikit-learn 轻松完成:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-01
        • 2013-06-18
        • 2017-11-01
        • 2017-12-12
        • 2018-06-04
        • 2012-07-06
        • 2017-09-30
        • 2015-01-17
        相关资源
        最近更新 更多