Нужно ли преобразовывать фрейм данных pandas в массивы numpy для алгоритмов машинного обучения в scikit-learn?

Нужно ли преобразовывать фрейм данных pandas в массивы numpy для алгоритмов машинного обучения в scikit-learn?

Я знаю, что функция to_numpy() выполняет преобразование. Это означало бы, что мне нужно вручную создать фиктивную матрицу для категориальных столбцов в фрейме данных pandas.

Что произойдет, если я просто использую фрейм данных pandas в качестве входных данных в scikit-learn? И если я конвертирую фрейм данных pandas в массивы numpy, значит ли это, что имена моих столбцов больше не сохраняются в алгоритме машинного обучения? Когда дело доходит до диагностики модели, необходимо предпринять дополнительные шаги для согласования имен столбцов с массивами numpy?

Если функция говорит, что она принимает фрейм данных... Но если она говорит array, она может использовать np.asarray, чтобы убедиться, что это так. Вы можете прочитать код, чтобы убедиться. Проверьте, что это делает. Он может делегировать действие to_numpy. Читайте документы, а там, где непонятно, читайте [источник].

hpaulj 13.12.2020 09:43
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
1 737
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Предоставление массива чисел с плавающей запятой — безопасная ставка, но это не обязательно. Что бы вы ни предоставили, будет предпринята попытка внутреннего преобразования в массив 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 после подбора модели. Я прав ?

user1769197 13.12.2020 09:57

Да, если они вам нужны. Нет иначе.

Sergey Bushmanov 13.12.2020 09:58

Другие вопросы по теме