Введение в регрессионные сплайны

машинное обучение анализ данных
Введение в регрессионные сплайны
Автор: Гурчетан Сингх Сборник: Бот

Примечание редактора: как новичок в области науки о данных, был ли первый алгоритм линейной регрессии, с которым вы столкнулись? Когда вы используете его для разных наборов данных, вы обнаружите, что он очень прост и удобен, но многие проблемы в действительности являются нелинейными, и этот подход, основанный на линейной зависимости между зависимой переменной и независимой переменной, иногда не работает. На этом этапе вы попробовали полиномиальную регрессию, и, хотя в большинстве случаев она давала лучшие результаты, ваша модель также часто перестраивалась, когда сталкивалась с сильно изменчивым набором данных.

переоснащение

Наши модели всегда получаются слишком гибкими, что не совсем подходит для «невидимых» данных. Возможно, вы слышали о взвешенном методе наименьших квадратов, сглаживании ядра, локальном полиномиальном приближении, но когда дело доходит до оценки неизвестных функций в модели, оценка сплайном по-прежнему занимает важное место. В этой статье будет кратко представлен метод оценки сплайна — регрессионный сплайн (регрессионный сплайн) и его реализация на Python с помощью некоторых базовых знаний о линейной и полиномиальной регрессии.

Примечание. Эта статья написана Гурчетаном Сингхом, индийским специалистом по данным, и предполагается, что читатель имеет предварительное представление о линейной регрессии и полиномиальной регрессии.

содержание

1. Понимание данных

2. Линейная регрессия

3. Улучшение линейной регрессии: полиномиальная регрессия

4. Метод регрессионных сплайнов и его реализация.

  • кусочно-ступенчатая функция

  • базисная функция

  • кусочно-полиномиальный

  • Пределы и сплайны

  • Кубические сплайны и натуральные кубические сплайны

  • Выберите количество и расположение узлов

  • Сравнение сплайнов регрессии и полиномиальной регрессии

понимать данные

Чтобы понять эти концепции, сначала мы должны упомянуть этот желтый, «прекрасный», похожий на кирпич учебник: «Введение в статистическое обучение с приложениями в R». Несколько дней назад многие люди в Твиттере ретвитили шутку о том, что кто-то подобрал на обочине потрепанное «Введение в статистическое обучение» с пустой бутылкой из-под водки и пустым портсигаром, лежащими на боку. Токсичность, пожалуйста. испытайте это на себе.

Секс, алкоголь и SVM

В книге упоминается набор данных для прогнозирования заработной платы, и заинтересованные читатели могут щелкнуть здесь, чтобы загрузить его. Этот набор данных содержит различную информацию, такую ​​как удостоверение личности, год, возраст, пол, семейное положение, раса, уровень образования, местоположение, категория работы, состояние здоровья, страховые взносы и зарплата. Чтобы ввести сплайн-регрессию, здесь мы берем «возраст» в качестве независимой переменной и используем ее для прогнозирования заработной платы целевого объекта (зависимая переменная).

Сначала обработайте данные:

  1. # 导入模块

  2. import pandas as pd

  3. import numpy as np

  4. import statsmodels.api as sm

  5. import matplotlib.pyplot as plt

  6. %matplotlib inline

  7. # 读取data_set

  8. data = pd.read_csv("Wage.csv")

  9. data.head()

скопировать код

                                                
  1. data_x = data['age']

  2. data_y = data['wage']

  3. # 将数据分为训练集和测试集

  4. from sklearn.model_selection import train_test_split

  5. train_x, valid_x, train_y, valid_y = train_test_split(data_x, data_y, test_size=0.33, random_state = 1)

  6. # 年龄和工资关系b/w的可视化

  7. import matplotlib.pyplot as plt

  8. plt.scatter(train_x, train_y, facecolor='None', edgecolor='k', alpha=0.3)

  9. plt.show()

скопировать код

Глядя на эту картинку, что вы думаете об этих дискретных точках? Являются ли они положительными, отрицательными или совершенно неуместными? Вы можете поделиться своими мыслями в разделе комментариев. Но подождите, давайте сначала проведем анализ.

Линейная регрессия

Линейная регрессия — чрезвычайно простой и наиболее широко используемый статистический метод прогнозного моделирования. Как алгоритм обучения с учителем, он может решать проблемы регрессии. Когда мы устанавливаем линейную связь между зависимой переменной и независимой переменной, мы получаем линейную модель. Математически это можно рассматривать как линейное выражение:

