Машинное обучение и анализ данных с помощью 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
Частота ошибок еще лучше с настройкой