機械学習で知っておくべき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倍高速化する方法

ブログ    
ブログ    
ブログ    

推薦する

Metaverse と Web3 は似ていますが、最も重要な違いは何でしょうか?

現在、ビジネス テクノロジーの世界では、2 つの流行語が頻繁に登場しています。 1つはWeb3、もう...

モデル圧縮率95%、MIT Han Songらが新しいLite Transformerを提案

Transformer の高性能は非常に高い計算能力に依存しており、モバイル NLP に大きな制限が...

人工知能が司法裁判に影響を与えている!人間と機械のコラボレーションが標準になるかもしれない

【CNMOニュース】科技日報によると、「中国裁判所情報化発展報告第5号(2021年)」がこのほど正...

心理測定分析における AI とビッグデータの活用

心理測定分析における AI とビッグデータの活用人工知能 (AI) とビッグデータは、採用担当者が個...

...

基本的なアルゴリズムについての簡単な説明: AVL ツリーとスプレイ ツリー (パート 3)

順序上記に引き続き、このトピックについて話し続けましょう。バランス二分木: AVL 木 (1962)...

...

2024 年のクラウド コンピューティング セキュリティの 5 つのトレンドと進歩

クラウドの世界を探ってみましょう。ただし、単なるクラウドではなく、未来のクラウドです。具体的には、2...

オバマが強制的に「白人化」された後、AIは芸術作品における人種的偏見というタブーを犯した

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

2021 年のトップ 12 AI ツールとフレームワーク

AIトレンドがあらゆるところに広がる2021年を迎える準備はできていますか? 2021 年のトップ ...

実験から実装まで: AI が金融サービスでその価値を証明している方法

金融機関にとって、新型コロナウイルス感染症のパンデミックからの回復は、人工知能(AI)と機械学習(M...

自動運転に関する毎年恒例の議論:量産化は3つの要因によって推進され、その本質はデータ軍拡競争である

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

AIはサプライヤーが直面する5つの大きなリスクを軽減するのに役立ちます

人工知能は現代のビジネス界に多くの変化をもたらしています。多くの企業が AI を活用して顧客をより深...

最高速度:250fps!リアルタイムの高性能車線検出アルゴリズムLaneATT

CVPR 2021 車線検出論文: 車線から目を離さない: リアルタイムの注意誘導型車線検出。紙:...

GPT-4 も使用している可能性がある推測的デコードとは何ですか?の過去、現在、応用をまとめた記事

大規模言語モデル (LLM) の推論には通常、かなり遅い推論プロセスである自己回帰サンプリングの使用...