В приведенной выше формуле Y — зависимая переменная, X — независимая переменная, которую мы часто называем функцией, а β — весовой коэффициент, присвоенный функции, который указывает важность каждой функции для окончательного результата прогнозирования. Например, мы устанавливаем X1оказывает наибольшее влияние на результаты уравнения, тогда по сравнению с другими признаками β1Значение / веса будет больше, чем частное других коэффициентов и весов.

Итак, как бы выглядело это уравнение, если бы у нас была только одна функция в нашей линейной регрессии?

Мы называем эту линейную регрессию только с одной независимой переменной простой линейной регрессией. Поскольку предыдущей целью было предсказать «зарплату» сотрудника на основе «возраста», мы выполним простую линейную регрессию на обучающем наборе и вычислим ошибку модели (среднеквадратическую ошибку RMSE) на тестовом наборе.

  1. from sklearn.linear_model import LinearRegression

  2. # Fit线性回归模型

  3. x = train_x.reshape(-1,1)

  4. model = LinearRegression()

  5. model.fit(x,train_y)

  6. print(model.coef_)

  7. print(model.intercept_)

скопировать код
  1. -> array([0.72190831])

скопировать код
  1. -> 80.65287740759283

скопировать код
  1. # 在测试集上预测

  2. valid_x = valid_x.reshape(-1,1)

  3. pred = model.predict(valid_x)

  4. # 可视化

  5. # 我们将从valid_x的最小值和最大值之间选70个plot画图

  6. xp = np.linspace(valid_x.min(),valid_x.max(),70)

  7. xp = xp.reshape(-1,1)

  8. pred_plot = model.predict(xp)

  9. plt.scatter(valid_x, valid_y, facecolor='None', edgecolor='k', alpha=0.3)

  10. plt.plot(xp, pred_plot)

  11. plt.show()

скопировать код

Теперь мы можем рассчитать RMSE, предсказанный моделью:

  1. from sklearn.metrics import mean_squared_error

  2. from math import sqrt

  3. rms = sqrt(mean_squared_error(valid_y, pred))

  4. print(rms)

  5. -> 40.436

скопировать код

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

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

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

Усовершенствования линейной регрессии: полиномиальная регрессия

Давайте сначала посмотрим на эти визуализации:

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

Полиномиальная регрессия расширяет линейные модели, добавляя дополнительные предикторы, самым непосредственным образом добавляя степени (мощности) к исходным независимым переменным. Например, кубическая регрессия поместит X1, ИКС22, ИКС33как независимая переменная.

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

Если мы увеличим значение порядка, вся кривая будет колебаться с высокой частотой, что приведет к переобучению модели.

  1. # 为二次回归函数生成权值,degree =2

  2. weights = np.polyfit(train_x, train_y, 2)

  3. print(weights)

  4. -> array([ -0.05194765,   5.22868974, -10.03406116])

  5. # 用给定的权值生成模型

  6. model = np.poly1d(weights)

  7. # 在测试集上预测

  8. pred = model(valid_x)

  9. # 用70个观察值画图

  10. xp = np.linspace(valid_x.min(),valid_x.max(),70)

  11. pred_plot = model(xp)

  12. plt.scatter(valid_x, valid_y, facecolor='None', edgecolor='k', alpha=0.3)

  13. plt.plot(xp, pred_plot)

  14. plt.show()

скопировать код

Точно так же мы можем поднять степень (d) функции и посмотреть на график функции регрессии четвертой, двенадцатой, шестнадцатой и двадцать пятой степени:

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

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

Метод регрессионных сплайнов и его реализация

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

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

Источник: Р-Блоггеры

Мы называем красные точки этих разбиений узлами, а функцию, которая соответствует распределению данных в одном интервале, — кусочной функцией. Как показано на рисунке выше, это распределение данных может быть снабжено несколькими кусочными функциями.

кусочно-ступенчатая функция

Ступенчатая функция — одна из наиболее распространенных кусочных функций, это функция, которая остается постоянной на определенном интервале. Используя ступенчатую функцию, мы можем разделить диапазон X на несколько интервалов и разместить в каждом интервале разные константы.

