【问题标题】:Generating numpy arrays for scikit linear regression model为 scikit 线性回归模型生成 numpy 数组
【发布时间】:2015-03-21 20:55:53
【问题描述】:

我有一个包含多个变量的大型数据集:商品、位置、质量(范围为 1-10)和日期范围,如果商品当天没有售出,则包含“否”和售出时的价格天。

我想创建一个线性回归模型,以便能够在给定位置和质量的情况下预测价格。我通读了 scikit-learn 教程,但我真的很困惑我的输入应该是什么。有人可以帮帮我吗?

【问题讨论】:

  • 位置如何表示?作为一个 1-10 的“位置质量”数字?作为纬度/经度值?
  • 位置由邮政编码表示

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


【解决方案1】:

您需要将数据转换为模型可以使用的数字表示。唯一有问题的特征是位置(分类变量),但我们可以用每个位置的一列以及 0 和 1(所谓的 OneHotEncoding)来表示它。一个帮助您入门的示例:

预处理

from sklearn.feature_extraction import DictVectorizer

data  = [
        {'location': 'store 1', 'quality': 8},
        {'location': 'store 1', 'quality': 9},
        {'location': 'store 2', 'quality': 2},
        {'location': 'store 2', 'quality': 3},
        ]
prices = [100.00, 99.9, 11.25, 9.99]
vec = DictVectorizer()
X = vec.fit_transform(data)
y = prices

现在X 将如下所示:

╔═════════════════╦═════════════════╦═════════╗
║ location=store1 ║ location=store2 ║ quality ║
╠═════════════════╬═════════════════╬═════════╣
║               1 ║               0 ║       8 ║
║               1 ║               0 ║       9 ║
║               0 ║               1 ║       2 ║
║               0 ║               1 ║       3 ║
╚═════════════════╩═════════════════╩═════════╝

模型训练

这个矩阵现在可以输入模型了:

from sklearn.linear_model import LinearRegression

model = LinearRegression()
model.fit(X, y)

预测

新数据还需要使用相同的DictVectorizer 转换为数字形式。请注意,现在我们使用.transform 而不是.fit_transform

>>> test_data = [{'location': 'store 2', 'quality': 3}]
>>> X_test = vec.transform(test_data)
>>> model.predict(X_test)
array([ 10.28])

顺便说一句,我会将这个问题作为一个分类问题(已售出/未售出)来处理,然后我会使用回归来确定已售商品的价格。

【讨论】:

  • 什么是模型训练中的“y”,如何将“价格”与特定位置/质量相关联?
  • y = prices 关联是通过索引,即数据列表中的第一项对应于价格列表中的第一项,data[2]->prices[2],依此类推。顺便说一句,如果该位置是邮政编码,我会将其转换为字符串,以便 Dictvectorizer 将其作为分类变量而不是数值变量处理。
猜你喜欢
  • 2017-01-04
  • 2017-04-29
  • 2015-12-15
  • 2021-04-01
  • 2018-07-31
  • 2019-10-09
  • 2019-10-13
  • 2020-08-13
  • 2018-07-14
相关资源
最近更新 更多