ВВЕДЕНИЕ:
Если одна модель способна выполнять всю работу машинного обучения, такую как разработка функций, предварительная обработка данных, очистка, обработка дисбаланса данных, выбор модели, настройка гиперпараметров, сама по себе и генерирует выходные данные для любого соревнования хакатона, разве мы не будем называть это SuperStar-All в одной упаковке?
Да, Auto-ViML делает то же самое. Он самостоятельно выполняет все процессы машинного обучения и показывает лучшие результаты на хакатонах.
В этой статье давайте посмотрим, как Auto ViML работает для одной из аналитических задач Vidhya Hackathon в деталях.
Набор данных, который мы использовали для нашего анализа, доступен на сайте AV-хакатона ниже.
https://datahack.analyticsvidhya.com/contest/janatahack-healthcare-analytics-ii
Используя приведенную ниже команду PIP, пакет AutoViML можно установить в Python.
pip install autoviml
from autoviml.Auto_ViML import Auto_ViML
Модель может быть построена с использованием приведенных ниже комментариев. Помимо обучающих, тестовых данных, нам также необходимо определить целевую переменную. Нет необходимости в предварительной обработке. Об этом позаботится сама модель
Входные аргументы:
train - обучающий набор данных с целевым столбцом
target - название целевого столбца
test - тестовый набор данных без целевого столбца
отправка - необходимо указать путь к файлу. Его можно оставить как пустую строку. Рабочая папка будет по умолчанию.
scoring_parameter - «Balanced_accuracy» для нашего случая. Если нет, он примет соответствующий параметр оценки для проблемы и построит модель.
hyper_param - случайный поиск (RS) или поиск по сетке (GS). По умолчанию RS.
feature_reduction - По умолчанию = 'True', но для него можно установить значение False, если вы не хотите автоматического feature_reduction, поскольку в наборах данных изображений, таких как цифры и MNIST, вы получите лучшие результаты, если не уменьшите функции автоматически. Вы всегда можете попробовать и то, и другое, и посмотреть.
Флаг повышения - 4 возможных варианта.
Нет - будет построена линейная модель, False - будет построена модель случайного леса или дополнительных деревьев (бэггинг), True - будет построена модель XGBoost, CatBoost - будет построена модель CatBoost.
Add_Poly:
0 - ничего не делать;
1-Добавьте только переменные взаимодействия, такие как x1 x2, x2 x3,… x9 * 10 и т. Д .;
2-сложение взаимодействий и переменных в квадрате, таких как x1 2, x2 2 и т. Д .;
3-добавляет как взаимодействия, так и переменные в квадрате, такие как x1 x2, x1 ** 2, x2 x3, x2 ** 2 и т. Д.
Stacking_Flag:
По умолчанию - False. Если установлено True, будет добавлена дополнительная функция, полученная на основе прогнозов другой модели.
Binning_Flag:
По умолчанию установлено значение "Ложь". Если установлено значение "Истина", оно преобразует верхние числовые переменные в объединенные переменные с помощью метода, известного как объединение "энтропия". Это очень полезно для определенных наборов данных (особенно сложных для построения моделей).
Implanced_Flag:
По умолчанию - False. Если установлено значение True, он будет использовать SMOTE from Imbalanced-Learn для передискретизации Rare Class в несбалансированном наборе данных и уравновешивания классов (например, 50–50 в двоичной классификации). Это также работает для задач регрессии, когда у вас есть сильно искаженные распределения в целевой переменной. Auto_ViML создает дополнительные образцы, используя SMOTE для сильно несбалансированных данных.
Подробно: 0 - ограниченный вывод; 1- Больше графиков; 2- Много диаграмм и выводов
Возвращаемые значения:
Features1 - Используемые детали функции для анализа с помощью Auto-ViML
trainm - Предварительно обработанный набор данных поезда с прогнозированием
testm - Предварительно обработанный набор тестовых данных с предсказанием
model1 - будет иметь оптимальную детализацию модели. В нашем случае CalibratedClassifierCV определен Auto-ViML как лучшая модель, и соответствующие подробности приведены ниже.
CalibratedClassifierCV(base_estimator=OneVsRestClassifier(estimator=XGBClassifier(base_score=None, booster='gbtree', colsample_bylevel=None, colsample_bynode=None, colsample_bytree=None, gamma=None, gpu_id=None, importance_type='gain', interaction_constraints=None, learning_rate=None, max_delta_step=None, max_depth=None, min_child_weight=None, missing=nan, monotone_constraints=None, n_estimators=200, n_jobs=-1, nthread=-1, num_parallel_tree=None, random_state=99, reg_alpha=None, reg_lambda=None, scale_pos_weight=None, subsample=None, tree_method=None, validate_parameters=None, verbosity=None)), cv=5, method='isotonic')
INSIDE Auto-ViML:
Analysis taken care of by Auto-ViMl is listed below. ############## D A T A S E T A N A L Y S I S ####################### ALERT! Changing hyperparameter search to RS. Otherwise XGBoost will take too long for 10,000+ rows. Training Set Shape = (318438, 19) Training Set Memory Usage = 46.16 MB Test Set Shape = (137057, 18) Test Set Memory Usage = 18.82 MB Single_Label Target: ['Stay'] ################ Multi_Classification VISUALIZATION Started ##################### Random shuffling the data set before training Using RandomizedSearchCV for Hyper Parameter Tuning. This is 3X faster than GridSearchCV... ALERT! Setting Imbalanced_Flag to True in Auto_ViML for Multi_Classification problems improves results! Class -> Counts -> Percent 0-10: 23604 -> 7.4% 11-20: 78139 -> 24.5% 21-30: 87491 -> 27.5% 31-40: 55159 -> 17.3% 41-50: 11743 -> 3.7% 51-60: 35018 -> 11.0% 61-70: 2744 -> 0.9% 71-80: 10254 -> 3.2% 81-90: 4838 -> 1.5% 91-100: 2765 -> 0.9% More than 100 Days: 6683 -> 2.1% CAUTION: In Multi-Class Boosting (2+ classes), TRAINING WILL TAKE A LOT OF TIME! String or Multi Class target: Stay transformed as follows: {'21-30': 0, '11-20': 1, '31-40': 2, '51-60': 3, '0-10': 4, '41-50': 5, '71-80': 6, 'More than 100 Days': 7, '81-90': 8, '91-100': 9, '61-70': 10} Alert! Rare Class is not 1 but 10 in this data set ############## C L A S S I F Y I N G V A R I A B L E S #################### Classifying variables in data set... Number of Numeric Columns = 3 Number of Integer-Categorical Columns = 5 Number of String-Categorical Columns = 8 Number of Factor-Categorical Columns = 0 Number of String-Boolean Columns = 0 Number of Numeric-Boolean Columns = 0 Number of Discrete String Columns = 0 Number of NLP String Columns = 0 Number of Date Time Columns = 0 Number of ID Columns = 1 Number of Columns to Delete = 1 18 Predictors classified... This does not include the Target column(s) 2 variables removed since they were ID or low-information variables ['case_id', 'source'] ############# D A T A P R E P A R A T I O N AND C L E A N I N G ############# Filling missing values with "missing" placeholder and adding a column for missing_flags Columns with most missing values: ['City_Code_Patient', 'Bed Grade'] and their missing value totals: [4532, 113] Completed missing value Imputation. No more missing values in train. 2 new missing value columns added: ['Bed Grade_Missing_Flag', 'City_Code_Patient_Missing_Flag'] Test data has no missing values. Continuing... Completed Label Encoding and Filling of Missing Values for Train and Test Data Multi_Classification problem: hyperparameters are being optimized for balanced_accuracy ############# R E M O V I N G H I G H L Y C O R R E L A T E D V A R S ################# Removing highly correlated variables using SULA method among (18) numeric variables No numeric vars removed since none have high correlation with each other in this data... Splitting features into float and categorical (integer) variables: (3) float variables ... (15) categorical vars... ############## F E A T U R E S E L E C T I O N BY X G B O O S T #################### Current number of predictors = 18 Finding Important Features using Boosted Trees algorithm... using 18 variables... using 14 variables... using 10 variables... using 6 variables... using 2 variables... Found 16 important features Performing limited feature engineering for binning, add_poly and KMeans_Featurizer flags ... Train CV Split completed with TRAIN rows = 254750 , CV rows = 63688 Binning_Flag set to False or there are no float vars in data set to be binned KMeans_Featurizer set to False or there are no float variables in data Performing MinMax scaling of train and validation data ############### XGBoost M O D E L B U I L D I N G B E G I N S #################### Rows in Train data set = 254750 Features in Train data set = 16 Rows in held-out data set = 63688 Finding Best Model and Hyper Parameters for XGBoost model... Baseline Accuracy Needed for Model = 99.14% CPU Count = 8 in this device Using XGBoost Model, Estimated Training time = 140.11 mins ################## Imbalanced Model Training ############################ Imbalanced Training using SMOTE Rare Class Oversampling method... Using SMOTE's over-sampling techniques to make the 11 classes balanced... class_weights = [0.03308772 0.03704803 0.05248281 0.0826697 0.12264519 0.24653067 0.28232465 0.43312308 0.59827153 1.04697518 1.05508387] class_weighted_rows = {0: 69993, 1: 62511, 2: 44127, 3: 28014, 4: 18883, 5: 9394, 6: 8203, 7: 5347, 8: 3871, 9: 2315, 10: 2315} Regression-resampler is erroring. Continuing... ######################################################## XGBoost Model Prediction Results on Held Out CV Data Set: Multi Class Model Metrics Report ##################################################### Accuracy = 47.8% Balanced Accuracy (average recall) = 32.7% Average Precision (macro) = 73.1% Precisions by class: 44.7% 47.0% 51.6% 47.2% 70.8% 100.0% 90.2% 77.7% 78.1% 96.4% 100.0% Recall Scores by class: 70.2% 57.8% 27.9% 56.7% 9.9% 1.0% 10.8% 57.6% 44.2% 19.2% 4.6% F1 Scores by class: 54.7% 51.8% 36.2% 51.5% 17.4% 2.0% 19.3% 66.1% 56.4% 32.0% 8.7% ##################################################### precision recall f1-score support 0 0.45 0.70 0.55 17498 1 0.47 0.58 0.52 15628 2 0.52 0.28 0.36 11032 3 0.47 0.57 0.51 7004 4 0.71 0.10 0.17 4721 5 1.00 0.01 0.02 2349 6 0.90 0.11 0.19 2051 7 0.78 0.58 0.66 1336 8 0.78 0.44 0.56 967 9 0.96 0.19 0.32 553 10 1.00 0.05 0.09 549 accuracy 0.48 63688 macro avg 0.73 0.33 0.36 63688 weighted avg 0.54 0.48 0.44 63688 [[12290 4627 171 324 53 0 0 13 20 0 0] [ 5416 9027 591 512 78 0 0 0 4 0 0] [ 4403 2044 3082 1417 39 0 7 28 12 0 0] [ 1142 505 1297 3973 15 0 3 41 26 2 0] [ 2045 2197 2 8 469 0 0 0 0 0 0] [ 1470 517 135 175 6 24 2 15 5 0 0] [ 236 104 413 994 0 0 222 67 14 1 0] [ 74 44 72 336 2 0 6 769 32 1 0] [ 64 38 87 319 0 0 2 30 427 0 0] [ 59 24 87 252 0 0 2 19 4 106 0] [ 274 80 41 116 0 0 2 8 3 0 25]] ################# E N S E M B L E M O D E L ################## Time taken = 105 seconds Based on trying multiple models, Best type of algorithm for this data set is Bagging_Classifier ############################################################################# Displaying results of weighted average ensemble of 5 classifiers
Производительность Auto-ViML:
Auto-ViML дает хорошую оценку производительности по сравнению с другими моделями с настройкой параметров Hyper. Аналитическое сравнение производительности Vidya приведено ниже для справки.
Заключительные замечания:
Лично я верю в ручную предварительную обработку и настройку модели. Однако Auto-ViML дает хороший результат, который можно использовать как готовое быстрое решение для нашего анализа.
Если вам интересна моя статья, вы можете подписаться на мой канал, чтобы увидеть больше подобных статей. Также вы можете связаться со мной в LinkedIn.
Спасибо, что прочитали мою статью!