Разделить набор данных, содержащий несколько меток

У меня есть набор данных с несколькими метками, то есть для каждого X у меня есть 2 y, и мне нужно разделить на набор для обучения и тестирования.

Я пробовал использовать функцию sklearn train_test_split ():

import numpy as np
from sklearn.model_selection import train_test_split

X = np.random.randn(10)
y1 = np.random.randint(1,10,10)
y2 = np.random.randint(1,3,10)

X_train, X_test, [Y1_train, Y2_train], [Y1_test, Y2_test] = train_test_split(X, [y1, y2], test_size=0.4, random_state=42)

Но я получаю сообщение об ошибке:

ValueError: Found input variables with inconsistent numbers of samples: [10, 2]

person tobor    schedule 05.02.2021    source источник


Ответы (1)


Этот код должен работать на вас.

import numpy as np
from sklearn.model_selection import train_test_split

X = np.random.randn(10)
y1 = np.random.randint(1,10,10)
y2 = np.random.randint(1,3,10)
y = [[y1[i],y2[i]] for i in range(len(y1))] 

X_train, X_test, Y_train, Y_test  = train_test_split(X, y, test_size=0.4, random_state=42)

Будет произведен следующий вывод

print(X_train)
[ 0.42534237  1.35471168  0.00640736  1.34057234  0.50608562 -1.73341641]

а также

print(Y_train)
[[3, 1], [7, 1], [6, 2], [4, 2], [6, 2], [2, 2]]

В вашем коде массив меток имеет форму (2,10), но входной массив имеет форму (10,).

print([y1,y2])
[array([2, 3, 7, 6, 4, 9, 2, 3, 6, 6]), array([2, 2, 1, 2, 2, 2, 2, 1, 1, 2])]

print(np.array([y1,y2]).shape)
(2, 10)

print(X.shape)
(10,)

Но ваша желаемая форма для этикеток была (10,2):

print(y)
[[2, 2], [3, 2], [7, 1], [6, 2], [4, 2], [9, 2], [2, 2], [3, 1], [6, 1], [6, 2]]

print(np.array(y).shape)
(10, 2)

Вход и выход должны иметь одинаковую форму.

person kindustrii    schedule 05.02.2021