В Python - resulting train set will be empty: как "починить" размерность выборок?
Господа, вот какое дело: получаю ошибку при разделении датасета на тестовую и обучающую выборки (далее собираюсь применить метод регрессии). Ошибка намекает на пустые значения (хотя датасет виден - код его выводит):
With n_samples=0, test_size=0.2 and train_size=None, the resulting train set will be empty. Adjust any of the aforementioned parameters
Сами данные взяты отсюда: https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data (train.csv).
Пошел простым путем: не стал смотреть, как заменить NaN по столбцам (хотя поначалу была мысль заполнить медианными значениями и даже реализация этого). Я сделал примитивней - удалил строки с пропусками. Получил переменную data_filtred. Далее вычленил переменные Х и y:
X = data_filtred[factor_feat.columns] # определяем переменные X и y
y = data_filtred['SalePrice']
Что такое factor_feat? Это конкатенация столбцов числовых и категориальных признаков.
На следующем этапе приступил к разделению выборки на train и test. И вот здесь объявилась ошибка. Если смотрю размерность переменных, то вижу: в случае Х она составляет (0, 79), размер y - (0, ). Когда проверяю переменную y, она дает пустой список:
здесь пусто - data_filtred['SalePrice'],
здесь есть значения - data['SalePrice'].
Вот код:
# удалим пустые строки с записью NaN
data_filtred = data.dropna()
#Находим категориальные признаки
cat_feat = list(data_filtred.dtypes[data_filtred.dtypes == object].index)
#отфильтруем непрерывные признаки
num_feat = [f for f in data_filtred if f not in (cat_feat + ['Id', 'SalePrice'])]
# Смотрим, сколько у нас значений по каждому категориальному признаку
cat_nunique = data_filtred[cat_feat].nunique() # nunique() возвращает количество уникальных объектов
print(cat_nunique) # странно, но видим по данному принту нулевые уникальные значения; возможно, есть смысл отказаться от дальнейшего использования в обучении категориальных признаков
factor_feat = pd.concat((data_filtred[num_feat], data_filtred[cat_feat]), axis=1) # объединяем столбцы фрейма data - категориальные
# признаки и непрерывные
X = data_filtred[factor_feat.columns] # определяем переменные X и y
y = data_filtred['SalePrice']
# Разбиваем на train/test
D_train, D_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)