Регрессионный анализ — это мощный статистический метод, который позволяет нам понять взаимосвязь между переменными и делать прогнозы на основе исторических данных. В этом блоге мы поделимся основами регрессионного анализа с использованием библиотеки Python scikit-learn. Независимо от того, являетесь ли вы специалистом по данным, аналитиком или энтузиастом, понимание регрессионного анализа расширит ваш аналитический инструментарий и позволит вам извлечь ценную информацию из ваших данных.
Что такое регрессионный анализ?
Регрессионный анализ — это статистический метод, используемый для моделирования связи между зависимой переменной и одной или несколькими независимыми переменными. Это помогает нам понять, как зависимая переменная изменяется в ответ на изменения независимых переменных. Регрессионный анализ имеет различные применения, включая прогнозирование продаж на основе расходов на рекламу, оценку цен на жилье на основе местоположения и характеристик, а также анализ влияния переменных на удовлетворенность клиентов.
Scikit-learn
Библиотека машинного обучения с открытым исходным кодом для Python предлагает широкий спектр инструментов и алгоритмов для предварительной обработки данных, обучения моделей и оценки. Его удобный интерфейс и обширная коллекция алгоритмов делают его популярным выбором для задач машинного обучения.
Ключевые особенности scikit-learn:
- Удобный интерфейс: Scikit-learn предоставляет последовательный и интуитивно понятный API, позволяющий пользователям применять методы машинного обучения, не теряясь в сложных деталях реализации.
- Обширная коллекция алгоритмов: библиотека включает широкий спектр алгоритмов машинного обучения, таких как регрессия, классификация, кластеризация и уменьшение размерности, что делает ее пригодной для различных задач.
- Предварительная обработка данных и проектирование признаков: Scikit-learn предоставляет инструменты для обработки пропущенных значений, масштабирования и нормализации данных, кодирования категориальных переменных и методов выбора признаков.
- Выбор и оценка модели. Библиотека предлагает утилиты для выбора модели, настройки гиперпараметров и оценки модели с использованием различных показателей производительности.
- Полная интеграция с другими библиотеками: Scikit-learn легко интегрируется с другими библиотеками Python, такими как Pandas, Matplotlib и NumPy, расширяя свои возможности для анализа и визуализации данных.
- Активное сообщество и документация. Благодаря активному сообществу разработчиков и пользователей scikit-learn предоставляет обширную документацию и поддержку, что делает ее доступной как для начинающих, так и для опытных практиков.
Линейная регрессия с scikit-learn
Линейная регрессия — это фундаментальный метод регрессии, который моделирует взаимосвязь между переменными с помощью прямой линии. Он предполагает линейную зависимость между независимыми и зависимыми переменными.
Этапы выполнения линейной регрессии с использованием scikit-learn включают предварительную обработку данных, подбор модели, интерпретацию коэффициентов и оценку производительности модели.
Шаг 1: Предварительная обработка данных
Прежде чем применять линейную регрессию, необходимо предварительно обработать данные, чтобы убедиться, что они соответствуют предположениям модели линейной регрессии, и подготовить их к анализу. Обычно это включает следующие шаги:
- Обработка пропущенных данных: проверьте пропущенные значения и решите, как с ними обращаться. Вы можете либо удалить строки с отсутствующими значениями, либо заменить их с помощью соответствующих методов.
- Масштабирование признаков: если независимые переменные имеют разные масштабы, полезно масштабировать их, чтобы убедиться, что они вносят одинаковый вклад в регрессионную модель. Общие методы масштабирования включают стандартизацию (среднее значение = 0, стандартное отклонение = 1) или нормализацию (масштабирование значений до определенного диапазона, например, [0, 1]).
- Разделение обучения и тестирования: разделите набор данных на обучающий набор и тестовый набор. Обучающий набор используется для подгонки модели, а тестовый набор используется для оценки ее производительности. Типичное соотношение разделения составляет 70–80% для обучения и 20–30% для тестирования.
Шаг 2: Подгонка модели
После предварительной обработки данных мы можем приступить к настройке модели линейной регрессии с помощью scikit-learn. Scikit-learn предоставляет класс LinearRegression, который упрощает подбор моделей линейной регрессии.
Следующие шаги описывают процесс:
- Импортируйте необходимые библиотеки:
from sklearn.linear_model import LinearRegression import numpy as np
2. Создайте независимую переменную (переменные) и зависимую переменную:
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1) y = np.array([2, 4, 6, 8, 10])
3. Создайте экземпляр класса LinearRegression: код pythonCopy
model = LinearRegression()
4. Подгоните модель к данным:
model.fit(X, y)
Шаг 3: Интерпретация коэффициентов После подбора модели мы можем интерпретировать коэффициенты, чтобы понять взаимосвязь между независимыми и зависимыми переменными. Коэффициенты представляют наклон линии регрессии.
Чтобы получить доступ к значениям коэффициента и перехвата, мы можем использовать следующие атрибуты объекта модели:
model.coef_
: возвращает коэффициенты независимых переменных.model.intercept_
: возвращает значение перехвата.
Например, чтобы напечатать коэффициент и значения перехвата:
print("Coefficient:", model.coef_) print("Intercept:", model.intercept_)
Коэффициент представляет собой изменение зависимой переменной при изменении независимой переменной на одну единицу. Точка пересечения — это значение зависимой переменной, когда все независимые переменные равны нулю.
Шаг 4: Оценка производительности модели Чтобы оценить производительность модели линейной регрессии, нам нужно оценить, насколько хорошо она предсказывает целевую переменную. Доступны различные показатели оценки, в том числе:
- Среднеквадратическая ошибка (MSE): измеряет среднеквадратичную разницу между прогнозируемыми и фактическими значениями. Более низкий MSE указывает на лучшую производительность.
- R-квадрат (R²): представляет долю дисперсии зависимой переменной, которая может быть объяснена независимыми переменными. Он варьируется от 0 до 1, при этом более высокое значение указывает на лучшее соответствие.
Scikit-learn предоставляет удобные функции для расчета этих показателей. Например:
from sklearn.metrics import mean_squared_error, r2_score # Make predictions on the training data y_pred = model.predict(X) # Calculate mean squared error mse = mean_squared_error(y, y_pred) print("Mean Squared Error:", mse) # Calculate R-squared r2 = r2_score(y, y_pred) print("R-squared:", r2)
Меньшая среднеквадратическая ошибка и более высокое значение R-квадрата указывают на лучшую модель.
Следуя этим шагам, вы можете эффективно выполнять линейную регрессию с помощью scikit-learn, предварительно обрабатывать данные, подгонять модель, интерпретировать коэффициенты и оценивать ее производительность. Этот процесс позволяет вам получить представление, сделать прогнозы и понять взаимосвязь между переменными в вашем наборе данных.
Полный пример кода:
from sklearn.linear_model import LinearRegression import numpy as np from sklearn.metrics import mean_squared_error, r2_score # Create sample data X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1) y = np.array([2, 4, 6, 8, 10]) # Create and fit the linear regression model model = LinearRegression() model.fit(X, y) # Print the coefficient and intercept print("Coefficient:", model.coef_) print("Intercept:", model.intercept_) # Predict using the model X_test = np.array([6]).reshape(-1, 1) y_pred = model.predict(X_test) print("Predicted value:", y_pred) # Make predictions on the training data y_pred = model.predict(X) # Calculate mean squared error mse = mean_squared_error(y, y_pred) print("Mean Squared Error:", mse) # Calculate R-squared r2 = r2_score(y, y_pred) print("R-squared:", r2)
Нелинейная регрессия и полиномиальная регрессия
В то время как линейная регрессия предполагает линейную связь между переменными, многие сценарии реального мира демонстрируют нелинейные закономерности. В таких случаях полиномиальная регрессия может быть мощным методом для захвата этих нелинейных отношений. Полиномиальная регрессия подбирает полиномиальную функцию заданной степени к данным, обеспечивая более гибкое моделирование.
В этом разделе мы рассмотрим, как применять полиномиальную регрессию с помощью scikit-learn. Мы рассмотрим этапы создания полиномиальных функций, подгонки модели и визуализации результатов.
Шаг 1: Создание полиномиальных функций Чтобы зафиксировать нелинейную связь, нам нужно создать дополнительные полиномиальные функции из исходной независимой переменной (переменных). Это включает в себя преобразование исходных признаков в полиномы более высокой степени.
Scikit-learn предоставляет класс PolynomialFeatures для создания полиномиальных функций. Параметр степени определяет максимальную степень генерируемых полиномиальных признаков.
Следующие шаги описывают процесс:
- Импортируйте необходимые библиотеки:
from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression import numpy as np
2. Создайте независимую переменную (переменные) и зависимую переменную:
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1) y = np.array([2, 6, 10, 15, 20])
3. Создайте полиномиальные функции:
poly_features = PolynomialFeatures(degree=2) X_poly = poly_features.fit_transform(X)
Массив X_poly
будет содержать исходные функции, а также дополнительные полиномиальные функции до указанной степени.
Шаг 2: Подгонка модели полиномиальной регрессии После создания полиномиальных функций мы можем приступить к подгонке модели полиномиальной регрессии, используя класс LinearRegression
scikit-learn.
Следующие шаги описывают процесс:
- Создайте экземпляр класса
LinearRegression
:
model = LinearRegression()
2. Подгоните модель к полиномиальным признакам:
model.fit(X_poly, y)
Шаг 3: Визуализация результатов Чтобы визуализировать результаты полиномиальной регрессии, мы можем построить исходные точки данных вместе с подобранной кривой.
Следующие шаги описывают процесс:
- Импортируйте необходимые библиотеки:
import matplotlib.pyplot as plt
2. Сгенерируйте диапазон значений в диапазоне исходных данных:
X_range = np.linspace(X.min(), X.max(), 100).reshape(-1, 1)
3. Преобразуйте значения диапазона в полиномиальные функции:
X_range_poly = poly_features.transform(X_range)
4. Предсказать значения зависимой переменной, используя полиномиальные признаки:
y_pred = model.predict(X_range_poly)
5. Постройте исходные точки данных и подобранную кривую:
plt.scatter(X, y, color='blue', label='Actual Data') plt.plot(X_range, y_pred, color='red', label='Polynomial Regression') plt.xlabel('X') plt.ylabel('y') plt.title('Polynomial Regression') plt.legend() plt.show()
На графике будут показаны исходные точки данных и кривая, представляющая подобранную модель полиномиальной регрессии.
Следуя этим шагам, вы сможете эффективно применять полиномиальную регрессию для захвата нелинейных отношений в ваших данных. Гибкость полиномиальной регрессии позволяет более точно моделировать сложные отношения. Визуализация результатов помогает понять соответствие модели и получить представление о данных.f
Образец кода:
from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression import numpy as np import matplotlib.pyplot as plt # Create sample data X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1) y = np.array([2, 6, 10, 15, 20]) # Create polynomial features poly_features = PolynomialFeatures(degree=2) X_poly = poly_features.fit_transform(X) # Fit the polynomial regression model model = LinearRegression() model.fit(X_poly, y) # Predict using the model X_range = np.linspace(X.min(), X.max(), 100).reshape(-1, 1) X_range_poly = poly_features.transform(X_range) y_pred = model.predict(X_range_poly) print("Predicted value:", y_pred) plt.scatter(X, y, color='blue', label='Actual Data') plt.plot(X_range, y_pred, color='red', label='Polynomial Regression') plt.xlabel('X') plt.ylabel('y') plt.title('Polynomial Regression') plt.legend() plt.show()
Прогнозировать Акции Цены
Теперь мы будем использовать библиотеку yfinance для извлечения исторических данных о ценах на акции и применим линейную регрессию и полиномиальную регрессию с использованием scikit-learn для прогнозирования будущих цен на акции. Это даст нам представление о потенциальном использовании регрессионного анализа для прогнозирования цен на акции.
Для начала нам нужно установить библиотеку yfinance, если она еще не установлена. Вы можете установить его, выполнив следующую команду:
pip install yfinance
После установки yfinance мы можем приступить к извлечению исторических данных о ценах на акции. В этом примере мы будем использовать символ акций «AAPL» для Apple Inc., но вы можете заменить его любым другим символом акций по вашему выбору.
import yfinance as yf # Specify the stock symbol and time period stock_symbol = "AAPL" start_date = "2022-01-01" end_date = "2022-12-31" # Fetch historical stock price data using yfinance data = yf.download(stock_symbol, start=start_date, end=end_date) # Print the fetched data print(data)
Приведенный выше код импортирует библиотеку yfinance как yf. Затем мы указываем символ акции (в данном случае «AAPL») и даты начала и окончания для данных, которые мы хотим получить. Вызывая функцию yf.download и передавая символ акции и диапазон дат, мы извлекаем исторические данные о цене акций и сохраняем их в переменной данных.
Теперь, когда у нас есть исторические данные о ценах на акции, мы можем приступить к применению линейной регрессии и полиномиальной регрессии для прогнозирования будущих цен на акции. Для этой цели мы будем использовать классы LinearRegression и PolynomialFeatures scikit-learn.
import yfinance as yf from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures import numpy as np # Fetch historical stock price data using yfinance stock_symbol = "AAPL" start_date = "2022-01-01" end_date = "2022-12-31" data = yf.download(stock_symbol, start=start_date, end=end_date) # Extract the 'Close' price as the dependent variable (y) y = data['Close'].values # Create an array of sequential numbers as the independent variable (x) x = np.arange(len(data)).reshape(-1, 1) # Linear Regression linear_model = LinearRegression() linear_model.fit(x, y) # Polynomial Regression poly_features = PolynomialFeatures(degree=3) x_poly = poly_features.fit_transform(x) poly_model = LinearRegression() poly_model.fit(x_poly, y) # Predicting stock prices x_future = np.arange(len(data), len(data) + 10).reshape(-1, 1) linear_pred = linear_model.predict(x_future) poly_pred = poly_model.predict(poly_features.transform(x_future)) print("Linear Regression Predictions:", linear_pred) print("Polynomial Regression Predictions:", poly_pred)
В приведенном выше коде мы сначала импортируем классы LinearRegression и PolynomialFeatures из scikit-learn. Затем мы извлекаем цену закрытия из полученных данных и присваиваем ее зависимой переменной y. Для независимой переменной x мы создаем массив последовательных чисел, представляющих периоды времени.
Затем мы создаем экземпляр модели LinearRegression и сопоставляем его с данными x и y для линейной регрессии. Мы также создаем экземпляр PolynomialFeatures и преобразуем данные x, чтобы включить полиномиальные функции до указанной степени (в данном случае 3). Затем мы создаем еще один экземпляр LinearRegression для полиномиальной регрессии и сопоставляем его с преобразованными данными x.
Наконец, мы прогнозируем цены акций на следующие 10 периодов времени, используя как модель линейной регрессии, так и модель полиномиальной регрессии. Прогнозируемые значения хранятся в переменных linear_pred и poly_pred соответственно. Мы распечатываем эти прогнозы в демонстрационных целях.
В этом блоге мы рассмотрели основы scikit-learn, его значение в области машинного обучения и его интеграцию с другими мощными библиотеками Python. Python в сочетании с scikit-learn, Pandas, Matplotlib и NumPy обеспечивает надежную экосистему для анализа данных и приложений машинного обучения. Продолжая свое путешествие в области машинного обучения, не забывайте исследовать, экспериментировать и расширять свои знания, чтобы раскрыть весь потенциал Python и scikit-learn.
Спасибо за чтение! Если вы нашли эту статью полезной, не забудьте поставить ей лайк. Не стесняйтесь, пишите мне с любыми комментариями или предложениями для будущих тем.
🔗 Ознакомьтесь с эксклюзивной программой членства на it.works для получения дополнительных ресурсов Python, руководств и поддержки сообщества.
Дополнительные материалы на PlainEnglish.io.
Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .