それでは、話は次のとおりです。私は最近、増分相関マルコフブランケット (IAMB) と呼ばれる非常に優れたアルゴリズムを含む Zhuang 教授による学校の課題に取り組みました。私にはデータ サイエンスや統計のバックグラウンドがないので、これは私にとって新しい領域ですが、何か新しいことを学ぶのは大好きです。目標? IAMB を使用してデータセット内の特徴を選択し、それが機械学習モデルのパフォーマンスにどのような影響を与えるかを確認します。
IAMB アルゴリズムの基本を説明し、それを Jason Brownlee のデータセットの Pima Indians Diabetes Dataset に適用します。このデータセットは女性の健康データを追跡しており、糖尿病の有無も含まれています。 IAMB を使用して、どの特徴 (BMI や血糖値など) が糖尿病の予測に最も重要かを特定します。
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 値 を使用してどの特徴を保持するかを決定しているため、アルファ (0.05) より小さい p 値を持つ特徴のみが選択されます。
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)
これを実行すると、IAMB が糖尿病の転帰に最も密接に関連していると考えた機能の洗練されたリストが表示されました。このリストは、モデルの構築に必要な変数を絞り込むのに役立ちます。
Selected Features: ['BMI', 'DiabetesPedigreeFunction', 'Pregnancies', 'Glucose']
選択した特徴を取得したら、実際のテストでは、すべての特徴とIAMB が選択した特徴のモデルのパフォーマンスを比較します。このために、単純な Gaussian Naive Bayes モデルを使用しました。これは、単純であり、確率をうまく処理できるためです (ベイジアン全体の雰囲気と結びついています)。
モデルをトレーニングしてテストするコードは次のとおりです:
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 への親しみやすい入門書となることを願っています。興味があれば、ぜひ試してみてください。これは機械学習ツールボックスにある便利なツールであり、自分のプロジェクトで素晴らしい改善が見られるかもしれません。
出典: 大規模マルコフブランケット発見アルゴリズム
以上がIAMB アルゴリズムによる機能選択: 機械学習へのカジュアルなダイビングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。