Рубрики
Без рубрики

Наука данных с Python: 8 способов сделать линейную регрессию и измерить их скорость

Автор оригинала: FreeCodeCapm Team.

Тиртртхайоти Саркаром

В этой статье мы обсуждаем 8 способов выполнить простую линейную регрессию, используя Python Code/Packages. Мы глоснуем своими плюсами и минусами и показать их относительную измерение вычислительной сложности.

Для многих данных ученых Линейная регрессия является отправной точкой многих статистических проектов моделирования и прогнозирующих проектов. Важность фитинга (точно и быстро) линейной модели к большому набору данных не может быть завышена. Как указано в этой статье , ‘ Линейный «Срок в модели линейной регрессии относится к коэффициентам, а не на степень функций.

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

С другой стороны, Python быстро возникает как Де-факто программирование языка выбора Для данных ученых. Следовательно, важно для конкретного ученого данных о всех различных методах, которые он/она может быстро соответствовать линейной модели к довольно большим набором данных и ослабляет относительную важность каждой особенности в результате процесса.

Из-за широкой популярности Библиотека обучения машины Scikit – Учите часто общий подход часто называют Линейный модель класса из этой библиотеки и соответствовать данным. Хотя это может предложить дополнительные преимущества применения других Особенности трубопроводов машинного обучения (например, нормализация данных, модельная регуляризация коэффициента, подающая линейную модель к другой модели вниз по течению), это часто не самый быстрый или самый чистый способ, когда аналитик данных требуется просто быстрый и простой способ определить коэффициенты регрессии (и некоторые основные ассоциированные статистики ).

Есть более быстрые и более чистые методы. Но все они могут не предлагать одинаковую информацию или гибкость моделирования.

Пожалуйста, прочитайте.

Весь код котельной для различных методов линейной регрессии Доступен здесь на моем репозитории GitHub Отказ Большинство из них основаны на Scipy Package Отказ

Scipy – это коллекция математических алгоритмов и удобных функций, построенных на Numpy Расширение Python Отказ Он добавляет значительную мощность на интерактивную сессию Python, предоставляя пользователю командам высокого уровня и классы для манипулирования и визуализации данных.

Позвольте мне кратко обсудить каждый метод,

Способ: Scipy.Polyfit () или numpy.polyfit ()

Это довольно главное наименьшее квадраты Функция Polynomial Fit который принимает набор данных и полиномиальную функцию любой степени (указанной пользователем) и возвращает массив коэффициентов, которые минимизируют ошибку в квадрате. Подробное описание функции приведено здесь Отказ Для простой линейной регрессии можно выбрать степень 1. Если вы хотите установить модель более высокой степени, вы можете построить многочленные функции из линейных данных и подходят к модели.

Метод: stats.linregress ()

Это очень специализированная Функция линейной регрессии Доступно в модуле статистика Scipy. Он довольно ограничен в его гибкости, так как он оптимизирован для расчета регрессии наименьших квадратов для двух наборов только измерений. Таким образом, вы не можете установить обобщенную линейную модель или многократную регрессию, используя это. Но из-за своей специализированной природы это один из самых быстрых методов, когда дело доходит до простой линейной регрессии. Помимо того, что увязанный коэффициент и термин перехвата, он также возвращает базовую статистику, такой как R ² Коэффициент и стандартная ошибка Отказ

Метод: Optimize.curve_fit ()

Это вдоль того же линии, что и метод полифита, но более общего в природе. Это Мощная функция из Scipy.Optimize модуля Может соответствовать любую пользовательскую функцию к данным, установленным, выполняя наименее квадратный минимизацию.

Для простой линейной регрессии можно просто написать функцию Linear MX + C и вызовите этот оценщик. Не говоря уже о том, что он тоже работает для многократного регрессии. Он возвращает массив функциональных параметров, для которых наименьшая квадратная мера сводится к минимуму и связанная ковариационная матрица.

Метод: numpy.linalg.lstsq.

Это Фундаментальный способ расчета наименее квадратного раствора к линейной системе уравнения путем матричной факторизации Отказ Он исходит от удобной линейной алгебры модуля Numpy Package. Под капотом это решает уравнение А Вычисляя вектор х Это минимизирует евклидовую 2-норм B – A X

Уравнение может быть недостаточно, хорошо или чрезмерно определено (то есть число линейно независимых рядов A может быть меньше, равным или больше, чем его количество линейно независимых столбцов). Если А это квадратный и полный ранг, то х (Но для обширной ошибки) является «точным» решением уравнения.

