「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > IAMB アルゴリズムによる機能選択: 機械学習へのカジュアルなダイビング

IAMB アルゴリズムによる機能選択: 機械学習へのカジュアルなダイビング

2024 年 11 月 18 日に公開
ブラウズ:109

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

IAMB アルゴリズムの基本を確認し、それを Jason Brownlee のデータセットの ピマ インディアン糖尿病データセット に適用します。このデータセットは女性の健康データを追跡しており、糖尿病の有無も含まれています。 IAMB を使用して、糖尿病の予測に最も重要な特徴 (BMI や血糖値など) を特定します。

IAMB アルゴリズムとは何ですか?また、それを使用する理由は何ですか?

IAMB アルゴリズムは、ミステリーの容疑者リストを整理するのに役立つ友人のようなものです。これは、ターゲットを予測するために本当に重要な変数のみを選択するように設計された特徴選択方法です。この場合、ターゲットは誰かが糖尿病を患っているかどうかです。

  • フォワードフェーズ: ターゲットと強く関連する変数を追加します。
  • バックワードフェーズ: 実際には役に立たない変数を削除し、最も重要な変数だけを残します。

より簡単に言うと、IAMB は、最も関連性の高い特徴のみを選択することで、データセット内の混乱を避けるのに役立ちます。これは、物事をシンプルにしてモデルのパフォーマンスを向上させ、トレーニング時間を短縮したい場合に特に便利です。

出典: 大規模マルコフブランケット発見のアルゴリズム

このアルファ的なものとは何ですか?なぜそれが重要なのでしょうか?

ここで アルファ が登場します。統計において、アルファ (α) は、何が「統計的に有意」であるかを決定するために設定するしきい値です。教授からの指示の一環として、私はアルファ 0.05 を使用しました。これは、ターゲット変数にランダムに関連付けられる可能性が 5% 未満の特徴だけを保持したいことを意味します。したがって、特徴の p 値 が 0.05 未満の場合、ターゲットと統計的に有意な強力な関連性があることを意味します。

このアルファしきい値を使用することで、最も意味のある変数のみに焦点を当て、「有意性」テストに合格しない変数は無視します。これは、最も関連性の高い機能を保持し、ノイズを取り除くフィルターのようなものです。

実践: ピマ インディアンの糖尿病データセットで IAMB を使用する

セットアップは次のとおりです。ピマ インディアンの糖尿病データセットには、健康に関する特徴 (血圧、年齢、インスリン レベルなど) と、目標である 結果 (誰かが糖尿病であるかどうか) が含まれています。

まず、データをロードしてチェックアウトします:

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

Alpha = 0.05 で IAMB を実装する

これが 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 が選択した機能がモデルのパフォーマンスに与える影響のテスト

選択した特徴を取得したら、実際のテストでは、すべての特徴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)

結果

比較は次のようになります:

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

IAMB が選択した機能のみを使用すると、精度やその他の指標がわずかに向上しました。これは大きな飛躍ではありませんが、機能を減らしてパフォーマンスが向上しているという事実は有望です。さらに、これは、モデルが「ノイズ」や無関係なデータに依存していないことを意味します。

重要なポイント

  • IAMB は特徴選択に最適です: ターゲットを予測する上で本当に重要なものだけに焦点を当て、データセットをクリーンアップするのに役立ちます。
  • 少ないほど良いことがよくあります: ここで見られるように、モデルの精度がわずかに向上したように、機能が少ないほど良い結果が得られることがあります。
  • 学習と実験は楽しい部分です: データ サイエンスの深い背景がなくても、このようなプロジェクトに参加すると、データと機械学習を理解するための新しい方法が開かれます。

これが IAMB へのわかりやすい入門になれば幸いです。興味があれば、試してみてください。これは機械学習ツールボックスに含まれる便利なツールであり、自分のプロジェクトで素晴らしい改善が見られるかもしれません。

出典: 大規模マルコフブランケット発見のアルゴリズム

リリースステートメント この記事は次の場所に転載されています: https://dev.to/ogambakerubo/feature-selection-with-the-iamb-algorithm-a-casual-dive-into-machine-learning-53a7?1 侵害がある場合は、 Study_golang@163 .comdelete に連絡してください
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3