Итак, вот история: недавно я работал над школьным заданием профессора Чжуана, включающим довольно крутой алгоритм под названием Марковское одеяло дополнительных ассоциаций (IAMB). У меня нет опыта работы в области науки о данных или статистики, так что это новая территория для меня, но я люблю узнавать что-то новое. Цель? Используйте IAMB, чтобы выбрать функции в наборе данных и посмотреть, как это влияет на производительность модели машинного обучения.
Мы рассмотрим основы алгоритма IAMB и применим его к Набору данных о диабете у индейцев Пима из наборов данных Джейсона Браунли. Этот набор данных отслеживает данные о здоровье женщин и включает информацию о том, есть ли у них диабет или нет. Мы будем использовать IAMB, чтобы выяснить, какие характеристики (например, ИМТ или уровень глюкозы) имеют наибольшее значение для прогнозирования диабета.
Алгоритм IAMB подобен другу, который помогает вам очистить список подозреваемых в загадке: это метод выбора признаков, предназначенный для выбора только тех переменных, которые действительно важны для прогнозирования вашей цели. В данном случае целью является наличие у кого-либо диабета.
Проще говоря, IAMB помогает нам избежать беспорядка в нашем наборе данных, выбирая только наиболее релевантные функции. Это особенно удобно, если вы хотите упростить задачу, повысить производительность модели и ускорить время обучения.
Источник: Алгоритмы крупномасштабного открытия Марковского бланкета
Здесь появляется альфа. В статистике альфа (α) — это порог, который мы устанавливаем, чтобы решить, что считать «статистически значимым». В рамках инструкций, данных профессором, я использовал альфа 0,05, что означает, что я хочу сохранить только те функции, вероятность случайной связи которых с целевой переменной составляет менее 5%. Итак, если p-значение функции меньше 0,05, это означает, что существует сильная, статистически значимая связь с нашей целью.
Используя этот альфа-порог, мы концентрируемся только на наиболее значимых переменных, игнорируя те, которые не проходят наш тест на «значимость». Это похоже на фильтр, который сохраняет наиболее важные функции и отбрасывает шум.
Вот настройка: набор данных о диабете индейцев пима включает характеристики здоровья (кровяное давление, возраст, уровень инсулина и т. д.) и нашу цель, Результат (есть ли у кого-то диабет).
Сначала мы загружаем данные и проверяем их:
import pandas as pd # Load and preview the dataset url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv' column_names = ['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI', 'DiabetesPedigreeFunction', 'Age', 'Outcome'] data = pd.read_csv(url, names=column_names) print(data.head())
Вот наша обновленная версия алгоритма IAMB. Мы используем p-значения, чтобы решить, какие функции сохранить, поэтому выбираются только те, у которых p-значения меньше нашей альфа (0,05).
import pingouin as pg def iamb(target, data, alpha=0.05): markov_blanket = set() # Forward Phase: Add features with a p-value alpha for feature in list(markov_blanket): reduced_mb = markov_blanket - {feature} result = pg.partial_corr(data=data, x=feature, y=target, covar=reduced_mb) p_value = result.at[0, 'p-val'] if p_value > alpha: markov_blanket.remove(feature) return list(markov_blanket) # Apply the updated IAMB function on the Pima dataset selected_features = iamb('Outcome', data, alpha=0.05) print("Selected Features:", selected_features)
Когда я запустил это исследование, оно дало мне уточненный список функций, которые, по мнению IAMB, наиболее тесно связаны с исходами диабета. Этот список помогает сузить список переменных, которые нам нужны для построения нашей модели.
Selected Features: ['BMI', 'DiabetesPedigreeFunction', 'Pregnancies', 'Glucose']
После того как мы выбрали выбранные функции, в реальном тесте производительность модели сравнивается с всеми функциями и функциями, выбранными IAMB. Для этого я выбрал простую гауссовскую наивную байесовскую модель, потому что она проста и хорошо справляется с вероятностями (что соответствует всей байесовской атмосфере).
Вот код для обучения и тестирования модели:
from sklearn.model_selection import train_test_split from sklearn.naive_bayes import GaussianNB from sklearn.metrics import accuracy_score, f1_score, roc_auc_score # Split data X = data.drop('Outcome', axis=1) y = data['Outcome'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # Model with All Features model_all = GaussianNB() model_all.fit(X_train, y_train) y_pred_all = model_all.predict(X_test) # Model with IAMB-Selected Features X_train_selected = X_train[selected_features] X_test_selected = X_test[selected_features] model_iamb = GaussianNB() model_iamb.fit(X_train_selected, y_train) y_pred_iamb = model_iamb.predict(X_test_selected) # Evaluate models results = { 'Model': ['All Features', 'IAMB-Selected Features'], 'Accuracy': [accuracy_score(y_test, y_pred_all), accuracy_score(y_test, y_pred_iamb)], 'F1 Score': [f1_score(y_test, y_pred_all, average='weighted'), f1_score(y_test, y_pred_iamb, average='weighted')], 'AUC-ROC': [roc_auc_score(y_test, y_pred_all), roc_auc_score(y_test, y_pred_iamb)] } results_df = pd.DataFrame(results) display(results_df)
Вот как выглядит сравнение:
Использование только функций, выбранных IAMB, немного повысило точность и другие показатели. Это не такой уж большой скачок, но тот факт, что мы получаем лучшую производительность с меньшим количеством функций, является многообещающим. Кроме того, это означает, что наша модель не полагается на «шум» или нерелевантные данные.
Надеюсь, это станет дружеским знакомством с IAMB! Если вам интересно, попробуйте — это удобный инструмент в наборе инструментов машинного обучения, и вы можете увидеть некоторые интересные улучшения в своих собственных проектах.
Источник: Алгоритмы крупномасштабного открытия Марковского бланкета
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3