Pandas «Передача списка лайков в .lo c или [] с отсутствующими метками больше не поддерживается» в train_test_split возвращенных данных - PullRequest
0 голосов
/ 29 февраля 2020

По какой-то причине train_test_split, несмотря на одинаковую длину и одинаковые индексы, вызывает эту ошибку.

from sklearn.model_selection import KFold

data = {'col1':[30.5,45,1,99,6,5,4,2,5,7,7,3], 'col2':[99.5, 98, 95, 90,1,5,6,7,4,4,3,3],'col3':[23, 23.6, 3, 90,1,9,60,9,7,2,2,1]} 
df = pd.DataFrame(data)

train, test = train_test_split(df, test_size=0.10)
X = train[['col1', 'col2']]
y2 = train['col3']

X = np.array(X)

kf = KFold(n_splits=3, shuffle=True)
for train_index, test_index in kf.split(X):
    X_train, y_train = X[train_index], y[train_index]

y - это серия pandas (той же длины, что и x). x был кадром данных с примерно 20 числовыми столбцами, приведенными к массиву numpy.

По какой-то причине train_test_split вызывает ошибку, несмотря на одинаковую длину.

Если я не вызываю train_test_split, он работает нормально.

последняя строка, вызывающая ошибку из-за попытки индексировать массив numpy следующим образом: y [train_ind]

1 Ответ

1 голос
/ 29 февраля 2020

Я пытался создать сценарий для вашей ситуации.

Я создал следующий фрейм данных:

    col1  col2  col3
0      1     2     1
1      3     4     0
2      5     6     1
3      7     8     0
4      9    10     1
5     11    12     0
6     13    14     1
7     15    16     0
8     17    18     1
9     19    20     0
10    21    22     1
11    23    24     0
12    25    26     1
13    27    28     0
14    29    30     1

Я установил col1 и col2 для X и col3 для тебя. После этого я преобразовал X в массив numpy следующим образом. Разница лишь в том, что я использовал shuffle в KFold.

X = df[['col1', 'col2']]
y = df['col3']
X = np.array(X)
kf = KFold(n_splits=3, shuffle=True)
for train_index, test_index in kf.split(X):
    X_train, y_train = X[train_index], y[train_index]

И это сработало хорошо. Поэтому, пожалуйста, проверьте мой код и ваш код и уточните его, если я что-то пропустил.

Обновление

Я предполагаю, что y2 - это y. Таким образом, у типа по-прежнему Series, вам нужно использовать .iloc для него. Следующий код работал хорошо.

data = {'col1':[30.5,45,1,99,6,5,4,2,5,7,7,3], 'col2':[99.5, 98, 95, 90,1,5,6,7,4,4,3,3],'col3':[23, 23.6, 3, 90,1,9,60,9,7,2,2,1]}
df = pd.DataFrame(data)
train, test = train_test_split(df, test_size=0.10)

X = train[['col1', 'col2']]
y = train['col3']

X = np.array(X)

kf = KFold(n_splits=3, shuffle=True)
for train_index, test_index in kf.split(X):
    X_train, y_train = X[train_index], y.iloc[train_index]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...