【问题标题】:How to use SGDRegressor in scikit-learn如何在 scikit-learn 中使用 SGDRegressor
【发布时间】:2015-08-03 22:12:49
【问题描述】:

我正在尝试弄清楚如何正确使用 scikit-learn 的 SGDRegressor 模型。 为了适应数据集,我需要调用function fit(X,y),其中 x 是一个形状为 (n_samples,n_features) 的 numpy 数组,而 y 是一个长度为 n_samples 的 1d numpy 数组。我试图弄清楚 y 应该代表什么。

例如我的数据显示如下:

我的特征是从 1972 年开始的年份,这些值是那一年的对应值。我试图预测未来几年的值,例如 2008 年或 2012 年。我假设我的数据中的每一行应该代表 X 中的一行/样本,其中每个元素都是一年的值。在那种情况下,你会是什么?我在想 y 应该只是年份,但是 y 的长度是 n_features 而不是 n_samples。如果 y 的长度为 n_samples,那么长度为 5 的 y 可能是多少(数据中的样本数如下所示)。我想我必须以某种方式转换这些数据。

【问题讨论】:

  • 您对此不是很清楚,但是您尝试在数据集中预测 2008 年或 2012 年的任何值吗?否则,这是一个无监督学习问题,但您正在尝试对其应用监督学习技术。为什么不对您的数据进行某种曲线拟合,然后进行推断?

标签: python numpy machine-learning statistics scikit-learn


【解决方案1】:

在机器学习中,y 代表数据的标签或目标。也就是说,您的训练数据的正确答案 (X)。

如果您想了解一些与年份相对应的值,那么这些年份将是您的训练数据 (X),与它们相关的正确值将是您的目标 (y)。

您会注意到这符合您在第一段中提到的大小:X 的形状将是 (n_samples, n_features),因为它将包含与您的年份一样多的条目,并且每个条目的大小为 1(您只有 1 个特征,年份)和 y 的长度将是 n_samples,因为您有一个与每年相关的值。

【讨论】:

  • 基本上如此。我必须一次将模型重新拟合到每一行数据,其中 x 是年份 y 是值。这是我最初的想法,但似乎效率很低。
  • @JordanBramble - 不一定。您应该有一个包含 all 数据行的数组,一个包含所有 y 的数组并适合这些数据。你描述的方式应该只用于在线学习,partial_fit
【解决方案2】:

y 是你的目标(你想要预测的),你可以这样得到:

from sklearn import linear_model

clf = linear_model.SGDRegressor()
clf.fit(x_to_train, y_to_train)

# clf is a trained model

y_predicted = clf.predict(X_to_predict)

【讨论】:

    猜你喜欢
    • 2019-06-27
    • 2015-01-09
    • 2018-11-06
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 2017-04-15
    • 2016-11-23
    • 2013-12-13
    相关资源
    最近更新 更多