Другими словами, допустим, мы установили K узлов в диапазоне X: C1,C2,...,CK, затем создайте K+1 новых переменных:

I( ) — это индикаторная функция, которая возвращает 1, если она находится в диапазоне, то есть условие истинно; в противном случае она возвращает 0.

  1. # 把数据分成4个连续的区间

  2. df_cut, bins = pd.cut(train_x, 4, retbins=True, right=True)

  3. df_cut.value_counts(sort=False)

  4. ->

  5. (17.938, 33.5]    504

  6. (33.5, 49.0]      941

  7. (49.0, 64.5]      511

  8. (64.5, 80.0]       54

  9. Name: age, dtype: int64

скопировать код
  1. df_steps = pd.concat([train_x, df_cut, train_y], keys=['age','age_cuts','wage'], axis=1)

  2. # 为年龄组创建虚拟变量

  3. df_steps_dummies = pd.get_dummies(df_cut)

  4. df_steps_dummies.head()

скопировать код

                                                                                                                        
  1. df_steps_dummies.columns = ['17.938-33.5','33.5-49','49-64.5','64.5-80']

  2. # 拟合广义线性模型

  3. fit3 = sm.GLM(df_steps.wage, df_steps_dummies).fit()

  4. # 把分段函数对应到相应的4个区间内

  5. bin_mapping = np.digitize(valid_x, bins)

  6. X_valid = pd.get_dummies(bin_mapping)

  7. # 删除异常值

  8. X_valid = pd.get_dummies(bin_mapping).drop([5], axis=1)

  9. # 预测

  10. pred2 = fit3.predict(X_valid)

  11. # 计算RMSE

  12. from sklearn.metrics import mean_squared_error

  13. from math import sqrt

  14. rms = sqrt(mean_squared_error(valid_y, pred2))

  15. print(rms)

  16. ->39.9

  17. # 用70个观察值画图

  18. xp = np.linspace(valid_x.min(),valid_x.max()-1,70)

  19. bin_mapping = np.digitize(xp, bins)

  20. X_valid_2 = pd.get_dummies(bin_mapping)

  21. pred2 = fit3.predict(X_valid_2)

скопировать код
  1. # 可视化

  2. fig, (ax1) = plt.subplots(1,1, figsize=(12,5))

  3. fig.suptitle('Piecewise Constant', fontsize=14)

  4. # 多项式回归线散点图

  5. ax1.scatter(train_x, train_y, facecolor='None', edgecolor='k', alpha=0.3)

  6. ax1.plot(xp, pred2, c='b')

  7. ax1.set_xlabel('age')

  8. ax1.set_ylabel('wage')

  9. plt.show()

скопировать код

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

базисная функция

Чтобы зафиксировать нелинейные факторы в регрессионных моделях, нам нужно выполнить некоторые преобразования для некоторых или даже для всех предикторов. Мы надеемся, что это очень общее преобразование, которое может избежать модели, рассматривающей каждую независимую переменную как линейную, и может гибко соответствовать распределениям данных различной формы, и является относительно менее «гибким», что может эффективно предотвратить чрезмерное соответствие.

Подобные преобразования, которые можно сгруппировать вместе для захвата распределения данных, называются базисными функциями, также известными как сплайн-базис. В этой задаче прогнозирования заработной платы в зависимости от возраста базис сплайна равен b.1(X), b2(Х),…,бK(ИКС).

Теперь, вместо подбора линейной модели с X, мы используем эту новую модель:

Давайте углубимся в одно из основных применений базисных функций: кусочные полиномы.

кусочно-полиномиальный

При введении кусочно-ступенчатой ​​функции мы ввели ее как «разделить X на несколько интервалов и подогнать разные константы в каждом интервале», применяя разницу между линейной регрессией и полиномиальной регрессией, кусочно-полиномиальная состоит в том, чтобы разделить X на несколько интервалов и соответствовать другому полиномиальная функция низкого порядка в пределах каждого интервала. Поскольку мощность функции невелика, изображение не сильно колеблется.

Например, кусочно-квадратичные полиномы могут вступить в игру, подбирая уравнение бинарной регрессии:

где β0, β1и бета2В разных интервалах значения разные. В частности, если у нас есть набор данных, содержащий один узел c, его кусочно-кубический полином должен иметь вид:

