機械学習で知っておくべき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開発に関する無料電子書籍をリリース、インテリジェントなチャットボットの構築方法を教える

最近、Microsoft は、Microsoft AI プラットフォームを使用してインテリジェントな...

機械学習と感度分析を組み合わせてビジネス戦略を策定するにはどうすればよいでしょうか?

数え切れないほど多くの企業が、意思決定を支援するために機械学習 (ML) を日常的に使用しています。...

...

AI が「脳で画像を完成させる」ことを学習: ニューラル ネットワークが 0 から 1 までの画像を完成させる

1新しいインテリジェンス集出典: arXiv、Github張毅編纂[新しいインテリジェンスの紹介]自...

モデル融合、ハイブリッド専門家、小規模LLM、2024年のLLMの発展方向を理解するためのいくつかの論文

過去2023年間で、大規模言語モデル(LLM)は潜在力と複雑さの両面で急速に成長しました。 2024...

システムアーキテクト、アルゴリズムエンジニア、人工知能エンジニアはどの程度の数学を学ぶ必要がありますか?

オリンピック数学を勉強したことがない彼に、システム アーキテクトになれるかと誰かが尋ねました。他にも...

コンピューティング技術を変えた偉大なアルゴリズムを数えてみましょう

これまで、多くの独創的なコンピュータ アルゴリズムの設計が私たちのコンピューティング技術を変えてきま...

人工知能、ディープラーニング、マシンビジョン、理解すべき概念

人工知能の概念は長年提唱されてきたが、最近の流行は「人間対機械」の競争で囲碁の世界的名人、イ・セドル...

バッチ正規化の呪い

バッチ正規化は、確かにディープラーニングの分野における大きな進歩の 1 つであり、近年研究者によって...

ドローンによる食品配達が到来、こうした問題が注目を集めている

無人運転車による配達に続き、ドローンによる食品配達も現実化に向かって加速している。先日終了した202...

自動運転の体験はクールで、将来的には多くの交通アルゴリズムが登場するだろう

[[229949]]若い観客が自動運転車「ファントム」を体験[[229950]] [[229951]...

Java スパニングツリー構造 ポイント間の最短経路アルゴリズム

まずは二分木についてお話しましょう。二分木は、各ポイントが 2 つのポイントに接続されているツリー構...

...

エッジコンピューティングとエッジ AI とは何ですか?この2つの違いは何でしょうか?

AIチップはクラウドとエッジに分かれています。クラウドチップは高いパフォーマンスが求められますが、...

Julia vs Python: 2019 年に機械学習でナンバー 1 になるプログラミング言語はどれでしょうか?

[[252207]] [51CTO.com クイック翻訳] Juliaは2018年に登場し、現在最...