機械学習で知っておくべき3つの特徴選択方法!

機械学習で知っておくべき3つの特徴選択方法!

ディープラーニングの活発な発展に伴い、業務シナリオで使用するためのディープ ニューラル ネットワークを構築しようとする人がますます増えています。モデルにデータを入力してモデル パラメータを調整するだけで、モデルが独自のメカニズムを使用して重要な機能を選択し、より優れたデータ結果を出力できると彼らは考えています。

[[377236]]

実際の作業シナリオでは、データと時間が限られているため、このアプローチはお勧めできません。一方で、大量のデータ入力はモデルのトレーニング サイクルの長期化につながります。他方、現在の市場セグメントでは、すべてのシナリオに大量のデータがあるわけではなく、大量のデータから重要な機能を見つけることが急務となっています。

この記事では、データサイエンスの分野で働きたい人なら誰でも知っておくべき特徴量を選択するための 3 つの方法を紹介します。この記事は次のように構成されています。

  • データセットの読み込みと準備
  • 方法1: 係数から特徴量の重要度を取得する
  • 方法2: ツリーモデルから特徴の重要度を取得する
  • 方法3: PCAスコアから特徴の重要度を取得する
  • 結論は

データセットの読み込みと準備

導入のために、Scikit-Learn に組み込まれている「load_breast_cancer」データセットを使用します。

次のコード スニペットは、ライブラリをインポートしてデータセットをロードする方法を示しています。

  1. numpyをnpとしてインポートする
  2. pandasをpdとしてインポートする
  3. sklearn.datasetsからload_breast_cancer をインポートします
  4. matplotlib.pyplot をpltとしてインポートします。
  5. matplotlibからrcParamsをインポート
  6. rcParams[ 'figure.figsize' ] = 14, 7
  7. rcParams[ 'axes.spines.top' ] = False  
  8. rcParams[ 'axes.spines.right' ] = False  
  9. #データを読み込む
  10. データ = load_breast_cancer()

結果を出力するために次のコードを呼び出します。

  1. df = pd.concat([pd.DataFrame(data.data, columns=data.feature_names),pd.DataFrame(data.target, columns=[ 'y' ])], axis=1)
  2. df.head()

上記のデータには、30 個の特徴変数と 1 つのターゲット変数があります。すべての値は数値であり、欠損値はありません。スケーリングの問題を解決する前に、トレーニングとテストの分割も実行する必要があります。

  1. sklearn.preprocessingからStandardScaler をインポートします
  2. sklearn.model_selectionからtrain_test_split をインポートします
  3. X = df.drop ( 'y' 、軸 = 1)
  4. y = df[ 'y' ]
  5. X_train、X_test、y_train、y_test = train_test_split(X、y、test_size=0.25、random_state=42) です。
  6. ss = 標準スケーラ()
  7. X_train_scaled = ss.fit_transform(X_train)
  8. X_test_scaled = ss.transform(X_test)

方法1: 係数から特徴量の重要度を取得する

特徴の重要性を確認する最も簡単な方法は、モデルの係数を調べることです。たとえば、線形回帰とロジスティック回帰はどちらも、各入力値に係数 (重要度) が割り当てられる方程式になります。

簡単に言えば、割り当てられた係数が大きい(負または正)数値である場合、予測に何らかの影響を及ぼします。逆に、係数がゼロの場合、予測には影響しません。

ロジックは非常に単純なので、テストしてロジスティック回帰が適切なアルゴリズムであるかどうかを確認しましょう。モデルを適合した後、係数は属性 coef_ に保存されます。

  1. sklearn.linear_modelからLogisticRegression をインポートします
  2.  
  3. モデル = ロジスティック回帰()
  4. モデルをフィット(X_train_scaled、y_train)
  5. 重要度 = pd.DataFrame(データ={
  6. '属性' : X_train.columns、
  7. '重要度' : model.coef_[0]
  8. })
  9. 重要度 = importances.sort_values( by = '重要度' 、 ascending= False )
  10. # 視覚化
  11. plt.bar(x=importances[ '属性' ], height=importances[ '重要度' ], color= '#087E8B' )
  12. plt.title( '係数から得られた特徴の重要度' サイズ= 20)
  13. plt.xticks(回転 = '垂直' )
  14. plt.show()

対応する視覚化は次のとおりです。


この方法の最大の特徴は、「シンプル」かつ「効率的」であることです。係数(正方向と負方向)が大きいほど、予測効果への影響が大きくなります。

方法2: ツリーモデルから重要度を取得する

任意の Tree モデルをトレーニングした後、feature_importances 属性にアクセスできるようになります。これは、作業機能の重要性を把握する最も簡単な方法の 1 つです。

次のコードは、モデルをインポートしてトレーニング データにモデルを適合させる方法と、重要度を取得する方法を示しています。

  1. xgboostからXGBClassifier をインポートします
  2.  
  3. モデル = XGBClassifier()
  4. モデルをフィット(X_train_scaled、y_train)
  5. 重要度 = pd.DataFrame(データ={
  6. '属性' : X_train.columns、
  7. 「重要度」 : model.feature_importances_
  8. })
  9. 重要度 = importances.sort_values( by = '重要度' 、 ascending= False )
  10. # 視覚化
  11. plt.bar(x=importances[ '属性' ], height=importances[ '重要度' ], color= '#087E8B' )
  12. plt.title( '係数から得られた特徴の重要度' サイズ= 20)
  13. plt.xticks(回転 = '垂直' )
  14. plt.show()

