Как выполнить предварительную обработку со списком фиксированной длины? - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу обучить свою регрессионную модель, используя sklearn со следующими данными, и использовать ее для прогнозирования дохода, заданного другими параметрами:

enter image description here

Но я столкнулся с некоторой проблемой, когда пытался уместить свою модель.

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). И я думаю, что, возможно, мне следует добавить некоторые дополнительные элементы в некоторые массивы, чтобы согласовать длину. Но я понятия не имею, как именно сделать этот шаг. Это называется "векторизация"?

1 Ответ

1 голос
/ 10 апреля 2020

Модели машинного обучения не могут принимать такие списки в качестве входных данных. Он будет рассматривать ваши списки как список списков символов (поскольку ваш список содержит строки, а каждая строка представляет собой последовательность символов) и, вероятно, ничего не изучит.
Обычно массивы используются в качестве входных данных для моделей, которые имеют дело с В данных временных рядов, например, в НЛП, каждая запись является временной меткой, содержащей список слов, подлежащих обработке.

Вместо того, чтобы заполнять массивы одинаковыми размерами (как вы предлагали), вы должны «разбивать» свои списки на разные столбцы.
Создайте еще 3 столбца - по одному для каждого имени сотрудника: Том, Адам и Алекс. Значение для их ячеек будет 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   |    ?  |

Ваша модель легко узнает и идентифицирует каждого сотрудника и гораздо быстрее найдет решение.

...