Python中浮点数错误的无效文字面量

3

我正在尝试使用sklearn库在Python中执行线性回归。

这是我用来训练和拟合模型的代码,当我运行预测函数调用时出现错误。

train, test = train_test_split(h1, test_size = 0.5, random_state=0)

my_features = ['bedrooms', 'bathrooms', 'sqft_living', 'sqft_lot', 'floors', 'zipcode']
trainInp = train[my_features]

target = ['price']
trainOut = train[target]

regr = LinearRegression()

# Train the model using the training sets

regr.fit(trainInp, trainOut)

print('Coefficients: \n', regr.coef_)

testPred = regr.predict(test)

在拟合模型之后,当我尝试使用测试数据进行预测时,它会抛出以下错误

Traceback (most recent call last):
  File "C:/Users/gouta/PycharmProjects/MLCourse1/Python.py", line 52, in <module>
    testPred = regr.predict(test)
  File "C:\Users\gouta\Anaconda2\lib\site-packages\sklearn\linear_model\base.py", line 200, in predict
    return self._decision_function(X)
  File "C:\Users\gouta\Anaconda2\lib\site-packages\sklearn\linear_model\base.py", line 183, in _decision_function
    X = check_array(X, accept_sparse=['csr', 'csc', 'coo'])
  File "C:\Users\gouta\Anaconda2\lib\site-packages\sklearn\utils\validation.py", line 393, in check_array
    array = array.astype(np.float64)
ValueError: invalid literal for float(): 20140604T000000

线性回归模型的系数为:
('Coefficients: \n', array([[ -5.04902429e+04,   5.23550164e+04,   2.90631319e+02,
         -1.19010351e-01,  -1.25257545e+04,   6.52414059e+02]]))

以下是测试数据集的前五行

Test dataset

错误是否是由于系数值过大引起的?如何解决?


为什么值里面有字母“T”?另外,考虑展示一些你的代码... - David Zemens
请展示实际引发错误的代码。 - wpercy
“错误是由于系数值过大引起的吗?” <- 不是,几乎可以确定错误是因为您的测试数据中有类似日期/时间列的内容,而模型只期望一个浮点数数组。请务必向我们展示测试数据的前几行! - Mark Dickinson
很抱歉,我犯了一个错误,我选择了一些列作为训练输入和目标,但是测试数据集中有所有的列,因此测试数据集中有额外的变量导致了问题。 - goutam
@goutam:没问题,这种情况很常见。我也猜到了,但是如果问题包含代码和数据样本,那就更容易判断了。 - Mark Dickinson
显示剩余2条评论
1个回答

3
你的问题在于你只是在整个数据框中选择了一组特征来拟合模型(使用trainInp = train[my_features]),但是你尝试用包括非数字特征如date在内的全部特征进行预测(regr.predict(test))。
因此,你应该使用regr.predict(test[my_features])代替regr.predict(test)。更一般地说,记住无论何时对训练集应用预处理(标准化、特征选择、PCA等),都应该对测试集进行相同的处理。
或者,在进行训练-测试分割之前,你也可以将特征集缩小到感兴趣的特征集合:
my_features = ['bedrooms', 'bathrooms', ...]
train, test = train_test_split(h1[my_features], test_size = 0.5, random_state=0)

谢谢Mark。刚刚意识到并进行了评论。 - goutam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接