【问题标题】:SKLearn Predicting using new DataSKLearn 使用新数据进行预测
【发布时间】:2018-10-15 07:34:55
【问题描述】:

我已经使用 SKLearn 尝试了线性回归。我的数据类似于:卡路里摄入量 |重量。

150 | 150

300 | 190

350 | 200

基本上是由数字组成,但我已将数据集拟合到线性回归模型中。

我感到困惑的是,我将如何使用新数据进行预测,比如我获得了 10 个新摄入的卡路里数,并且我希望它来预测体重?

regressor = LinearRegression()
regressor.fit(x_train, y_train)
y_pred = regressor.predict(x_test) ??

但我将如何只制作我的 10 个新数据卡路里摄入量,并使其成为我希望回归器预测的 测试集

【问题讨论】:

  • 你的问题不是很清楚,是在生成数字还是做数组的时候一头雾水?
  • 不。我对如何让我的模型使用 10 个新的卡路里摄入量来预测体重感到困惑。

标签: python machine-learning scikit-learn


【解决方案1】:

您是对的,您只需调用模型的predict 方法并传入新的看不见的数据进行预测。现在它还取决于new data 的含义。您是否引用了您不知道其结果的数据(即您不知道权重值),或者这些数据是否用于测试您的模型的性能?

对于新数据(预测):

你的方法是正确的。您只需打印y_pred 变量即可访问所有预测。

您知道各自的权重值并且想要评估模型:

确保您有两个独立的数据集:x_test(包含特征)和 y_test(包含标签)。像使用 y_pred 变量一样生成预测,然后您可以使用许多性能指标来计算其性能。最常见的一种是均方根,您只需将y_testy_pred 作为参数传递。这是 sklearn 提供的所有regression performance metrics 的列表。

如果不知道这10个新数据点的权重值:

使用train_test_split 将您的初始数据集分成两部分:trainingtesting。您将拥有 4 个数据集:x_trainy_trainx_testy_test

from sklearn.model_selection import train_test_split
# random state can be any number (to ensure same split), and test_size indicates a 25% cut
x_train, y_train, x_test, y_test = train_test_split(calories_eaten, weight, test_size = 0.25, random_state = 42) 

通过拟合 x_trainy_train 来训练模型。然后通过预测x_test 并将这些predictionsy_test 的实际结果进行比较来评估模型的训练性能。这样您就可以了解模型的性能。此外,您还可以相应地预测10 新数据点的weight values

作为初学者,也值得进一步阅读该主题。 This 是一个简单的教程。

【讨论】:

  • 我知道权重值。但是我怎样才能使 10 个新数据点 x_test?我让它读取不同的 csv 文件吗?
  • 如果您知道 10 个新数据点的权重值,只需将标签作为性能指标评估的一部分传递。否则,如果您不知道这 10 个新点的权重,那么除了使用性能指标来指导您信任模型的预测之外,您无能为力。请参阅编辑后的答案。
  • @David,为您的精彩回答点赞。我知道写一个正确而冗长的答案时的感觉,没有人支持它,以表彰它投入的时间和精力。
【解决方案2】:

我感到困惑的是,我将如何使用新的进行预测 数据,假设我有 10 个新的卡路里摄入量,我希望它 预测体重?

是的,Calories Eaten 代表自变量,Weight 代表dependent 变量。

将数据拆分为训练集和测试集后,下一步是使用 X_trainy_train 数据拟合回归量。

模型训练完成后,您可以预测X_test 方法的结果,因此我们得到了y_pred

现在您可以将y_pred(预测数据)与真实数据y_test 进行比较。

您还可以对创建的线性模型使用score 方法,以获得模型的性能

score 使用R^2(R 平方) 度量或Coefficient of determination. 计算

score = regressor.score(x_test, y_test)

要拆分数据,您可以使用train_test_split 方法。

from sklearn.model_selection import train_test_split
X_train, y_train, X_test, y_test = train_test_split(eaten, weight, test_size = 0.2, random_state = 0)

【讨论】:

  • 谢谢。我也对如何制作 10 个新数据点 x_test 感到困惑?我是否通过读取不同的 csv 文件来调用它?但是代码会如何预测呢?
  • @GuiltyVeek,已经有一个内置的方法。看看更新的答案。您只需要指定吃的和重量数组并指定测试大小百分比。如果您有100 行并将test_size 设置为0.2,这意味着您将拥有80entries 用于训练和20 用于测试您创建的模型。
  • 但是如果我只想使用不是来自原始数据集的 10 个新数据点来预测权重值呢?
  • 然后你可以从原始数据集中生成10个随机点,其值在最小值和最大值之间。
  • @MihaiAlexandru-Ionut 是的,老实说,我认为这是 OP 造成混乱的主要来源。您的(非常好的)答案可能超出了需要!
【解决方案3】:

您必须在 sklearn 中使用 model_selection 选择模型,然后训练并拟合数据集。

from sklearn.model_selection import train_test_split
X_train, y_train, X_test, y_test = train_test_split(eaten, weight)

regressor.fit(X_train, y_train)
y_pred = regressor.predict(X_test)

【讨论】:

    猜你喜欢
    • 2018-03-23
    • 1970-01-01
    • 2018-05-05
    • 2018-12-20
    • 2018-12-01
    • 2016-12-11
    • 1970-01-01
    • 2018-12-27
    • 2015-06-19
    相关资源
    最近更新 更多