Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pemilihan Ciri dengan Algoritma IAMB: Penyelaman Kasual ke dalam Pembelajaran Mesin

Pemilihan Ciri dengan Algoritma IAMB: Penyelaman Kasual ke dalam Pembelajaran Mesin

Patricia Arquette
Patricia Arquetteasal
2024-11-16 14:24:03400semak imbas

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.

Apakah Algoritma IAMB, dan Mengapa Menggunakannya?

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.

  • Fasa Hadapan: Tambahkan pembolehubah yang sangat berkaitan dengan sasaran.
  • Fasa Undur: Potong pembolehubah yang tidak benar-benar membantu, pastikan hanya yang paling penting sahaja yang tinggal.

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

Apakah Perkara Alfa Ini, dan Mengapa Ia Penting?

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.

Mendapatkan Hands-On: Menggunakan IAMB pada Set Data Diabetes Pima Indians

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())

Melaksanakan IAMB dengan Alpha = 0.05

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']

Menguji Kesan Ciri Dipilih IAMB pada Prestasi Model

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)

Keputusan

Begini rupa perbandingannya:

Feature Selection with the IAMB Algorithm: A Casual Dive into Machine Learning

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.

Pengambilan Utama

  • IAMB bagus untuk pemilihan ciri: Ia membantu membersihkan set data kami dengan hanya memfokuskan pada perkara yang benar-benar penting untuk meramalkan sasaran kami.
  • Kurang lebih kerap: Kadangkala, ciri yang lebih sedikit memberi kita hasil yang lebih baik, seperti yang kita lihat di sini dengan rangsangan kecil dalam ketepatan model.
  • Pembelajaran dan percubaan ialah bahagian yang menyeronokkan: Walaupun tanpa latar belakang yang mendalam dalam sains data, menyelami projek seperti ini membuka cara baharu untuk memahami data dan pembelajaran mesin.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn