首页 文章

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

提问于
浏览
1

我有一个包含多个变量的大型数据集:项目,位置,质量(1-10的比例),以及包含“否”的日期范围(如果该项目当天没有销售)和价格(如果它确实卖出那天) .

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

1 回答

  • 3

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

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

相关问题