【问题标题】:Sklearn train_test_split fails on 2d vectorSklearn train_test_split 在二维向量上失败
【发布时间】:2018-04-24 22:05:49
【问题描述】:
import sklearn.model_selection as skl_ms
import numpy as np

A = np.random.normal(0, 1, [1, 100]);
(A_train, A_test) = skl_ms.train_test_split(A);
A_train.shape #--> Answer is (0, 100)
A_test.shape #---> Answer is (1, 100)

呃……这是想要的功能吗?我什至不明白为什么 numpy 让第一个维度为 0 的数组存在。

Numpy 1.14.2、sklearn 0.19.1、python 3.5.5

【问题讨论】:

  • 当您只有1个样本时,您打算如何将数据拆分为训练和测试?
  • 我已将其发布为issue on scikit github,以获得有关工作的更有意义的回应。
  • @VivekKumar 好吧,当您将一维 numpy 向量传递给该函数时,该函数可以正常工作,这就是为什么我希望它也可以正常工作于二维向量的原因。
  • 是的,但是当您只有 1 行时,您期望的结果是什么?您将如何将其分为训练和测试?

标签: python scikit-learn


【解决方案1】:

定义数据集时,变量以列表示,观察以行表示。因此,如果您有 3 个自变量、1 个因变量和 20 个测量值,您的数据集将表示为 20 x 4 矩阵 - 即 20 行和 4 列。默认情况下,train_test_split 将数据集拆分为 0.75 部分的测量值作为训练集和 0.25 部分作为测试集。对于具有 20 x 4 数据集的示例,分割将是 15 x 4 用于训练,5 x 4 用于测试。至于你的代码,如果尺寸反转会发生以下情况:

import sklearn.model_selection as skl_ms
import numpy as np

A = np.random.normal(0, 1, [100, 1]);
(A_train, A_test) = skl_ms.train_test_split(A);

A_train.shape
Out[105]: (75, 1)

A_test.shape
Out[106]: (25, 1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多