それでは、話は次のとおりです。私は最近、増分相関マルコフブランケット (IAMB) と呼ばれる非常に優れたアルゴリズムを含む Zhuang 教授による学校の課題に取り組みました。私にはデータ サイエンスや統計のバックグラウンドがないので、これは私にとって新しい領域ですが、何か新しいことを学ぶのは大好きです。目標? IAMB を使用してデータセット内の特徴を選択し、それが機械学習モデルのパフォーマンスにどのような影響を与えるかを確認します。
IAMB アルゴリズムの基本を確認し、それを Jason Brownlee のデータセットの ピマ インディアン糖尿病データセット に適用します。このデータセットは女性の健康データを追跡しており、糖尿病の有無も含まれています。 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 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