[機械学習] 特徴量エンジニアリング: 特徴量の次元削減

特徴量の次元削減

1 はじめに

特徴の次元削減とは、特徴空間の次元を削減することによって、高次元のデータを低次元の部分空間にマッピングするプロセスを指します

機械学習とデータ分析では、特徴の次元削減により、データの複雑さの軽減、計算コストの削減、モデルのパフォーマンスと解釈可能性の向上、次元の呪いなどの問題の解決に役立ちます。特徴の次元削減は、一般に、特徴の選択と特徴の抽出という 2 つの主要なアプローチに分けられます。

  1. 特徴の選択:特徴の選択とは、他の特徴を無視して、元の特徴から最も代表的で重要な特徴のサブセットを選択することを指します。これにより、特徴の数が減り、したがって次元が減ります。特徴選択方法では、統計検定、情報利得、モデルの重みなどの指標に基づいて特徴の重要性を評価し、上位の特徴を選択できます。
  2. 特徴抽出:特徴抽出とは、数学的変換を通じて元の特徴を新しい低次元の部分空間にマッピングし、それによってデータ内の重要な情報を保存することです。一般的な特徴抽出方法には、主成分分析 (PCA)、線形判別分析 (LDA)、独立成分分析 (ICA) などが含まれます。これらのメソッドは、線形または非線形マッピングを通じて高次元データを低次元表現に変換し、新しい機能をより表現力豊かにします。

機能の次元削減には次のような利点があります。

  • 次元性の災害を軽減する: 次元性の災害とは、データの疎性の増加や高次元空間での距離測定の失敗などの問題を指します。フィーチャの次元を削減すると、これらの問題が軽減され、データの処理と分析が容易になります。
  • 計算コストの削減: 高次元データの計算コストは​​高くなりますが、特徴の次元を削減することで計算の複雑さが軽減され、アルゴリズムの効率が向上します。
  • モデルのパフォーマンスの向上: 場合によっては、特徴量の次元削減によりモデルのパフォーマンスが向上し、過剰適合が軽減され、汎化が改善されることがあります。
  • 視覚化と解釈可能性: データを低次元空間にマッピングすると、視覚化と解釈が容易になり、データ内のパターンと関係を理解するのに役立ちます。

特徴の次元削減の選択は、データの性質、問題のニーズ、モデルの要件によって異なります。さまざまな次元削減方法がさまざまな状況に適しており、特定の問題に応じて選択して適用する必要があります。

2. 次元削減

次元削減とは、「相関のない」主変数のセットを取得するために、特定の限られた条件下で確率変数 (特徴) の数を削減するプロセスを指します。

確率変数の数を減らします。

相関機能: 相対湿度と降雨量の相関

それはまさに、トレーニングの際に学習のための機能を誰もが使用するからです。特徴自体に問題がある場合、または特徴間の相関が強い場合、アルゴリズムの学習予測に大きな影響を与えます。

次元削減の 2 つの方法: 特徴選択と主成分分析 (特徴抽出の方法が理解できる)

3. 機能の選択

3.1 簡単な紹介

定義: 元の特徴から主な特徴を見つけ出すことを目的として、データには冗長または無関係な変数 (または特徴、属性、指標など) が含まれています。

特徴の選択とは、モデルの構築、データの分析、または問題の解決に使用するために、元のデータの特徴セットから特徴の最も代表的かつ重要な部分を選択することを指します。

特徴選択の目標は、データの最も有益な部分を保持しながら特徴の数を減らすことです。これにより、計算コストが削減され、モデルのパフォーマンスが向上し、トレーニング プロセスが高速化され、モデルの解釈可能性が向上します。

機能選択の主な動機は次のとおりです。

  1. 次元の削減: 高次元データセット内の特徴の数は非常に多くなる可能性があり、その結果、計算とストレージのオーバーヘッドが増加し、アルゴリズムの効率が低下します。
  2. 過学習を減らす: 特徴が多すぎると、モデルが過度に複雑になる可能性があり、トレーニング セットでは良好なパフォーマンスを発揮しますが、新しいデータではパフォーマンスが低下する傾向があります (過学習)。
  3. モデルのパフォーマンスを向上させる: 一部の機能はモデルのパフォーマンスに寄与しない可能性があり、ノイズが発生する場合もあります。重要な機能を選択することで、モデルのパフォーマンスを向上させることができます。
  4. 解釈性の向上: 使用する機能が少なくなったことで、モデルの理解と解釈が容易になりました。

