在Scikit中,如何在预测时修复值错误?

时间:2016-04-30 02:20:15

标签: python numpy pandas scikit-learn

以下代码给出了以下错误: ValueError:找到包含0个样本的数组(shape =(0,3)),同时至少需要1。< / em>的

在调用预测的行中产生错误。我假设数据框的形状存在问题,&#39; obs_to_pred。&#39;我检查了形状,即(1046,3)。

你推荐什么,所以我可以解决这个问题并进行预测?

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import statsmodels.api as sm

from patsy import dmatrices
from sklearn.linear_model import LogisticRegression
import scipy.stats as stats
from sklearn import linear_model

# Import Titanic Data
train_loc = 'C:/Users/Young/Desktop/Kaggle/Titanic/train.csv'
test_loc = 'C:/Users/Young/Desktop/Kaggle/Titanic/test.csv'
train = pd.read_csv(train_loc)
test = pd.read_csv(test_loc)

# Predict Missing Age Values Based on Factors Pclass, SibSp, and Parch.
# In the function, combine train and test data.
def regressionPred (traindata,testdata):

    allobs = pd.concat([traindata, testdata])
    allobs = allobs[~allobs.Age.isnull()]
    y = allobs.Age

    y, X = dmatrices('y ~ Pclass + SibSp + Parch', data = allobs, return_type = 'dataframe')
    mod = sm.OLS(y,X)
    res = mod.fit()

    predictors = ['Pclass', 'SibSp', 'Parch']
    regr = linear_model.LinearRegression()
    regr.fit(allobs.ix[:,predictors], y)

    obs_to_pred = allobs[allobs.Age.isnull()].ix[:,predictors]
    prediction = regr.predict( obs_to_pred ) # Error Produced in This Line ***

    return res.summary(), prediction

regressionPred(train,test)

如果您想查看数据集,链接会将您带到那里:https://www.kaggle.com/c/titanic/data

1 个答案:

答案 0 :(得分:0)

在第

allobs = allobs[~allobs.Age.isnull()]

您将allobs定义为NaN列中没有Age的所有案例。

稍后,用:

obs_to_pred = allobs[allobs.Age.isnull()].ix[:,predictors]

您没有任何案例需要预测,因为所有allobs.Age.isnull()都会被评估为False,而您将获得一个空的obs_to_pred。因此你的错误:

  

带有0个样本的数组(形状=(0,3)),同时至少需要1个。

用预测检查逻辑你想要的东西。