- •Линейная регрессия:
- •Загрузите набор данных соответствующей цифре вашего варианта. Убедитесь, что загрузка прошла корректно.
- •Проведите линейную регрессию используя LinearRegression. Получите коэффициенты регрессии и объясните полученные результаты.
- •Нелинейная регрессия:
- •Загрузите набор данных соответствующей букве вашего варианта. Убедитесь, что загрузка прошла корректно.
- •Используя train_test_split разбейте выборку на обучающую и тестовую. Проверьте, что тестовая выборка соответствует обучающей.
- •Проверьте работу стандартной линейной регрессии на загруженных данных. Постройте диаграмму рассеяния данных с выделенной полученной линией регрессии. Объясните полученный результат.
- •Для выбранной степени полинома, рассчитайте и проанализируйте полученные коэффициенты. Рассчитай значение метрик коэффициент детерминации, mape, mae.
- •Для выбранной степени полинома, постройте диаграмму рассеяния данных с линией, соответствующей полученному полиному. Сделайте выводы о качестве аппроксимации.
Проведите линейную регрессию используя LinearRegression. Получите коэффициенты регрессии и объясните полученные результаты.
Для начала импортируем из библиотеки sklearn.linear_model LinearRegression. Далее обучим тренировочную выборку на данной модели с помощью метода fit, а затем выведем коэффициенты регрессии. Реализация представлена в Листинге 1.3.1. Результат представлен в Листинге 1.3.2.
Листинг 1.3.1 – Реализация получения коэффициентов линейной регрессии
from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression() lin_reg.fit(X_train, y_train) coef = pd.Series(lin_reg.coef_, index=X.columns) print(coef, lin_reg.intercept_) |
Листинг 1.3.2 – Коэффициенты линейной регрессии
x1 42.657299 x2 27.311807 dtype: float64 0.2733245285895227 |
Оба предиката усиляют значения отклика. Сильнее всего влияет на отклик x1, он почти в 1,5 раза больше, чем x2. Свободный член близок к нулю что говорит о том, что при нулевых значениях предикатов модель предсказывает значение близкое к нулю. Таким образом, при увеличении значений предикатов значение отклика будет увеличиваться.
Для обучающей и тестовой выборки рассчитайте коэффициент детерминации, MAPE, MAE. Объясните полученные значений метрик. Сравните метрики для обучающей и тестовой выборки, сделайте выводы о качестве обобщения полученной модели.
Для начала импортируем необходимые функции из библиотеки sklearn.metrics: r2_score для расчета коэффициента детерминации, mean_absolute_error для расчета MAE и mean_absolute_percentage_error для расчета MAPE. Далее предскажем модель на обучающей и тестовой выборках. Затем рассчитаем и выведем значения коэффициентов для каждой выборки. Реализация представлена в Листинге 1.4.1. Результат представлен в Листинге 1.4.2.
Листинг 1.4.1 – Расчет коэффициента детерминации, MAPE и MAE
from sklearn.metrics import r2_score from sklearn.metrics import mean_absolute_error from sklearn.metrics import mean_absolute_percentage_error
y_train_pred = lin_reg.predict(X_train) y_test_pred = lin_reg.predict(X_test)
print(f"R² для train: {r2_score(y_train, y_train_pred)}") print(f"R² для test: {r2_score(y_test, y_test_pred)}") print(f"MAE для train: {mean_absolute_error(y_train, y_train_pred)}") print(f"MAE для test: {mean_absolute_error(y_test, y_test_pred)}") print(f"MAPE для train: {mean_absolute_percentage_error(y_train, y_train_pred)}") print(f"MAPE для test: {mean_absolute_percentage_error(y_test, y_test_pred)}") |
Листинг 1.4.2 – Полученные коэффициенты
R² для train: 0.9949415205492481 R² для test: 0.9944824991438895 MAE для train: 2.8862867442022617 MAE для test: 3.1335466444942948 MAPE для train: 0.3060835607107315 MAPE для test: 0.198247082364209 |
Полученные результаты показывают, что модель линейной регрессии точна на обеих выборках. Коэффициент детерминации для обучающей выборки составляет 0.9949, а для тестовой выборки – 0.9945. Это говорит о высоком качестве обобщения и сохранении точности модели на новых данных. MAE на обучающей выборке равна 2.8863, а на тестовой – 3.1335, что указывает на небольшую ошибку в предсказаниях и их почти одинаковый уровень на обеих выборках. MAPE для обучающей выборки составляет 30.61%, а на тестовой выборке – 19.82%. Ошибка на тестовой выборке существенно ниже обучающей. Возможно, в тестовой выборке преобладают более крупные значения y. В итоге, можно сказать, что модель не переобучена и хорошо обобщается.
Для модели, которая дала лучшие результаты, постройте диаграмму рассеяния между предикторами и откликом. На диаграмме изобразите какое значение должно быть, и какое предсказывается. Визуально оцените качестве построенного регрессора.
Для каждого признака диаграммы строились одинаково. Сначала с помощью plt.scatter синим цветом отображалась обучающая выборка, красным цветом – тестовая, черными крестами – предсказанная. Далее добавлялся заголовок, подписи осей, легенда и сетка. В конце диаграмма выводилась. Реализация представлена в Листинге 1.7.1. Диаграммы изображены на Рисунке 1.7.2 и Рисунке 1.7.3.
Листинг 1.7.1 – Реализация построения диаграмм рассеяния
plt.figure(figsize=(10,6)) plt.scatter(X_train['x1'], y_train, c = 'b', marker = '.', s=100, label='train') plt.scatter(X_test['x1'], y_test, c = 'r', marker = '.', s=100, label='test') plt.scatter(X_test['x1'], y_test_pred, c = 'black', marker = 'x', s=50, label='test_pred') plt.tight_layout() plt.title("Диаграмма рассеяния для x1") plt.xlabel("x1") plt.ylabel("y") plt.legend() plt.grid() plt.show()
plt.figure(figsize=(10,6)) plt.scatter(X_train['x2'], y_train, c = 'b', marker = '.', s=100, label='train') plt.scatter(X_test['x2'], y_test, c = 'r', marker = '.', s=100, label='test') plt.scatter(X_test['x2'], y_test_pred, c = 'black', marker = 'x', s=50, label='test_pred') plt.tight_layout() plt.title("Диаграмма рассеяния для x2") plt.xlabel("x2") plt.ylabel("y") plt.legend() plt.grid() plt.show() |
Рисунок 1.7.2 – Диаграмма рассеяния признака x1
Рисунок 1.7.3 – Диаграмма рассеяния признака x2
Анализ диаграмм показывает хорошее качество модели, так как предсказанные значения близки с реальными.