На самом деле это соответствует двум различным полиномиальным функциям: подмножество наблюдений с xi 01, β11, β21, β31, второй коэффициент равен β02, β12, β22, β32. Любая функция может быть снабжена минимальной матрицей среднеквадратичной ошибки.

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

Чем больше узлов, тем более гибким является кусочный полином, потому что мы хотим назначить разные функции для каждого интервала X, а форма функции зависит от распределения данных для этого интервала. В общем, если мы установим K различных узлов по всему диапазону X, мы получим K+1 различных кубических многочленов. Теоретически мы можем подогнать произвольный многочлен низкого порядка к одному интервалу.

Теперь давайте рассмотрим некоторые требования и ограничения, которые следует соблюдать при проектировании кусочных полиномов.

Ограничения и сплайны

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

Источник: Элементы статистического обучения (Advanced Nightmare).

Поскольку это кусочно, функция двух интервалов может показаться прерывистой. Чтобы избежать этого, необходимо ввести дополнительное ограничение.Полиномы с обеих сторон должны быть непрерывными в узлах.

Источник: Элементы статистического обучения.

После добавления этого ограничения мы получаем непрерывную кривую, но выглядит ли она идеально? Ответ, очевидно, нет.Прежде чем читать следующее, мы можем задать себе вопрос, почему мы не можем принять эту негладкую кривую?

Согласно приведенному выше рисунку можно обнаружить, что в это время узел все еще выделяется на кривой.Чтобы сгладить полином на узле, нам нужно добавить новое ограничение:Первая производная двух многочленов должна быть одинаковой. Здесь стоит отметить, что каждый раз, когда мы добавляем условие, полином эффективно освобождает одну степень свободы, что может уменьшить сложность кусочно-полиномиального подбора. Итак, на диаграмме выше мы использовали только 10 степеней свободы вместо 12.

Источник: Элементы статистического обучения.

С добавлением первой производной наш полином стал немного более гладким. В это время его степени свободы также уменьшаются с 12 до 8. Несмотря на то, что кривая значительно улучшилась, у нее еще есть много возможностей для улучшения. Итак, теперь давайте применим к нему новое ограничение:Вторая производная двух многочленов в узле должна быть одинаковой.

Источник: Элементы статистического обучения.

Эта кривая больше соответствует нашим ожиданиям, у нее всего 6 степеней свободы. нравитсяКусочный многочлен порядка m с m-1 непрерывными производными, мы называем его сплайном.

Кубические сплайны и натуральные кубические сплайны

Кубический сплайн относится к кусочному многочлену с набором ограничений (непрерывность, непрерывность первого и второго порядка). Обычно кубический сплайн с K узлами обычно имеет (K+1)×4-K×3, то есть K+4 размеров. При K=3 размерность равна 8, а степень свободы изображения равна размерности -1=7. Как правило, мы используем только кубические сплайны.

                                                                                                                                                                                                                        
  1. from patsy import dmatrix

  2. import statsmodels.api as sm

  3. import statsmodels.formula.api as smf

  4. # 在25、40和60三个节点生成三次样条

  5. transformed_x = dmatrix("bs(train, knots=(25,40,60), degree=3, include_intercept=False)", {"train": train_x},return_type='dataframe')

  6. # 在分区的数据集上拟合广义线性模型

  7. fit1 = sm.GLM(train_y, transformed_x).fit()

  8. # 生成4节三次样条曲线

  9. transformed_x2 = dmatrix("bs(train, knots=(25,40,50,65),degree =3, include_intercept=False)", {"train": train_x}, return_type='dataframe')

  10. # 在分区的数据集上拟合广义线性模型

  11. fit2 = sm.GLM(train_y, transformed_x2).fit()

  12. # 两个样条同时预测

  13. pred1 = fit1.predict(dmatrix("bs(valid, knots=(25,40,60), include_intercept=False)", {"valid": valid_x}, return_type='dataframe'))

  14. pred2 = fit2.predict(dmatrix("bs(valid, knots=(25,40,50,65),degree =3, include_intercept=False)", {"valid": valid_x}, return_type='dataframe'))

  15. # 计算RMSE

  16. rms1 = sqrt(mean_squared_error(valid_y, pred1))

  17. print(rms1)

  18. -> 39.4

  19. rms2 = sqrt(mean_squared_error(valid_y, pred2))

  20. print(rms2)

  21. -> 39.3

  22. # 用70个观察值画图

  23. xp = np.linspace(valid_x.min(),valid_x.max(),70)

  24. # 预测

  25. pred1 = fit1.predict(dmatrix("bs(xp, knots=(25,40,60), include_intercept=False)", {"xp": xp}, return_type='dataframe'))

  26. pred2 = fit2.predict(dmatrix("bs(xp, knots=(25,40,50,65),degree =3, include_intercept=False)", {"xp": xp}, return_type='dataframe'))

  27. # 绘制样条曲线和误差曲线

  28. plt.scatter(data.age, data.wage, facecolor='None', edgecolor='k', alpha=0.1)

  29. plt.plot(xp, pred1, label='Specifying degree =3 with 3 knots')

  30. plt.plot(xp, pred2, color='r', label='Specifying degree =3 with 4 knots')

  31. plt.legend()

  32. plt.xlim(15,85)

  33. plt.ylim(0,350)

  34. plt.xlabel('age')

  35. plt.ylabel('wage')

  36. plt.show()

