您需要将数据转换为模型可以使用的数字表示。唯一有问题的特征是位置(分类变量),但我们可以用每个位置的一列以及 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])
顺便说一句,我会将这个问题作为一个分类问题(已售出/未售出)来处理,然后我会使用回归来确定已售商品的价格。