Машинное обучение и анализ данных с помощью Python[14]

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

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

Тот же набор данных для телерадиовещания, который изучали несколько лекций назад.

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeRegressor
import sklearn.metrics as mt
from sklearn.ensemble import BaggingRegressor
original_data=pd.read_csv("C:/Users/.../###14.csv")
data=original_data.copy()
y=data["Sales"]
X=data.drop(columns="Sales",axis=1)
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)
dtmodel=DecisionTreeRegressor(random_state=0)
dtmodel.fit(X_train,y_train)
dt_prediction=dtmodel.predict(X_test)
r2=mt.r2_score(y_test,dt_prediction)
rmse=mt.mean_squared_error(y_test,dt_prediction,squared=False)
print("Desicion Tree R2:{} Desicion Tree RMSE:{}".format(r2,rmse))
bg_model=BaggingRegressor(random_state=0)
bg_model.fit(X_train,y_train)
bg_prediction=bg_model.predict(X_test)
r2_2nd=mt.r2_score(y_test,bg_prediction)
rmse_2nd=mt.mean_squared_error(y_test,bg_prediction,squared=False)
print("Bagging R2:{} Bagging RMSE:{}".format(r2_2nd,rmse_2nd))
#out put is as below
Desicion Tree R2:0.879284232600134 Desicion Tree RMSE:1.9313855130449744
Bagging R2:0.9512905689441477 Bagging RMSE:1.2268557372405282

Короче говоря, без оптимизации гиперпараметров метод ансамбля пакетов, который объединяет несколько деревьев решений, смог дать лучшие оценки r2 и rmse по сравнению с моделью с одним деревом решений. Агрегирование нескольких деревьев решений с помощью бэггинга помогло уменьшить дисперсию и предотвратить переоснащение, что привело к улучшению показателей производительности.

from sklearn.model_selection import train_test_split,GridSearchCV
parameters_1st={"min_samples_split":range(2,25),"max_leaf_nodes":range(2,25)}
grid1st=GridSearchCV(estimator=dtmodel,param_grid=parameters_1st,cv=10)
grid1st.fit(X_train,y_train)
print(grid1st.best_params_)

parameters_2nd={"n_estimators":range(2,25)}
grid2nd=GridSearchCV(estimator=bg_model,param_grid=parameters_2nd,cv=10)
grid2nd.fit(X_train,y_train)
print(grid2nd.best_params_)
#output is as below
{'max_leaf_nodes': 18, 'min_samples_split': 4}
{'n_estimators': 23}
dtmodel=DecisionTreeRegressor(random_state=0,max_leaf_nodes=18,min_samples_split=4)
bg_model=BaggingRegressor(random_state=0,n_estimators=23)

#output is as below
Desicion Tree R2:0.8944127560700043 Desicion Tree RMSE:1.8063117071549948
Bagging R2:0.9568205184197045 Bagging RMSE:1.1551162185082802

Частота ошибок еще лучше с настройкой