Значения NaN, вводимые в данные тестирования и обучения - PullRequest
0 голосов
/ 12 июля 2020

Я работаю над проектом Data Science с набором данных Fifa. Я очистил данные и позаботился о любых значениях NaN в данных, чтобы подготовить их к разделению на тестирование и обучение. Мне нужно использовать StratifiedShuffleSplit, чтобы разделить данные. Обновлен до более чистого способа разделения данных значений на группы, но я все еще получаю значения NaN, когда они проходят разделение.

Ссылка на набор данных, который я использую: https://www.kaggle.com/karangadiya/fifa19

n = fifa['value'].count()
folds = 3

fifa.sort_values('value', ascending=False, inplace=True)

fifa['group_id'] = np.floor(np.arange(n)/folds)
fifa['value_cat'] = fifa.groupby('group_id', as_index = False)['name'].transform(lambda x: np.random.choice(v_cats, size=x.size, replace = False))

На этом этапе, когда я проверяю тестовые и обучающие данные, теперь у меня вводятся загадочные значения NaN. Я думаю, что значения NaN могут быть результатом .lo c, поскольку я получаю «предупреждение» в jupyter.

c:\python37\lib\site-packages\ipykernel_launcher.py:6: FutureWarning: 
Passing list-likes to .loc or [] with any missing label will raise
KeyError in the future, you can use .reindex() as an alternative.

Код ниже:

from sklearn.model_selection import StratifiedShuffleSplit

split = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42)

for train_index, test_index in split.split(fifa, fifa['value_cat']):
    strat_train_set = fifa.loc[train_index]
    strat_test_set = fifa.loc[test_index]

fifa = strat_train_set.drop('value', axis=1)
value_labels = strat_train_set['value'].copy()

ПОЖАЛУЙСТА, ПОМОГИТЕ МОИМ БЕДНЫМ ДУША !!

введите описание изображения здесь

1 Ответ

0 голосов
/ 13 июля 2020

Вот одно решение.

import numpy as np
import pandas as pd

n = 100
folds = 3

# Make some data
df = pd.DataFrame({'id':np.arange(n), 'value':np.random.lognormal(mean=10, sigma=1, size=n)})

# Sort by value
df.sort_values('value', ascending=False, inplace=True)

# Insert 'group' ids, 0, 0, 0, 1, 1, 1, 2, 2, 2, ...
df['group_id'] = np.floor(np.arange(n)/folds)

# Randomly assign folds within each group
df['fold'] = df.groupby('group_id', as_index=False)['id'].transform(lambda x: np.random.choice(folds, size=x.size, replace=False))

# Inspect
df.head(10)

    id          value  group_id  fold
46  46  208904.679048       0.0     0
3    3  175730.118616       0.0     2
0    0  137067.103600       0.0     1
87  87  101894.243831       1.0     2
11  11  100570.573379       1.0     1
90  90   93681.391254       1.0     0
73  73   92462.150435       2.0     2
13  13   90349.408620       2.0     1
86  86   87568.402021       2.0     0
88  88   82581.010789       3.0     1

Предполагая, что вам нужно k складок, идея состоит в том, чтобы отсортировать данные по значению, а затем случайным образом назначить складки 1, 2, ..., k первым k строкам , затем проделайте то же самое со следующими k строками, et c.

Кстати, вам больше повезет, если вы получите ответы на вопросы здесь, если вы сможете создать воспроизводимые примеры с данными, которые упростят задачу другим повозиться. :)

...