Rumah > Artikel > pembangunan bahagian belakang > Pemilihan Ciri dengan Algoritma IAMB: Penyelaman Kasual ke dalam Pembelajaran Mesin
Jadi, inilah kisahnya—baru-baru ini saya mengerjakan tugasan sekolah oleh Profesor Zhuang yang melibatkan algoritma yang cukup hebat yang dipanggil Incremental Association Markov Blanket (IAMB). Sekarang, saya tidak mempunyai latar belakang dalam sains data atau statistik, jadi ini adalah wilayah baharu bagi saya, tetapi saya suka mempelajari sesuatu yang baharu. Matlamatnya? Gunakan IAMB untuk memilih ciri dalam set data dan lihat cara ia memberi kesan kepada prestasi model pembelajaran mesin.
Kami akan mengkaji asas algoritma IAMB dan menerapkannya pada Set Data Diabetes Pima Indians daripada set data Jason Brownlee. Set data ini menjejaki data kesihatan tentang wanita dan termasuk sama ada mereka menghidap diabetes atau tidak. Kami akan menggunakan IAMB untuk mengetahui ciri (seperti BMI atau tahap glukosa) yang paling penting untuk meramalkan diabetes.
Algoritma IAMB adalah seperti rakan yang membantu anda membersihkan senarai suspek dalam misteri—ia merupakan kaedah pemilihan ciri yang direka untuk memilih hanya pembolehubah yang benar-benar penting untuk meramalkan sasaran anda. Dalam kes ini, sasarannya ialah sama ada seseorang itu menghidap diabetes.
Dalam istilah yang lebih mudah, IAMB membantu kami mengelakkan kekacauan dalam set data kami dengan memilih ciri yang paling berkaitan sahaja. Ini amat berguna apabila anda ingin memastikan perkara mudah meningkatkan prestasi model dan mempercepatkan masa latihan.
Sumber: Algoritma untuk Penemuan Selimut Markov Skala Besar
Di sinilah alpha masuk. Dalam statistik, alpha (α) ialah ambang yang kami tetapkan untuk memutuskan perkara yang dikira sebagai "signifikan secara statistik." Sebagai sebahagian daripada arahan yang diberikan oleh profesor, saya menggunakan alfa 0.05, bermakna saya hanya mahu mengekalkan ciri yang mempunyai peluang kurang daripada 5% untuk dikaitkan secara rawak dengan pembolehubah sasaran. Jadi, jika nilai-p sesuatu ciri kurang daripada 0.05, ini bermakna terdapat perkaitan yang kukuh dan ketara secara statistik dengan sasaran kita.
Dengan menggunakan ambang alfa ini, kami hanya memfokuskan pada pembolehubah yang paling bermakna, mengabaikan mana-mana yang tidak melepasi ujian "kepentingan" kami. Ia seperti penapis yang mengekalkan ciri yang paling relevan dan membuang bunyi.
Berikut ialah persediaan: Set Data Diabetes Pima Indians mempunyai ciri kesihatan (tekanan darah, umur, tahap insulin, dll.) dan sasaran kami, Hasil (sama ada seseorang menghidap diabetes).
Pertama, kami memuatkan data dan menyemaknya:
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())
Berikut ialah versi terkini algoritma IAMB kami. Kami menggunakan nilai-p untuk memutuskan ciri yang perlu disimpan, jadi hanya ciri yang mempunyai nilai-p kurang daripada alfa (0.05) kami dipilih.
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 data.columns: if feature != target: result = pg.partial_corr(data=data, x=feature, y=target, covar=markov_blanket) p_value = result.at[0, 'p-val'] if p_value < alpha: markov_blanket.add(feature) # Backward Phase: Remove features with 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)
Apabila saya menjalankan ini, ia memberikan saya senarai terperinci ciri yang IAMB fikir paling berkait rapat dengan hasil diabetes. Senarai ini membantu mengecilkan pembolehubah yang kami perlukan untuk membina model kami.
Selected Features: ['BMI', 'DiabetesPedigreeFunction', 'Pregnancies', 'Glucose']
Setelah kami mempunyai ciri pilihan kami, ujian sebenar membandingkan prestasi model dengan semua ciri berbanding ciri pilihan IAMB. Untuk ini, saya menggunakan model Gaussian Naive Bayes yang ringkas kerana ia mudah dan sesuai dengan kebarangkalian (yang berkaitan dengan keseluruhan suasana Bayesian).
Berikut ialah kod untuk melatih dan menguji model:
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)
Begini rupa perbandingannya:
Hanya menggunakan ciri yang dipilih oleh IAMB memberikan sedikit peningkatan dalam ketepatan dan metrik lain. Ia bukanlah satu lonjakan yang besar, tetapi hakikat bahawa kami mendapat prestasi yang lebih baik dengan ciri yang lebih sedikit adalah menjanjikan. Selain itu, ini bermakna model kami tidak bergantung pada "bunyi" atau data yang tidak berkaitan.
Saya harap ini memberikan pengenalan mesra kepada IAMB! Jika anda ingin tahu, cubalah—ia adalah alat yang berguna dalam kotak alat pembelajaran mesin dan anda mungkin hanya melihat beberapa peningkatan hebat dalam projek anda sendiri.
Sumber: Algoritma untuk Penemuan Selimut Markov Skala Besar
Atas ialah kandungan terperinci Pemilihan Ciri dengan Algoritma IAMB: Penyelaman Kasual ke dalam Pembelajaran Mesin. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!