Нужно ли преобразовывать фрейм данных pandas в массивы numpy для алгоритмов машинного обучения в scikit-learn?
Я знаю, что функция to_numpy()
выполняет преобразование. Это означало бы, что мне нужно вручную создать фиктивную матрицу для категориальных столбцов в фрейме данных pandas.
Что произойдет, если я просто использую фрейм данных pandas в качестве входных данных в scikit-learn? И если я конвертирую фрейм данных pandas в массивы numpy, значит ли это, что имена моих столбцов больше не сохраняются в алгоритме машинного обучения? Когда дело доходит до диагностики модели, необходимо предпринять дополнительные шаги для согласования имен столбцов с массивами numpy?
Предоставление массива чисел с плавающей запятой — безопасная ставка, но это не обязательно. Что бы вы ни предоставили, будет предпринята попытка внутреннего преобразования в массив numpy. Если это не массив (см. ниже), будет возбуждено исключение.
Если вы возьмете RandomForestRegressor в качестве примера, вы обнаружите, что в sklearn
у них есть понятие array-like
. См., например, строку документации для RandomForestRegressor.fit():
X {подобная массиву, разреженная матрица} формы (n_samples, n_features) Обучающие входные образцы. Внутри его dtype будет преобразован в dtype=np.float32. Если предоставлена разреженная матрица, она будет преобразована в разреженную csc_matrix.
Вы можете получить более полное представление о том, что такое array-like
, прочитав глоссарий:
массивный
Наиболее распространенный формат данных для ввода в оценщики и функции Scikit-learn, подобный массиву, — это объект любого типа, для которого numpy.asarray создаст массив соответствующей формы (обычно одно- или двумерный) соответствующего типа dtype (обычно числовой).Это включает в себя:
пустой массив
список номеров
список длины k списков чисел для некоторой фиксированной длины k
pandas.DataFrame со всеми числовыми столбцами
числовой pandas.Series
Это исключает:
разреженная матрица
итератор
генератор
Если вы просмотрите источник , вы обнаружите, что данные, которые вы предоставляете своим методам, будут проходить через self._validate_data
, что приведет к конверсии для вас.
Вы всегда можете заранее проверить, приемлемы ли ваши данные, с помощью sklearn.utils.check_array, но это не имеет большого практического смысла, потому что это все равно будет сделано за вас, когда вы предоставите свои данные методу.
Спасибо за Ваш ответ. Если я предоставлю массивы numpy, то имена столбцов не сохранятся, и мне придется согласовать имена столбцов с массивами numpy после подбора модели. Я прав ?
Да, если они вам нужны. Нет иначе.
Если функция говорит, что она принимает фрейм данных... Но если она говорит
array
, она может использоватьnp.asarray
, чтобы убедиться, что это так. Вы можете прочитать код, чтобы убедиться. Проверьте, что это делает. Он может делегировать действиеto_numpy
. Читайте документы, а там, где непонятно, читайте [источник].