我有一个包含多个变量的大型数据集:项目,位置,质量(1-10的比例),以及包含“否”的日期范围(如果该项目当天没有销售)和价格(如果它确实卖出那天) .
我想创建一个线性回归模型,以便能够根据位置和质量预测价格 . 我阅读了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 将如下所示:
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 :
DictVectorizer
.transform
.fit_transform
>>> test_data = [{'location': 'store 2', 'quality': 3}] >>> X_test = vec.transform(test_data) >>> model.predict(X_test) array([ 10.28])
顺便说一句,我会将此问题作为分类问题(出售/未出售)处理,然后我将使用回归来确定仅售出商品的价格 .
1 回答
您需要将数据转换为模型可以使用的数字表示 . 唯一有问题的特征是位置(分类变量),但我们可以用每个位置的一列表示它,0和1表示(所谓的OneHotEncoding) . 一个让你入门的例子:
预处理
现在
X
将如下所示:模型培训
此矩阵现在可以提供给模型:
预测
新数据也需要使用相同的
DictVectorizer
转换为数字形式 . 请注意,现在我们使用.transform
而不是.fit_transform
:顺便说一句,我会将此问题作为分类问题(出售/未出售)处理,然后我将使用回归来确定仅售出商品的价格 .