为 scikit 线性回归模型生成 numpy 数组

Generating numpy arrays for scikit linear regression model

我有一个包含多个变量的大型数据集:商品、位置、质量(范围为 1-10)和日期范围包含 "no"(如果商品当天未售出)和价格(如果那天确实卖出去了。

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

您需要将数据转换为模型可以使用的数字表示形式。唯一有问题的特征是位置(分类变量),但我们可以用每个位置的一列以及 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])

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