【问题标题】:Predict test data using model based on training data set?使用基于训练数据集的模型预测测试数据?
【发布时间】:2017-08-14 19:05:00
【问题描述】:

我是数据科学和分析的新手。 在通过 Kaggle 上的大量内核之后,我制作了一个预测房产价格的模型。我已经使用我的训练数据测试了这个模型,但现在我想在我的测试数据上运行它。我有一个 test.csv 文件,我想使用它。我怎么做? 我之前对训练数据集所做的事情:

#loading my train dataset into python
train = pd.read_csv('/Users/sohaib/Downloads/test.csv')

#factors that will predict the price
train_pr = ['OverallQual','GrLivArea','GarageCars','TotalBsmtSF','FullBath','YearBuilt']

#set my model to DecisionTree
model = DecisionTreeRegressor()

#set prediction data to factors that will predict, and set target to SalePrice
prdata = train[train_pr]
target = train.SalePrice

#fitting model with prediction data and telling it my target
model.fit(prdata, target)

model.predict(prdata.head())

现在我尝试做的是,复制整个代码,并将“train”更改为“test”,将“predate”更改为“testprdata”,我认为它会起作用,但遗憾的是没有。我知道我做错了什么,我知道它是什么。

【问题讨论】:

  • 请添加您在测试数据中尝试的代码,包括您得到的完整错误。

标签: python scikit-learn data-analysis data-science


【解决方案1】:

只要您以完全相同的方式处理训练和测试数据,predict 函数就可以在任一数据集上工作。因此,您需要同时加载训练集和测试集,fit 加载到训练集上,predict 加载到测试集或训练集和测试集。

另外,请注意您正在阅读的文件是 test 数据。假设您的文件已正确命名,即使您将变量命名为 train,您目前正在使用您的测试数据进行训练。

#loading my train dataset into python
train = pd.read_csv('/Users/sohaib/Downloads/train.csv')
test = pd.read_csv('/Users/sohaib/Downloads/test.csv')

#factors that will predict the price
desired_factors = ['OverallQual','GrLivArea','GarageCars','TotalBsmtSF','FullBath','YearBuilt']

#set my model to DecisionTree
model = DecisionTreeRegressor()

#set prediction data to factors that will predict, and set target to SalePrice
train_data = train[desired_factors]
test_data = test[desired_factors]
target = train.SalePrice

#fitting model with prediction data and telling it my target
model.fit(train_data, target)

model.predict(test_data.head())

【讨论】:

  • 完美运行。我得到的答案是数组的形式,我可以输入比数据集中的新字段吗?像一个新列并将数组添加到其中?
  • 您需要比较predicting 和test.SalePrice 的模型。假设您正在使用 scikit-learn.org/stable/modules/generated/… ,我认为您应该得到的是一个 1xN(N 是测试集的长度)矩阵(即向量),其中 model.predictith 结果对应于 @987654332输入数据中的 @th 行对应于目标 (test.SalePrice) 中的 ith 值。鉴于您的数据结构,不确定如何理想地做到这一点。
  • 我会做类似actuals = model.predict(test_data) <new line>for target, actual in zip(test.SalePrice, actuals): <new line> print(target == actual) 之类的事情,然后在该循​​环中放入某种有意义的成功和失败累积。
【解决方案2】:

您已经在使用经过训练的模型进行预测 (model.predict(prdata.head()))。如果您想使用该模型来预测其他测试数据,只需提供其他测试数据而不是 prdata.head()。例如,您可以使用该模型来预测来自 prdata 的所有样本,方法是删除将 DataFrame 限制为前 5 行的 .head()(但您只是使用此数据来训练模型;这只是一个示例)。

请记住,您仍然需要一个模型来进行预测。通常,您将训练一个模型,然后将其与测试数据一起呈现。将 train 的所有引用更改为 test 将不起作用,因为除非您已将其从训练中保存并在向其展示测试数据之前将其恢复,否则您将没有基于测试数据进行预测的模型.

在您的代码中,当您将数据传递给model.fit 方法时,您实际上是在使用您的test.csv 数据文件来训练您的模型。通常,您不会使用用于测试的数据来训练您的模型。

【讨论】:

  • 哦,是的。我不敢相信我是多么愚蠢,并且在我的测试数据上调用 model.fit()。我现在所做的就是 model.predict(test.head()) 并且它起作用了。但是似乎不起作用的是,当我使用 model.predict(test) 时,它给了我一个错误,但是当我使用 head 时,它没有
  • 在将其呈现给模型之前,您是否包含(仅)相同的列?
  • 是的,除了作为我的目标变量的 SalePrice
  • 请提供更多上下文以获取错误帮助(即,发布代码/错误)。
猜你喜欢
  • 2012-12-25
  • 2021-02-28
  • 2021-09-30
  • 2020-02-11
  • 2020-06-26
  • 1970-01-01
  • 2014-08-02
  • 2020-03-09
  • 2020-06-01
相关资源
最近更新 更多