Então, aqui está a história: recentemente trabalhei em um trabalho escolar do professor Zhuang envolvendo um algoritmo muito legal chamado Incremental Association Markov Blanket (IAMB). Bem, não tenho formação em ciência de dados ou estatística, então este é um território novo para mim, mas adoro aprender algo novo. O objetivo? Use o IAMB para selecionar recursos em um conjunto de dados e ver como isso afeta o desempenho de um modelo de aprendizado de máquina.
Abordaremos os fundamentos do algoritmo IAMB e o aplicaremos ao Pima Indians Diabetes Dataset dos conjuntos de dados de Jason Brownlee. Este conjunto de dados rastreia dados de saúde de mulheres e inclui se elas têm diabetes ou não. Usaremos o IAMB para descobrir quais recursos (como IMC ou níveis de glicose) são mais importantes para prever o diabetes.
O algoritmo IAMB é como um amigo que ajuda você a limpar uma lista de suspeitos de um mistério – é um método de seleção de recursos projetado para escolher apenas as variáveis que realmente importam para prever seu alvo. Nesse caso, o objetivo é saber se alguém tem diabetes.
Em termos mais simples, o IAMB nos ajuda a evitar confusão em nosso conjunto de dados, selecionando apenas os recursos mais relevantes. Isso é especialmente útil quando você deseja manter as coisas simples, aumentar o desempenho do modelo e acelerar o tempo de treinamento.
Fonte: Algoritmos para descoberta de manta Markov em grande escala
É aqui que entra alfa. Nas estatísticas, alfa (α) é o limite que definimos para decidir o que conta como "estatisticamente significativo". Como parte das instruções dadas pelo professor, usei um alfa de 0,05, o que significa que só quero manter recursos que tenham menos de 5% de chance de serem associados aleatoriamente à variável alvo. Portanto, se o p-valor de um recurso for inferior a 0,05, significa que há uma associação forte e estatisticamente significativa com nosso alvo.
Ao usar esse limite alfa, estamos nos concentrando apenas nas variáveis mais significativas, ignorando aquelas que não passam em nosso teste de “significância”. É como um filtro que mantém os recursos mais relevantes e elimina o ruído.
Aqui está a configuração: o conjunto de dados de diabetes dos índios Pima tem recursos de saúde (pressão arterial, idade, níveis de insulina, etc.) e nossa meta, Resultado (se alguém tem diabetes).
Primeiro, carregamos os dados e verificamos:
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())
Aqui está nossa versão atualizada do algoritmo IAMB. Estamos usando valores de p para decidir quais recursos manter, portanto, apenas aqueles com valores de p menores que nosso alfa (0,05) são selecionados.
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)
Quando executei isso, obtive uma lista refinada de recursos que o IAMB considerou estarem mais intimamente relacionados aos resultados do diabetes. Esta lista ajuda a restringir as variáveis que precisamos para construir nosso modelo.
Selected Features: ['BMI', 'DiabetesPedigreeFunction', 'Pregnancies', 'Glucose']
Assim que tivermos nossos recursos selecionados, o teste real compara o desempenho do modelo com todos os recursos versus recursos selecionados pelo IAMB. Para isso, optei por um modelo simples Gaussian Naive Bayes porque é direto e funciona bem com probabilidades (o que está de acordo com toda a vibração bayesiana).
Aqui está o código para treinar e testar o modelo:
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)
Esta é a comparação:
Usar apenas os recursos selecionados pelo IAMB proporcionou um ligeiro aumento na precisão e em outras métricas. Não é um grande salto, mas o fato de estarmos obtendo melhor desempenho com menos recursos é promissor. Além disso, significa que nosso modelo não depende de “ruído” ou dados irrelevantes.
Espero que isso forneça uma introdução amigável ao IAMB! Se você estiver curioso, experimente: é uma ferramenta útil na caixa de ferramentas de aprendizado de máquina e você poderá ver algumas melhorias interessantes em seus próprios projetos.
Fonte: Algoritmos para descoberta de manta Markov em grande escala
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3