特徴選択方法は、次の 3 つの主なカテゴリに分類できます。

  1. フィルター方法: 特徴を選択する前に特徴を評価してランク付けすることにより、ターゲット変数と相関性の高い特徴が選択されます。一般的に使用されるフィルタリング方法には、分散選択、相関係数、相互情報量などが含まれます。
  2. ラッパー メソッド: 特徴の選択を最適化問題として扱い、モデルのパフォーマンスに基づいて特徴を選択します。一般的なパッケージ化方法には、再帰的特徴除去 (RFE) および前方選択 (前方選択) が含まれます。
  3. 埋め込みメソッド: 特徴の選択はモデルのトレーニング中に実行され、モデルのパフォーマンスを最適化することによって特徴が選択されます。たとえば、デシジョン ツリーと正則化線形モデルは、トレーニング中に特徴の重みを枝刈りしたり制限したりできます。

特徴選択方法の選択は、データの性質、問題のニーズ、モデルの要件によって異なります。状況に応じてさまざまな方法が適しており、特定の問題に応じて選択して適用する必要があります。特徴選択はデータ前処理の重要な部分であり、より正確で効率的で解釈可能な機械学習モデルを構築するための基礎を築くことができます。

3.2. 2 つの方法

フィルター(フィルター):主に特徴自体の特性、特徴と特徴と目標値の関係を調査します。

分散選択方法: 低分散特徴フィルタリング

相関係数

Embedded (埋め込み): アルゴリズムが自動的に特徴を選択します (特徴と目標値の関連付け)

デシジョン ツリー: 情報エントロピー、情報ゲイン

正則化: L1、L2

深層学習: 畳み込みなど

使用するモジュール: sklearn.feature_selection

3.3、フィルターの種類

3.3.1. 低分散特徴フィルタリング

分散の意味は前述したように、分散の低いいくつかの特徴を削除します。分散の大きさと組み合わせて、この方法の角度を考慮します。

特徴の分散が小さい: 特徴のほとんどのサンプルの値は比較的似ています。

大きな特徴の分散: 特徴の多くのサンプルの値が異なります

API:

sklearn.feature_selection.VarianceThreshold(しきい値 = 0.0)

分散の低い特徴をすべて削除します

Variance.fit_transform(X)

X: numpy 配列形式のデータ [n_samples, n_features]

戻り値: トレーニング セットの差がしきい値より小さい特徴は削除されます。デフォルトでは、ゼロ以外の分散特徴をすべて保持します。つまり、すべてのサンプルで同じ値を持つ特徴を削除します。

事例の実践:

データの計算は以下のように行われ、いくつかの銘柄の指数特性間でフィルターを実行し、必要なデータがfactor_returns.csvファイルに保存されます。

「index、date」、「return」列を削除する必要があります(これらの型は一致せず、必須のインジケータではありません)。

したがって、必要な特徴は次のとおりです: pe_ratio、pb_ratio、market_cap、return_on_asset_net_profit、du_return_on_equity、ev、earns_per_share、revenue、total_expense

次のように分析します。

1. VarianceThreshold を初期化し、閾値分散を指定します。

2.fit_transformを呼び出す

# -*- coding: utf-8 -*-
# @Author:︶ㄣ释然
# @Time: 2023/8/16 10:01
import pandas as pd
from sklearn.feature_selection import VarianceThreshold  # 低方差特征过滤

