ホームページ >バックエンド開発 >Python チュートリアル >IAMB アルゴリズムによる機能選択: 機械学習へのカジュアルなダイビング

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-16 14:24:03462ブラウズ

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

IAMB アルゴリズムの基本を説明し、それを Jason Brownlee のデータセットの Pima Indians Diabetes Dataset に適用します。このデータセットは女性の健康データを追跡しており、糖尿病の有無も含まれています。 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 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 が選択した機能がモデルのパフォーマンスに与える影響のテスト

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

結果

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

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

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

重要なポイント

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

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

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

以上がIAMB アルゴリズムによる機能選択: 機械学習へのカジュアルなダイビングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。