Регрессия
Что такое регрессия?
Регрессия — это метод, который позволяет нам предсказывать числовые значения на основе имеющихся данных. Представь себе, что ты пытаешься угадать, сколько пицц нужно заказать на вечеринку. Если ты знаешь, сколько людей придет, ты можешь использовать регрессию, чтобы предсказать количество пицц. Но не переживай, мы не будем заказывать 10 пицц на одного человека!
Линейная регрессия
Начнем с простейшего случая — линейной регрессии. Это как прямолинейный подход к решению проблем. Например, у нас есть данные о том, сколько часов студенты учились и какие оценки они получили. Мы хотим узнать, как время подготовки влияет на оценки. Давай создадим небольшой набор данных и построим модель линейной регрессии.
Пример:
# Импортируем необходимые библиотеки
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# Создаем данные: часы учебы и соответствующие оценки
hours_studied = np.array([1, 2, 3, 4, 5]).reshape(-1, 1) # Часы учебы (входные данные)
grades = np.array([50, 60, 70, 80, 90]) # Оценки (целевые значения)
# Создаем объект модели линейной регрессии
model = LinearRegression()
# Обучаем модель на наших данных
model.fit(hours_studied, grades)
# Предсказываем оценки на основе часов учебы
predicted_grades = model.predict(hours_studied)
# Визуализируем результаты
plt.scatter(hours_studied, grades, color='blue', label='Фактические данные') # Показать фактические данные
plt.plot(hours_studied, predicted_grades, color='red', label='Линейная регрессия') # Показать линию регрессии
plt.title('Линейная регрессия: Время учебы vs Оценки') # Заголовок графика
plt.xlabel('Часы учебы') # Подпись оси X
plt.ylabel('Оценки') # Подпись оси Y
plt.legend() # Показать легенду
plt.show() # Отобразить график
Множественная регрессия
А теперь давай усложним задачу — множественная регрессия. Это когда у нас есть несколько факторов. Например, мы хотим предсказать цену квартиры исходя из ее площади и количества комнат. Это уже похоже на настоящую жизнь!
Пример кода на Python для предсказания цены квартиры на основе ее площади и количества комнат с использованием множественной линейной регрессии.
# Импортируем необходимые библиотеки
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
# Создаем данные: площадь квартиры (в квадратных метрах), количество комнат и соответствующие цены
data = {
'area': [30, 45, 60, 75, 90, 100, 120, 150, 180, 200], # Площадь в квадратных метрах
'rooms': [1, 2, 2, 3, 3, 4, 4, 5, 5, 6], # Количество комнат
'price': [30000, 45000, 60000, 75000, 90000, 110000, 130000, 150000, 180000, 200000] # Цена в условных единицах
}
# Преобразуем данные в DataFrame
df = pd.DataFrame(data)
# Определяем входные (X) и выходные (y) данные
X = df[['area', 'rooms']] # Признаки
y = df['price'] # Целевая переменная
# Разделяем данные на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Создаем объект модели множественной линейной регрессии
model = LinearRegression()
# Обучаем модель на обучающих данных
model.fit(X_train, y_train)
# Предсказываем цены на тестовых данных
predicted_prices = model.predict(X_test)
# Выводим коэффициенты модели
print("Коэффициенты модели:", model.coef_)
print("Свободный член (intercept):", model.intercept_)
# Визуализируем результаты (для простоты визуализации будем использовать только площадь)
plt.scatter(df['area'], df['price'], color='blue', label='Фактические данные') # Показать фактические данные
plt.scatter(X_test['area'], predicted_prices, color='red', label='Предсказанные данные') # Показать предсказанные данные
plt.title('Множественная регрессия: Площадь квартиры vs Цена') # Заголовок графика
plt.xlabel('Площадь квартиры (м²)') # Подпись оси X
plt.ylabel('Цена квартиры') # Подпись оси Y
plt.legend() # Показать легенду
plt.show() # Отобразить график