'''
sklearn.feature_selection.VarianceThreshold(threshold = 0.0)
    删除所有低方差特征
    Variance.fit_transform(X)
    X:numpy array格式的数据[n_samples,n_features]
    返回值:训练集差异低于threshold的特征将被删除。默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征。
'''
def variance_demo():
    """
    删除低方差特征——特征选择
    :return: None
    """
    data = pd.read_csv("data/factor_returns.csv")
    print(data)
    # 1、实例化一个转换器类
    transfer = VarianceThreshold(threshold=1)
    # 2、调用fit_transform
    data = transfer.fit_transform(data.iloc[:, 1:10])
    print("删除低方差特征的结果:\n", data)
    print("形状:\n", data.shape)


if __name__ == '__main__':
    # 设置 Pandas 输出选项以展示所有行和列的内容
    pd.set_option('display.max_columns', None)
    variance_demo()

結果は次のとおりです。

3.3.2. 相関係数

ピアソン相関係数 (Pearson Correlation Coefficient): 変数間の相関関係の近さを反映する統計指標

ピアソン相関係数 (ピアソン相関係数) は、ピアソン相関係数またはピアソン相関係数とも呼ばれ、2 つの連続変数間の線形関係の強さと方向を測定するために使用される統計です。2 つの変数間の線形相関の度合いを測定します。

相関係数の値は –1 と +1 の間、つまり –1≤ r ≤+1 ですそのプロパティは次のとおりです。

  • r>0 の場合、2 つの変数は正の相関があることを意味し、r<0 の場合、2 つの変数は負の相関があることを意味します。
  • |r|=1 の場合は 2 つの変数に完全な相関があることを意味し、r=0 の場合は 2 つの変数間に相関がないことを意味します
  • 0<|r|<1 の場合、2 つの変数間にある程度の相関があることを意味します。|r| が 1 に近づくほど、2 つの変数間の線形関係は近づき、|r| が 0 に近づくほど、2 つの変数間の線形関係は弱くなります。
  • 一般に、それは 3 つのレベルに分けることができます: |r|<0.4 は低い相関関係、0.4≤|r|<0.7 は有意な相関関係、0.7≤|r|<1 は高い線形相関関係

公式:

 

パラメータは次のとおりです。

n: 観測値の数。

∑: 合計記号。すべての観測値を合計することを意味します。

x と y: それぞれ 2 つの変数の観測値を表します。

API:

scipy.statsインポートピアソンから

x : (N,) 配列のような

y : (N,) array_like 戻り値: (ピアソンの相関係数、p 値)

事例:株式の財務指標相関計算

先ほど述べた銘柄の指標の相関計算では、factor = ['pe_ratio','pb_ratio','market_cap','return_on_asset_net_profit','du_return_on_equity','ev','earnings_per_share','revenue','total_expense']これらの特徴のうち 2 つを使用して計算すると仮定すると、相関の高いいくつかの特徴が得られます。

分析: 2 つの特徴間の相関計算

import pandas as pd
from scipy.stats import pearsonr  # 皮尔逊相关系数

'''
from scipy.stats import pearsonr
    x : (N,) array_like
    y : (N,) array_like Returns: (Pearson’s correlation coefficient, p-value)
'''
def pearsonr_demo():
    """
    相关系数计算
    """
    data = pd.read_csv("data/factor_returns.csv")

    factor = ['pe_ratio', 'pb_ratio', 'market_cap', 'return_on_asset_net_profit', 'du_return_on_equity', 'ev',
              'earnings_per_share', 'revenue', 'total_expense']

    for i in range(len(factor)):
        for j in range(i, len(factor) - 1):
            print("指标%s与指标%s之间的相关性大小为%f" % (factor[i], factor[j + 1], pearsonr(data[factor[i]], data[factor[j + 1]])[0]))

if __name__ == '__main__':
    # 设置 Pandas 输出选项以展示所有行和列的内容
    pd.set_option('display.max_columns', None)
    pearsonr_demo()

結果:

このことから、次のことがわかります。

インジケーター収益とインジケーター total_expense の相関は 0.995845 です。

指標 return_on_asset_net_profit と指標 du_return_on_equity の相関関係は 0.818697 です。

描画:

これら 2 つのインジケーターのペア間の相関は比較的大きく、これら 2 つのインジケーターを合成するなどの後続の処理を実行できます。

おすすめ

転載: blog.csdn.net/qq_60735796/article/details/132320783