如何使用定长列表进行预处理?

How to preprocessing with the fix-length list?

我想使用 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)。 而且我想也许我应该在一些数组中添加一些额外的元素以使长度一致。但是我不知道如何准确地执行此步骤。这个叫"vectorize"吗?

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

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

所以你的 table 应该是这样的:

-------------------------------------------------------------------
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   |    ?  |

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