скопировать код

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

По сравнению с кубическими сплайнами натуральные кубические сплайны добавляют линейное ограничение к граничной области. Здесь мы объясняем, что граничная область относится к области между максимальным/минимальным значением независимой переменной X и соответствующими максимальными и минимальными узлами, где сигнал является относительно разреженным, и допустимо просто контролировать значение RMSE с помощью линейной обработки. . В это время третий и второй порядки функции становятся равными 0, каждый из которых уменьшает по 2 степени свободы, и эти степени свободы находятся в двух участках каждой кривой, поэтому размерность полинома K+4 становится равной K.

                                                                                                                                                                                                                                    
  1. # 生成自然三次样条

  2. transformed_x3 = dmatrix("cr(train,df = 3)", {"train": train_x}, return_type='dataframe')

  3. fit3 = sm.GLM(train_y, transformed_x3).fit()

  4. # 在测试集上预测

  5. pred3 = fit3.predict(dmatrix("cr(valid, df=3)", {"valid": valid_x}, return_type='dataframe'))

  6. # Calculating RMSE value

  7. rms = sqrt(mean_squared_error(valid_y, pred3))

  8. print(rms)

  9. -> 39.44

  10. # 用70个观察值画图

  11. xp = np.linspace(valid_x.min(),valid_x.max(),70)

  12. pred3 = fit3.predict(dmatrix("cr(xp, df=3)", {"xp": xp}, return_type='dataframe'))

  13. # 绘制样条曲线

  14. plt.scatter(data.age, data.wage, facecolor='None', edgecolor='k', alpha=0.1)

  15. plt.plot(xp, pred3,color='g', label='Natural spline')

  16. plt.legend()

  17. plt.xlim(15,85)

  18. plt.ylim(0,350)

  19. plt.xlabel('age')

  20. plt.ylabel('wage')

  21. plt.show()

скопировать код

Количество и расположение узлов

Сказав все это, как мы выбираем узлы, когда подгоняем сплайны? Осуществимый метод — выбрать в качестве узла область резкого изменения в распределении данных, например, внезапное изменение экономических явлений — финансовый кризис; второй метод — установить больше узлов в местах, где изменения данных сложны, и это выглядит более стабильно.В месте меньше узлов, хотя это может работать, но в целом мы все еще перехватываем интервалы той же длины для простоты. Кроме того, третьим часто используемым методом является равномерное распределение одинакового количества точек выборки.

Здесь мы кратко представим четвертый, более объективный подход — перекрестную проверку. Для использования этого метода нам потребуется:

  • взять часть данных;

  • Подогнать к оставшимся данным сплайн с определенным количеством узлов;

  • Сопоставьте данные, полученные ранее, с помощью сплайна.

Мы повторяем этот процесс до тех пор, пока каждое наблюдение не будет проигнорировано 1 раз, а затем вычисляем RMSE для всей перекрестной проверки. Это может быть повторено несколько раз для разного количества узлов, и, наконец, выбирается значение K, которое выводит наименьшее среднеквадратичное отклонение.

Сравнение сплайнов регрессии и полиномиальной регрессии

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

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

резюме

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

Исходный адрес: Введение в регрессионные сплайны (с кодами Python)

Если у вас есть опыт или предложение, пожалуйста, укажите это в сообщении.