【问题标题】:How to preprocessing with the fix-length list?如何使用定长列表进行预处理?
【发布时间】:2020-04-09 15:00:02
【问题描述】:

我想用以下数据训练我的回归模型使用sklearn,并用它来预测其他参数给出的收入:

但是当我尝试拟合我的模型时遇到了一些问题。

from sklearn import linear_model

model = linear_model.LinearRegression()


train_x = np.array([
    [['Tom','Adam'], '005', 50],
    [['Tom'], '001', 100],
    [['Tom', 'Adam', 'Alex'], '001', 150]
])

train_y = np.array([
    50,
    80,
    90
])


model.fit(train_x,train_y)


>>> ValueError: setting an array element with a sequence.

我做了一些搜索,问题是 train_x 在所有数组(staff_id)中没有相同数量的元素。 而且我想也许我应该在一些数组中添加一些额外的元素以使长度保持一致。但我不知道如何准确地执行这一步。这叫“矢量化”吗?

【问题讨论】:

    标签: machine-learning scikit-learn data-processing


    【解决方案1】:

    机器学习模型不能将此类列表作为输入。它会将您的列表视为字符列表(因为您的列表包含字符串并且每个字符串都是字符序列)并且可能不会学到任何东西。
    通常,数组用作处理时间序列数据的模型的输入,例如在 NLP 中,每条记录都是包含要处理的单词列表的时间戳。

    您应该将列表“分解”成不同的列,而不是将数组填充为相同的大小(如您所建议的)。
    再创建 3 个列 - 每个员工姓名各一个:Tom、Adam 和 Alex。如果名称出现在列表中,则其单元格的值为 1,否则为 0。

    所以你的表格应该是这样的:

    -------------------------------------------------------------------
    staff_Tom | staff_Adam | staff_Alex | Manager_id | Budget | Revenue
    -------------------------------------------------------------------
         1    |      1     |      0     |      5     |   50   |    50  |
         1    |      0     |      0     |      1     |  100   |    80  |
         1    |      1     |      1     |      1     |  150   |    90  |
    ....
         1    |      0     |      1     |      1     |   75   |    ?  |
    
    

    您的模型将轻松了解和识别每位员工,并更快地收敛到解决方案。

    【讨论】:

      猜你喜欢
      • 2020-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多