対応する視覚化を以下に示します。

方法3: PCAスコアから特徴の重要度を取得する

主成分分析 (PCA) は、特徴の重要性を判断するためにも使用できる優れた次元削減手法です。

PCA は、前の 2 つの手法のように最も重要な特徴を直接表示しません。代わりに、N 個の主成分を返します。ここで、N は元の特徴の数に等しくなります。

  1. sklearn.decompositionからPCA をインポート
  2. pca = PCA().fit(X_train_scaled)
  3. # 視覚化
  4. plt.plot(pca.explained_variance_ratio_.cumsum(), lw=3, 色= '#087E8B' )
  5. plt.title( '主成分数による累積説明分散' サイズ= 20)
  6. plt.show()

しかし、これは何を意味するのでしょうか? これは、最初の 5 つの主成分を使用して、ソース データセットの分散の 90% を説明できることを意味します。繰り返しますが、これが何を意味するのかわからない場合は、読み続けてください。

  1. 読み込み = pd.DataFrame(
  2. データ = pca.components_.T * np.sqrt(pca.explained_variance_)、
  3. 列=[f 'PC{i}'   i範囲(1, len(X_train.columns) + 1)],
  4. インデックス=X_train.columns
  5. 読み込み.head()

最初の主要コンポーネントが重要です。これは単なる 1 つの要因ですが、データセット内の分散の 60% 以上を説明します。上の図からわかるように、平均半径特徴との相関係数は 0.8 に近く、強い正の相関関係があると考えられます。

すべての入力特徴と第 1 主成分間の相関を視覚化してみましょう。以下にコード スニペット全体 (視覚化を含む) を示します。

  1. pc1_loadings = loadings.sort_values( by = 'PC1' , ascending = False )[[ 'PC1' ]]
  2. pc1_loadings = pc1_loadings.reset_index()
  3. pc1_loadings.columns = [ '属性' , 'PC1との相関' ]
  4.  
  5. plt.bar(x=pc1_loadings[ '属性' ], 高さ=pc1_loadings[ '相関関係PC1' ], 色= '#087E8B' )
  6. plt.title( 'PCA ローディングスコア (第 1 主成分)' サイズ= 20)
  7. plt.xticks(回転 = '垂直' )
  8. plt.show()

これは、PCA を「ハック」し、それを特徴の重要度の方法として使用する方法です。

結論は

上記は、シナリオに応じて柔軟に適用できる機械学習の特徴重要度の 3 つの方法をまとめたものです。機械学習に興味がある方はフォローしてください。

<<:  サーバーレス コンピューティングによる機械学習の解決策は何でしょうか?

>>:  自然言語の事前トレーニングを10倍高速化する方法

ブログ    
ブログ    

推薦する

アリババ、AI研究所、清華大学が共同でAIに認知能力を与える新しいAIモデルを発表

1月12日、アリババ、AI研究所、清華大学などの共同研究チームが、新たな超大規模認知事前トレーニング...

...

金融業界のデータ管理はどこへ向かうのでしょうか?

近年、インターネット金融の波は伝統的な金融業界に課題をもたらしています。同時に、伝統的な金融企業の情...

人工知能の時代において、中国語と英語のどちらがAIの母国語になるのでしょうか?

人工知能は現在非常に人気の高い技術であり、世界中の国々が研究に資金と人材を投入しています。人工知能を...

フロントエンドの一般的な暗号化アルゴリズムについてお話ししましょう

情報セキュリティの重要性が高まるにつれ、さまざまなフロントエンド暗号化がますます重要になっています。...

マッキンゼー:2045年までに仕事の50%がAIに取って代わられる

▲ 画像出典:マッキンゼーこのレポートで、マッキンゼーは、AIが人間の仕事に取って代わる時期が早まっ...

...

...

インテリジェント運転システムの欠陥解決策の詳細な分析

従来の自動車と比較して、自動運転車は、車両が乗客を安全に目的地まで輸送できるかどうかという実用的な目...

...

ナレッジグラフをビッグモデルの仲間にしよう

大規模言語モデル (LLM) は、非常に流暢で一貫性のあるテキストを短時間で生成できるため、AI 会...

物流ロボットが急増中!今後の市場の成長は2つのエンジンによって支えられる

最近、イスラエルを拠点とするスマート物流ロボットのスタートアップであるCAJA Roboticsは、...

AIは科学者のツールになり得るか? Nature がトップクラスの学者 5 人にインタビュー: コードの書き方を学び、期待を下げよう

[[430245]]人工知能(AI)は、専用の研究分野から他の分野のツールへと徐々に移行しており、学...

機械学習による建物のエネルギー効率の向上

エネルギー効率などの複雑な建物の問題を、人間の介入なしに解決するにはどうすればよいでしょうか。建物の...

顔認識防止技術でプライバシー漏洩を防ぐ方法

人工知能監視システムに対する懸念から、研究者たちはそれを標的とするツールの開発に取り組んでいる。最近...