在 sklearn 中进行测试和训练数据拆分的错误

Posted

技术标签:

【中文标题】在 sklearn 中进行测试和训练数据拆分的错误【英文标题】:error of making a test and train data split in sklearn 【发布时间】:2018-04-30 11:58:28 【问题描述】:

我正在尝试按“train_test_split”进行测试和训练数据拆分。 为什么我收到错误“至少需要一个数组作为输入”。

“train_test_split”的输入可以是array和dataFrame,对吧?

import pandas as pd
import numpy as np 
from rpy2.robjects.packages import importr
import rpy2.robjects as ro
import pandas.rpy.common as rpy_common 
from sklearn.model_selection import  train_test_split

def la():
 ro.r('library(MASS)')
 pydf = rpy_common.load_data(name = 'Boston', package=None, convert=True)
 pddf = pd.DataFrame(pydf)
 targetIndex = pddf.columns.get_loc("medv") 

 # make train and test data
rowNum = pddf.shape[0]  
colNum = pddf.shape[1]
print(type(pddf.as_matrix()))
print(pddf.as_matrix().shape)
m = np.asarray(pddf.as_matrix()).reshape(rowNum,colNum)
print(type(m))
x_train, x_test, y_train, y_test = train_test_split(x = m[:, 0:rowNum-2], \
                                                    y = m[:, -1],\
                                                    test_size = 0.5) 
# error:     raise ValueError("At least one array required as input")
ValueError: At least one array required as input

【问题讨论】:

xy 不应作为位置参数而不是关键字参数提供,因此请从调用中删除 x = y = 您的索引也可能有误(不清楚)。您重塑为 (rowNum, colNum) 大小,但后来您使用 rowNum 在第二个(按列)维度中建立索引。因此,即使在修复了原始错误之后,您仍然可能会看到不相关的问题。如果是这样,请在单独的问题中询问他们:) 【参考方案1】:

从sklearn docs 开始,数组通过位置项解包(“*args”)进行处理。

您正在使用关键字参数“x=”和“y=”,它会通过查看“x”和“y”是否是特殊关键字选项的名称来尝试处理。

试试:

train_test_split(m[:, 0:rowNum-2], m[:, -1], test_size=0.5)

(从数组中删除关键字参数名称)。

【讨论】:

以上是关于在 sklearn 中进行测试和训练数据拆分的错误的主要内容,如果未能解决你的问题,请参考以下文章

管道和网格搜索的 SKLearn 错误

为啥 sklearn 的训练/测试拆分加上 PCA 会使我的标签不正确?

如何使用内置的张量流方法对特征和标签张量执行 sklearn 风格的训练测试拆分?

使用特征训练和测试拆分数据

没有 scikit-learn 的分层训练/验证/测试拆分

如何将数据集 (csv) 拆分为训练和测试数据