Вы можете сделать простую или многократную регрессию с этим и вернуть расчетные коэффициенты и остатки. Один маленький трюк – это то, что перед вызовом этой функции вы должны добавить столбец из 1-х годов на данные x для расчета термина перехвата. Оказывается, это один из более быстрых методов, чтобы попробовать для линейных проблем регрессии.

Способ: statsmodels.ols ()

StatsModels – отличный маленький пакет Python Это обеспечивает классы и функции для оценки многих различных статистических моделей, а также для проведения статистических испытаний и статистических данных. Обширный список статистики результатов доступны для каждого оценщика. Результаты проверяются против существующих статистических пакетов для обеспечения правильности.

Для линейной регрессии можно использовать OLS или Обычный квадратный Функция из этого пакета и получила полную вдумую статистическую информацию о процессе оценки.

Один маленький трюк, чтобы помнить, что вы должны добавить постоянную вручную в данные x для расчета перехвата, в противном случае по умолчанию он сообщит только коэффициент. Ниже приведен снимок полных результатов резюме модели OLS. Он так же богат, как любой функциональный статистический язык, такой как R или Julia.

Метод: аналитическое решение с использованием матричного обратного метода

Для ухоженных линейных проблем регрессии (по крайней мере, где количество точек данных> # функций), существует простое измерительное решение для закрытого формы для расчета коэффициентов, которые гарантируют наименьшую квадратный минимизацию. Это дано,

Детальный вывод и обсуждение этого решения – Обсуждается здесь Отказ

У одного есть два варианта:

(а) Использование простой мультипликативной матрицы обратной.

(б) Первые вычисления Мур-Пенроза Обобщенная псевдоинверсная матрица X-DATA, а затем принимая точечный продукт с Y-Data. Потому что этот 2-й процесс включает Особое значение для разложения (SVD) , он медленнее, но он может работать в некондиционных данных хорошо.

Метод: Sklearn.linear_model.linearregression ()

Это Quintessential метод Используется большинством машиноводных инженеров и ученых данных. Конечно, для реальной мировой проблемы, вероятно, никогда не используется и не используется и заменяется поперечному и регуляризованным алгоритмам, таким как Регрессия Лассо или Регрессия Ridge Отказ Но существенное ядро этих продвинутых функций лежит в этой модели.

Измерение скорости и сложности времени этих методов

В качестве ученого данных следует всегда искать точные, но быстрые методы/функции для работы моделирования данных. Если метод по своей природе медленнее, то он создаст узкое место для выполнения для больших наборов данных.

Хороший способ определить масштабируемость – это запустить модели для увеличения размера набора данных, извлечь время выполнения для всех прогонов и построить тенденцию.

Вот код котла для этого Отказ И вот результат. Благодаря своей простоте, Stats.lineRegress и простые матричные обратные методы самые быстрые, даже до 10 миллионов точек данных.

Резюме

В качестве ученого данных следует всегда исследовать несколько вариантов для решения того же анализа или моделирования и выбирать лучшее для его/ее особой проблемы.

В этой статье мы обсудили 8 способов выполнить простую линейную регрессию. Большинство из них масштабируемы для более обобщенного многократного моделирования и моделирования полиномиальной регрессии. Мы не перечислили значение R2 для этих методов, поскольку все они очень близки к 1.

Для регрессии с одной переменной, с миллионами искусственно генерируемых точек данных, коэффициент регрессии очень хорошо оценивается.

Целью данной статьи является главным образом для обсуждения относительной скорости/вычислительной сложности этих методов. Мы показали измерение вычислительной сложности каждого из них путем тестирования на синтезированном наборе данных растущего размера (до 10 миллионов образцов). Удивительно, что простое матричное обратное аналитическое решение работает довольно быстро по сравнению с широко используемой линейной моделью Scikit-Learn.

Если у вас есть какие-либо вопросы или идеи, пожалуйста, свяжитесь с автором на тиртхрадкие [at] gmail.com Отказ Также вы можете проверить автора Репозитории Github Для других забавных фрагментов в Python, R, или Matlab и Machine обучают ресурсы. Если вы, как и я, увлечен обучением машины/науки/данные/полупроводники, пожалуйста, не стесняйтесь Добавь меня на LinkedIn или Подпишись на меня в Твиттере.