mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/AI/AI-Unsupervised-Learning-Algorithms.md'] to ja
This commit is contained in:
parent
754f63195c
commit
c962ab4af4
@ -9,14 +9,14 @@
|
||||
|
||||
### K-Meansクラスタリング
|
||||
|
||||
K-Meansは、各点を最も近いクラスタ平均に割り当てることによってデータをK個のクラスタに分割する重心ベースのクラスタリングアルゴリズムです。アルゴリズムは次のように機能します:
|
||||
K-Meansは、各点を最も近いクラスタ平均に割り当てることによってデータをKクラスタに分割する重心ベースのクラスタリングアルゴリズムです。アルゴリズムは次のように機能します:
|
||||
1. **初期化**: K個の初期クラスタ中心(重心)を選択します。通常はランダムに、またはk-means++のようなよりスマートな方法で行います。
|
||||
2. **割り当て**: 距離メトリック(例:ユークリッド距離)に基づいて、各データポイントを最も近い重心に割り当てます。
|
||||
3. **更新**: 各クラスタに割り当てられたすべてのデータポイントの平均を取ることで重心を再計算します。
|
||||
3. **更新**: 各クラスタに割り当てられたすべてのデータポイントの平均を取ることによって重心を再計算します。
|
||||
4. **繰り返し**: クラスタの割り当てが安定するまで(重心が大きく移動しなくなるまで)ステップ2〜3を繰り返します。
|
||||
|
||||
> [!TIP]
|
||||
> *サイバーセキュリティにおけるユースケース:* K-Meansは、ネットワークイベントをクラスタリングすることによって侵入検知に使用されます。例えば、研究者はKDD Cup 99侵入データセットにK-Meansを適用し、正常なトラフィックと攻撃クラスタに効果的に分割されることを発見しました。実際には、セキュリティアナリストはログエントリやユーザー行動データをクラスタリングして、類似の活動のグループを見つけることがあります。よく形成されたクラスタに属さないポイントは、異常を示す可能性があります(例:新しいマルウェアの亜種が独自の小さなクラスタを形成する)。K-Meansは、動作プロファイルや特徴ベクトルに基づいてバイナリをグループ化することによってマルウェアファミリーの分類にも役立ちます。
|
||||
> *サイバーセキュリティにおけるユースケース:* K-Meansは、ネットワークイベントをクラスタリングすることによって侵入検知に使用されます。たとえば、研究者はKDD Cup 99侵入データセットにK-Meansを適用し、正常なトラフィックと攻撃クラスタに効果的に分割されることを発見しました。実際には、セキュリティアナリストは、ログエントリやユーザー行動データをクラスタリングして、類似の活動のグループを見つけることがあります。うまく形成されたクラスタに属さないポイントは、異常を示す可能性があります(例:新しいマルウェアの亜種が独自の小さなクラスタを形成する)。K-Meansは、動作プロファイルや特徴ベクトルに基づいてバイナリをグループ化することによってマルウェアファミリーの分類にも役立ちます。
|
||||
|
||||
#### Kの選択
|
||||
クラスタの数(K)は、アルゴリズムを実行する前に定義する必要があるハイパーパラメータです。エルボー法やシルエットスコアのような手法は、クラスタリングのパフォーマンスを評価することによってKの適切な値を決定するのに役立ちます:
|
||||
@ -57,31 +57,32 @@ print("Cluster centers (duration, bytes):")
|
||||
for idx, center in enumerate(kmeans.cluster_centers_):
|
||||
print(f" Cluster {idx}: {center}")
|
||||
```
|
||||
この例では、K-Meansは4つのクラスタを見つけるべきです。異常に高い持続時間(約200)を持つ小さな攻撃クラスタは、通常のクラスタからの距離を考慮して、理想的には独自のクラスタを形成します。結果を解釈するために、クラスタのサイズと中心を印刷します。実際のシナリオでは、少数のポイントを持つクラスタに潜在的な異常としてラベルを付けるか、そのメンバーを悪意のある活動のために調査することができます。
|
||||
この例では、K-Meansは4つのクラスターを見つけるべきです。異常に高い持続時間(約200)を持つ小さな攻撃クラスターは、通常のクラスターからの距離を考慮して、理想的には独自のクラスターを形成します。結果を解釈するために、クラスターのサイズと中心を印刷します。実際のシナリオでは、ポイントが少ないクラスターに潜在的な異常としてラベルを付けるか、そのメンバーを悪意のある活動のために調査することができます。
|
||||
</details>
|
||||
|
||||
### 階層的クラスタリング
|
||||
|
||||
階層的クラスタリングは、ボトムアップ(凝集型)アプローチまたはトップダウン(分割型)アプローチを使用してクラスタの階層を構築します。
|
||||
階層的クラスタリングは、ボトムアップ(凝集型)アプローチまたはトップダウン(分割型)アプローチを使用して、クラスターの階層を構築します。
|
||||
|
||||
1. **凝集型(ボトムアップ)**: 各データポイントを別々のクラスタとして開始し、最も近いクラスタを反復的にマージして、単一のクラスタが残るか、停止基準が満たされるまで続けます。
|
||||
2. **分割型(トップダウン)**: すべてのデータポイントを単一のクラスタに入れ、各データポイントが独自のクラスタになるか、停止基準が満たされるまでクラスタを反復的に分割します。
|
||||
1. **凝集型(ボトムアップ)**: 各データポイントを別々のクラスターとして開始し、最も近いクラスターを反復的にマージして、単一のクラスターが残るか、停止基準が満たされるまで続けます。
|
||||
2. **分割型(トップダウン)**: すべてのデータポイントを単一のクラスターに入れ、各データポイントが独自のクラスターになるか、停止基準が満たされるまでクラスターを反復的に分割します。
|
||||
|
||||
凝集型クラスタリングは、クラスタ間距離の定義と、どのクラスタをマージするかを決定するためのリンク基準を必要とします。一般的なリンク方法には、単一リンク(2つのクラスタ間の最も近いポイントの距離)、完全リンク(最も遠いポイントの距離)、平均リンクなどがあり、距離メトリックはしばしばユークリッドです。リンクの選択は生成されるクラスタの形状に影響を与えます。クラスタの数Kを事前に指定する必要はなく、選択したレベルで樹形図を「カット」して、希望する数のクラスタを得ることができます。
|
||||
凝集型クラスタリングは、クラスター間の距離の定義と、どのクラスターをマージするかを決定するためのリンク基準を必要とします。一般的なリンク方法には、単一リンク(2つのクラスター間の最も近いポイントの距離)、完全リンク(最も遠いポイントの距離)、平均リンクなどがあり、距離メトリックはしばしばユークリッド距離です。リンクの選択は生成されるクラスターの形状に影響を与えます。クラスターの数Kを事前に指定する必要はなく、選択したレベルで樹形図を「カット」して、希望する数のクラスターを得ることができます。
|
||||
|
||||
階層的クラスタリングは、異なる粒度レベルでクラスタ間の関係を示す樹形図を生成します。樹形図は、特定の数のクラスタを得るために希望するレベルでカットすることができます。
|
||||
階層的クラスタリングは、異なる粒度レベルでクラスター間の関係を示す樹形図を生成します。樹形図は、特定の数のクラスターを得るために希望するレベルでカットすることができます。
|
||||
|
||||
> [!TIP]
|
||||
> *サイバーセキュリティにおけるユースケース:* 階層的クラスタリングは、イベントやエンティティをツリーに整理して関係を特定することができます。たとえば、マルウェア分析では、凝集型クラスタリングがサンプルを行動の類似性によってグループ化し、マルウェアファミリーとバリアントの階層を明らかにすることができます。ネットワークセキュリティでは、IPトラフィックフローをクラスタリングし、樹形図を使用してトラフィックのサブグループ(例:プロトコル別、次に行動別)を確認することができます。Kを事前に選択する必要がないため、攻撃カテゴリの数が不明な新しいデータを探索する際に便利です。
|
||||
> *サイバーセキュリティにおけるユースケース:* 階層的クラスタリングは、イベントやエンティティをツリーに整理して関係を特定することができます。たとえば、マルウェア分析では、凝集型クラスタリングがサンプルを行動の類似性によってグループ化し、マルウェアファミリーとバリアントの階層を明らかにすることができます。ネットワークセキュリティでは、IPトラフィックフローをクラスタリングし、樹形図を使用してトラフィックのサブグループ(たとえば、プロトコル別、次に行動別)を確認することができます。Kを事前に選択する必要がないため、攻撃カテゴリの数が不明な新しいデータを探索する際に便利です。
|
||||
|
||||
#### 仮定と制限
|
||||
|
||||
階層的クラスタリングは特定のクラスタ形状を仮定せず、ネストされたクラスタをキャプチャできます。これは、グループ間の分類法や関係を発見するのに役立ちます(例:マルウェアをファミリーサブグループでグループ化)。これは決定論的であり(ランダム初期化の問題はありません)、主要な利点は樹形図であり、すべてのスケールでデータのクラスタリング構造に関する洞察を提供します - セキュリティアナリストは、意味のあるクラスタを特定するための適切なカットオフを決定できます。しかし、計算コストが高く(通常は$O(n^2)$時間またはそれ以上のナイーブな実装)、非常に大きなデータセットには実行可能ではありません。また、これは貪欲な手法であり、一度マージまたは分割が行われると元に戻すことができず、早期に間違いが発生した場合に最適でないクラスタにつながる可能性があります。外れ値も一部のリンク戦略に影響を与える可能性があります(単一リンクは、外れ値を介してクラスタがリンクする「チェイニング」効果を引き起こす可能性があります)。
|
||||
階層的クラスタリングは特定のクラスター形状を仮定せず、ネストされたクラスターをキャプチャできます。これは、グループ間の分類や関係を発見するのに役立ちます(たとえば、マルウェアをファミリーサブグループでグループ化する)。これは決定論的であり(ランダム初期化の問題はありません)、主要な利点は樹形図であり、すべてのスケールでデータのクラスタリング構造に関する洞察を提供します。セキュリティアナリストは、意味のあるクラスターを特定するための適切なカットオフを決定できます。ただし、計算コストが高く(通常は$O(n^2)$時間またはそれ以上のナイーブな実装)、非常に大きなデータセットには実行可能ではありません。また、これは貪欲な手法であり、一度マージまたは分割が行われると元に戻すことができず、早期にミスが発生した場合に最適でないクラスターにつながる可能性があります。外れ値も一部のリンク戦略に影響を与える可能性があります(単一リンクは、外れ値を介してクラスターがリンクする「チェイニング」効果を引き起こす可能性があります)。
|
||||
|
||||
<details>
|
||||
<summary>例 -- イベントの凝集型クラスタリング
|
||||
</summary>
|
||||
|
||||
K-Meansの例からの合成データ(3つの正常なクラスタ + 1つの攻撃クラスタ)を再利用し、凝集型クラスタリングを適用します。次に、樹形図とクラスタラベルを取得する方法を示します。
|
||||
K-Meansの例からの合成データ(3つの正常クラスター + 1つの攻撃クラスター)を再利用し、凝集型クラスタリングを適用します。次に、樹形図とクラスターラベルを取得する方法を示します。
|
||||
```python
|
||||
from sklearn.cluster import AgglomerativeClustering
|
||||
from scipy.cluster.hierarchy import linkage, dendrogram
|
||||
@ -117,13 +118,13 @@ DBSCANは、コアポイント、ボーダーポイント、およびノイズ
|
||||
クラスタリングは、未訪問のコアポイントを選択し、それを新しいクラスタとしてマークし、そこから密度到達可能なすべてのポイント(コアポイントとその隣接ポイントなど)を再帰的に追加することによって進行します。ボーダーポイントは近くのコアのクラスタに追加されます。すべての到達可能なポイントを拡張した後、DBSCANは別の未訪問のコアに移動して新しいクラスタを開始します。どのコアにも到達できなかったポイントはノイズとしてラベル付けされます。
|
||||
|
||||
> [!TIP]
|
||||
> *サイバーセキュリティにおけるユースケース:* DBSCANはネットワークトラフィックの異常検出に役立ちます。たとえば、通常のユーザー活動は特徴空間に1つ以上の密なクラスタを形成するかもしれませんが、新しい攻撃行動は散発的なポイントとして現れ、DBSCANはそれをノイズ(外れ値)としてラベル付けします。ポートスキャンやサービス拒否トラフィックをスパースなポイントの領域として検出できるネットワークフローレコードのクラスタリングに使用されてきました。別のアプリケーションはマルウェアのバリアントをグループ化することです:ほとんどのサンプルがファミリーごとにクラスタリングされるが、いくつかはどこにも適合しない場合、それらはゼロデイマルウェアである可能性があります。ノイズをフラグ付けする能力により、セキュリティチームはこれらの外れ値の調査に集中できます。
|
||||
> *サイバーセキュリティにおけるユースケース:* DBSCANはネットワークトラフィックの異常検出に役立ちます。たとえば、通常のユーザー活動は特徴空間に1つ以上の密なクラスタを形成する一方で、新しい攻撃行動は散発的なポイントとして現れ、DBSCANはそれをノイズ(外れ値)としてラベル付けします。ポートスキャンやサービス拒否トラフィックをポイントのまばらな領域として検出できるネットワークフローレコードのクラスタリングに使用されてきました。別のアプリケーションはマルウェアのバリアントをグループ化することです:ほとんどのサンプルがファミリーごとにクラスタリングされるが、いくつかはどこにも適合しない場合、それらはゼロデイマルウェアである可能性があります。ノイズをフラグ付けする能力により、セキュリティチームはこれらの外れ値の調査に集中できます。
|
||||
|
||||
#### 仮定と制限
|
||||
|
||||
**仮定と強み:** DBSCANは球状のクラスタを仮定しません - 任意の形状のクラスタ(連鎖状または隣接するクラスタさえも)を見つけることができます。データの密度に基づいてクラスタの数を自動的に決定し、外れ値をノイズとして効果的に識別できます。これにより、不規則な形状とノイズを持つ実世界のデータに対して強力です。外れ値に対して堅牢です(K-Meansとは異なり、外れ値をクラスタに強制しません)。クラスタがほぼ均一な密度を持つときにうまく機能します。
|
||||
**仮定と強み:** DBSCANは球状のクラスタを仮定しません - 任意の形状のクラスタ(連鎖状または隣接するクラスタさえも)を見つけることができます。データの密度に基づいてクラスタの数を自動的に決定し、外れ値をノイズとして効果的に識別できます。これにより、不規則な形状とノイズを持つ実世界のデータに対して強力です。外れ値に対して堅牢です(K-Meansとは異なり、外れ値をクラスタに強制しません)。クラスタがほぼ均一な密度を持つ場合にうまく機能します。
|
||||
|
||||
**制限:** DBSCANのパフォーマンスは、適切なεとMinPtsの値を選択することに依存します。異なる密度を持つデータに対しては苦労するかもしれません - 単一のεでは、密なクラスタとスパースなクラスタの両方を収容できません。εが小さすぎると、ほとんどのポイントがノイズとしてラベル付けされます;大きすぎると、クラスタが不正にマージされる可能性があります。また、DBSCANは非常に大きなデータセットでは非効率的になる可能性があります(単純には$O(n^2)$ですが、空間インデックスが役立つことがあります)。高次元の特徴空間では、「ε内の距離」の概念があまり意味を持たなくなることがあります(次元の呪い)、DBSCANは慎重なパラメータ調整が必要になるか、直感的なクラスタを見つけられないかもしれません。それにもかかわらず、HDBSCANのような拡張は、いくつかの問題(異なる密度など)に対処します。
|
||||
**制限:** DBSCANのパフォーマンスは、適切なεとMinPtsの値を選択することに依存します。異なる密度を持つデータに対しては苦労するかもしれません - 単一のεでは、密なクラスタとまばらなクラスタの両方を収容できません。εが小さすぎると、ほとんどのポイントがノイズとしてラベル付けされます;大きすぎると、クラスタが不正にマージされる可能性があります。また、DBSCANは非常に大きなデータセットでは非効率的になる可能性があります(単純には$O(n^2)$ですが、空間インデックスが役立つことがあります)。高次元の特徴空間では、「ε内の距離」の概念があまり意味を持たなくなることがあります(次元の呪い)、そのためDBSCANは慎重なパラメータ調整が必要になるか、直感的なクラスタを見つけられないことがあります。それにもかかわらず、HDBSCANのような拡張は、いくつかの問題(異なる密度など)に対処します。
|
||||
|
||||
<details>
|
||||
<summary>例 -- ノイズを伴うクラスタリング
|
||||
@ -149,13 +150,13 @@ num_noise = np.sum(labels == -1)
|
||||
print(f"DBSCAN found {num_clusters} clusters and {num_noise} noise points")
|
||||
print("Cluster labels for first 10 points:", labels[:10])
|
||||
```
|
||||
このスニペットでは、データスケールに合わせて `eps` と `min_samples` を調整しました(特徴単位で15.0、クラスタを形成するために5ポイントが必要)。DBSCANは2つのクラスタ(通常のトラフィッククラスタ)を見つけ、5つの注入された外れ値をノイズとしてフラグ付けする必要があります。これを確認するために、クラスタ数とノイズポイントの数を出力します。実際の設定では、εを反復処理し(k距離グラフヒューリスティックを使用してεを選択)、MinPts(一般的にはデータの次元数+1に設定される)を使用して安定したクラスタリング結果を見つけることがあります。ノイズを明示的にラベル付けする能力は、さらなる分析のために潜在的な攻撃データを分離するのに役立ちます。
|
||||
このスニペットでは、データスケールに合わせて `eps` と `min_samples` を調整しました(特徴単位で15.0、クラスタを形成するために5ポイントが必要)。DBSCANは2つのクラスタ(通常のトラフィッククラスタ)を見つけ、5つの注入された外れ値をノイズとしてフラグ付けする必要があります。これを確認するために、クラスタ数とノイズポイントの数を出力します。実際の設定では、εを反復処理(k距離グラフヒューリスティックを使用してεを選択)し、MinPts(一般的にはデータの次元数+1に設定される)を調整して安定したクラスタリング結果を見つけることがあります。ノイズを明示的にラベル付けする能力は、さらなる分析のために潜在的な攻撃データを分離するのに役立ちます。
|
||||
|
||||
</details>
|
||||
|
||||
### 主成分分析 (PCA)
|
||||
|
||||
PCAは、データの最大分散を捉える新しい直交軸(主成分)を見つけるための**次元削減**手法です。簡単に言えば、PCAはデータを新しい座標系に回転させて投影し、最初の主成分(PC1)が可能な限り最大の分散を説明し、2番目のPC(PC2)がPC1に直交する最大の分散を説明し、以下同様です。数学的には、PCAはデータの共分散行列の固有ベクトルを計算します。これらの固有ベクトルは主成分の方向であり、対応する固有値は各固有ベクトルによって説明される分散の量を示します。PCAは、特徴抽出、視覚化、ノイズ削減によく使用されます。
|
||||
PCAは、データの最大分散を捉える新しい直交軸(主成分)を見つけるための**次元削減**手法です。簡単に言えば、PCAはデータを新しい座標系に回転させて投影し、最初の主成分(PC1)が可能な限り最大の分散を説明し、2番目の主成分(PC2)がPC1に直交する最大の分散を説明し、以下同様です。数学的には、PCAはデータの共分散行列の固有ベクトルを計算します。これらの固有ベクトルは主成分の方向であり、対応する固有値は各固有ベクトルによって説明される分散の量を示します。PCAは、特徴抽出、視覚化、ノイズ削減によく使用されます。
|
||||
|
||||
この手法は、データセットの次元に**重要な線形依存関係や相関関係**が含まれている場合に有用です。
|
||||
|
||||
@ -176,7 +177,7 @@ Aが正方行列で、vがゼロでないベクトルであるとします: `A
|
||||
- Aは [ [1, 2], [2, 1]] のような正方行列(例:共分散行列)
|
||||
- vは固有ベクトル(例:[1, 1])
|
||||
|
||||
すると、 `A * v = [ [1, 2], [2, 1]] * [1, 1] = [3, 3]` となり、これは固有値λが固有ベクトルvで掛けられたもので、固有値λ = 3になります。
|
||||
すると、`A * v = [ [1, 2], [2, 1]] * [1, 1] = [3, 3]` となり、これは固有値λが固有ベクトルvで掛けられたもので、固有値λ = 3になります。
|
||||
|
||||
#### PCAにおける固有値と固有ベクトル
|
||||
|
||||
@ -184,10 +185,10 @@ Aが正方行列で、vがゼロでないベクトルであるとします: `A
|
||||
|
||||
1. **標準化**:データセットから各特徴(ピクセル)の平均を引いてデータを中心にします。
|
||||
2. **共分散行列**:標準化されたデータの共分散行列を計算し、特徴(ピクセル)がどのように一緒に変動するかを捉えます。
|
||||
- 2つの変数(この場合はピクセル)間の共分散は、どの程度一緒に変化するかを示します。ここでの考え方は、どのピクセルが線形関係で一緒に増加または減少する傾向があるかを見つけることです。
|
||||
- 2つの変数(この場合はピクセル)間の共分散は、どの程度一緒に変化するかを示します。ここでの考えは、どのピクセルが線形関係で一緒に増加または減少する傾向があるかを見つけることです。
|
||||
- 例えば、ピクセル1とピクセル2が一緒に増加する傾向がある場合、彼らの間の共分散は正になります。
|
||||
- 共分散行列は10,000x10,000の行列になり、各エントリは2つのピクセル間の共分散を表します。
|
||||
3. **固有値方程式を解く**:解くべき固有値方程式は `C * v = λ * v` で、ここでCは共分散行列、vは固有ベクトル、λは固有値です。次のような方法で解くことができます:
|
||||
3. **固有値方程式を解く**:解くべき固有値方程式は `C * v = λ * v` で、Cは共分散行列、vは固有ベクトル、λは固有値です。これは次のような方法で解くことができます:
|
||||
- **固有値分解**:共分散行列に対して固有値分解を行い、固有値と固有ベクトルを取得します。
|
||||
- **特異値分解 (SVD)**:代わりに、SVDを使用してデータ行列を特異値とベクトルに分解し、主成分を得ることもできます。
|
||||
4. **主成分の選択**:固有値を降順に並べ、最大の固有値に対応する上位Kの固有ベクトルを選択します。これらの固有ベクトルは、データの最大分散の方向を表します。
|
||||
@ -223,13 +224,13 @@ print("Original shape:", data_4d.shape, "Reduced shape:", data_2d.shape)
|
||||
# We can examine a few transformed points
|
||||
print("First 5 data points in PCA space:\n", data_2d[:5])
|
||||
```
|
||||
ここでは、以前の通常のトラフィッククラスタを取り、各データポイントにバイト数と期間に相関する2つの追加機能(パケットとエラー)を拡張しました。次に、PCAを使用して4つの特徴を2つの主成分に圧縮します。説明された分散比を印刷し、たとえば、2つの成分によって95%以上の分散が捕捉されていることを示すかもしれません(つまり、情報損失が少ないことを意味します)。出力は、データの形状が(1500, 4)から(1500, 2)に減少することも示しています。PCA空間の最初のいくつかのポイントが例として示されています。実際には、data_2dをプロットしてクラスタが区別可能かどうかを視覚的に確認できます。異常が存在する場合、PCA空間の主要なクラスタから離れた点として見ることができるかもしれません。したがって、PCAは複雑なデータを人間の解釈や他のアルゴリズムへの入力として管理可能な形に抽出するのに役立ちます。
|
||||
ここでは、以前の通常のトラフィッククラスタを取り、各データポイントにバイトと期間に相関する2つの追加機能(パケットとエラー)を拡張しました。次に、PCAを使用して4つの特徴を2つの主成分に圧縮します。説明された分散比を印刷し、たとえば、2つの成分によって95%以上の分散が捕捉されていることを示すかもしれません(つまり、情報損失が少ないことを意味します)。出力は、データの形状が(1500, 4)から(1500, 2)に減少することも示しています。PCA空間の最初のいくつかのポイントが例として示されています。実際には、data_2dをプロットしてクラスタが区別可能かどうかを視覚的に確認できます。異常が存在する場合、PCA空間の主要なクラスタから離れた点としてそれを見ることができるかもしれません。したがって、PCAは複雑なデータを人間の解釈や他のアルゴリズムへの入力として管理可能な形に抽出するのに役立ちます。
|
||||
|
||||
</details>
|
||||
|
||||
### ガウス混合モデル (GMM)
|
||||
|
||||
ガウス混合モデルは、データが**未知のパラメータを持ついくつかのガウス(正規)分布の混合から生成される**と仮定します。本質的には、これは確率的クラスタリングモデルです:各ポイントをK個のガウス成分の1つに柔軟に割り当てようとします。各ガウス成分kは、平均ベクトル(μ_k)、共分散行列(Σ_k)、およびそのクラスタの普及度を表す混合重み(π_k)を持っています。K-Meansが「ハード」割り当てを行うのに対し、GMMは各ポイントが各クラスタに属する確率を与えます。
|
||||
ガウス混合モデルは、データが**未知のパラメータを持ついくつかのガウス(正規)分布の混合から生成される**と仮定します。本質的には、これは確率的クラスタリングモデルです:各ポイントをK個のガウス成分の1つに柔軟に割り当てようとします。各ガウス成分kには、平均ベクトル(μ_k)、共分散行列(Σ_k)、およびそのクラスタの普及度を表す混合重み(π_k)があります。K-Meansが「ハード」割り当てを行うのに対し、GMMは各ポイントが各クラスタに属する確率を与えます。
|
||||
|
||||
GMMのフィッティングは通常、期待値最大化(EM)アルゴリズムを介して行われます:
|
||||
|
||||
@ -250,10 +251,10 @@ r_{nk} = \frac{\pi_k \mathcal{N}(x_n | \mu_k, \Sigma_k)}{\sum_{j=1}^{K} \pi_j \m
|
||||
|
||||
- **EおよびMステップを繰り返す** 収束するまで(パラメータが安定するか、尤度の改善が閾値を下回るまで)。
|
||||
|
||||
結果は、全体のデータ分布をモデル化するガウス分布のセットです。フィッティングされたGMMを使用して、各ポイントを最も高い確率のガウスに割り当てることでクラスタリングするか、不確実性のために確率を保持することができます。また、新しいポイントの尤度を評価して、モデルに適合するかどうかを確認することもできます(異常検出に役立ちます)。
|
||||
結果は、全体のデータ分布をモデル化するガウス分布のセットです。フィッティングされたGMMを使用して、各ポイントを最も高い確率のガウスに割り当てることでクラスタリングするか、不確実性のために確率を保持できます。また、新しいポイントの尤度を評価して、モデルに適合するかどうかを確認することもできます(異常検出に役立ちます)。
|
||||
|
||||
> [!TIP]
|
||||
> *サイバーセキュリティにおけるユースケース:* GMMは、正常データの分布をモデル化することによって異常検出に使用できます:学習した混合の下で非常に低い確率のポイントは異常としてフラグ付けされます。たとえば、正当なネットワークトラフィックの特徴に基づいてGMMをトレーニングすることができます。学習したクラスタに似ていない攻撃接続は低い尤度を持つでしょう。GMMは、クラスタが異なる形状を持つ可能性がある活動をクラスタリングするためにも使用されます。たとえば、行動プロファイルによってユーザーをグループ化する場合、各プロファイルの特徴はガウス的である可能性がありますが、それぞれ独自の分散構造を持っています。別のシナリオ:フィッシング検出では、正当なメールの特徴が1つのガウスクラスタを形成し、既知のフィッシングが別のものを形成し、新しいフィッシングキャンペーンが既存の混合に対して別のガウスまたは低い尤度のポイントとして現れる可能性があります。
|
||||
> *サイバーセキュリティにおけるユースケース:* GMMは、正常データの分布をモデル化することによって異常検出に使用できます:学習した混合の下で非常に低い確率を持つポイントは異常としてフラグ付けされます。たとえば、正当なネットワークトラフィックの特徴に基づいてGMMをトレーニングすることができます。学習したクラスタに似ていない攻撃接続は低い尤度を持つでしょう。GMMは、クラスタが異なる形状を持つ可能性がある活動をクラスタリングするためにも使用されます。たとえば、行動プロファイルによってユーザーをグループ化する場合、各プロファイルの特徴はガウス的である可能性がありますが、それぞれ独自の分散構造を持っています。別のシナリオ:フィッシング検出では、正当なメールの特徴が1つのガウスクラスタを形成し、既知のフィッシングが別のものを形成し、新しいフィッシングキャンペーンが既存の混合に対して別のガウスまたは低い尤度のポイントとして現れる可能性があります。
|
||||
|
||||
#### 仮定と制限
|
||||
|
||||
@ -282,7 +283,7 @@ log_likelihood = gmm.score_samples(sample_attack)
|
||||
print("Cluster membership probabilities for sample attack:", probs)
|
||||
print("Log-likelihood of sample attack under GMM:", log_likelihood)
|
||||
```
|
||||
このコードでは、正常なトラフィックに対して3つのガウス分布を持つGMMをトレーニングします(正当なトラフィックの3つのプロファイルを知っていると仮定します)。印刷された平均と共分散はこれらのクラスタを説明します(例えば、1つの平均はクラスタの中心に対応する[50,500]の周辺にあるかもしれません)。次に、疑わしい接続[duration=200, bytes=800]をテストします。predict_probaは、このポイントが3つのクラスタのそれぞれに属する確率を示します – [200,800]が正常なクラスタから遠く離れているため、これらの確率は非常に低いか、非常に偏っていると予想されます。全体のscore_samples(対数尤度)が印刷されます;非常に低い値は、そのポイントがモデルにうまく適合していないことを示し、異常としてフラグを立てます。実際には、対数尤度(または最大確率)にしきい値を設定して、ポイントが悪意のあるものと見なされるには十分にありそうもないかどうかを判断できます。したがって、GMMは異常検出を行うための原則的な方法を提供し、不確実性を認めるソフトクラスタも生成します。
|
||||
このコードでは、正常なトラフィックに対して3つのガウス分布を持つGMMをトレーニングします(正当なトラフィックの3つのプロファイルを知っていると仮定します)。印刷された平均と共分散はこれらのクラスタを説明します(例えば、1つの平均はクラスタの中心に対応する[50,500]の周辺にあるかもしれません)。次に、疑わしい接続[duration=200, bytes=800]をテストします。predict_probaは、このポイントが3つのクラスタのそれぞれに属する確率を示します – [200,800]が正常なクラスタから遠く離れているため、これらの確率は非常に低いか、非常に偏っていると予想されます。全体のscore_samples(対数尤度)が印刷されます;非常に低い値は、そのポイントがモデルにうまく適合していないことを示し、異常としてフラグを立てます。実際には、対数尤度(または最大確率)にしきい値を設定して、ポイントが悪意のあるものと見なされるには十分にありそうもないかどうかを判断できます。したがって、GMMは異常検出を行うための原則的な方法を提供し、不確実性を認識するソフトクラスタも生成します。
|
||||
|
||||
### Isolation Forest
|
||||
|
||||
@ -295,7 +296,7 @@ print("Log-likelihood of sample attack under GMM:", log_likelihood)
|
||||
|
||||
#### 仮定と制限
|
||||
|
||||
**利点**: Isolation Forestは分布の仮定を必要とせず、孤立を直接ターゲットにします。高次元データや大規模データセットに対して効率的です(フォレストを構築するための線形複雑度$O(n\log n)$)ので、各木は特徴のサブセットと分割のみでポイントを孤立させます。数値特徴をうまく処理する傾向があり、$O(n^2)$の可能性がある距離ベースの方法よりも速くなることがあります。また、自動的に異常スコアを提供するため、アラートのしきい値を設定することができます(または、期待される異常割合に基づいてカットオフを自動的に決定するために汚染パラメータを使用できます)。
|
||||
**利点**: Isolation Forestは分布の仮定を必要とせず、孤立を直接ターゲットにします。高次元データや大規模データセットに対して効率的です(フォレストを構築するための線形複雑度$O(n\log n)$); 各木は特徴のサブセットと分割のみでポイントを孤立させます。数値特徴をうまく処理する傾向があり、$O(n^2)$の可能性がある距離ベースの方法よりも速くなることがあります。また、自動的に異常スコアを提供するため、アラートのしきい値を設定することができます(または期待される異常割合に基づいてカットオフを自動的に決定するために汚染パラメータを使用できます)。
|
||||
|
||||
**制限**: ランダムな性質のため、結果は実行間でわずかに異なる場合があります(ただし、十分な数の木があればこれは小さいです)。データに多くの無関係な特徴がある場合や、異常がどの特徴でも強く区別されない場合、孤立が効果的でない可能性があります(ランダムな分割が偶然に正常なポイントを孤立させる可能性があります – ただし、多くの木を平均化することでこれを軽減します)。また、Isolation Forestは一般的に異常が少数派であると仮定します(これは通常、サイバーセキュリティのシナリオでは真実です)。
|
||||
|
||||
@ -303,7 +304,7 @@ print("Log-likelihood of sample attack under GMM:", log_likelihood)
|
||||
<summary>例 -- ネットワークログにおける外れ値の検出
|
||||
</summary>
|
||||
|
||||
以前のテストデータセット(正常なポイントといくつかの攻撃ポイントを含む)を使用し、Isolation Forestを実行して攻撃を分離できるかどうかを確認します。デモンストレーションのために、データの約15%が異常であると予想すると仮定します。
|
||||
以前のテストデータセット(正常なポイントといくつかの攻撃ポイントを含む)を使用し、Isolation Forestを実行して攻撃を分離できるかどうかを確認します。異常なデータが約15%であると予想していると仮定します。
|
||||
```python
|
||||
from sklearn.ensemble import IsolationForest
|
||||
|
||||
@ -321,7 +322,7 @@ print("Example anomaly scores (lower means more anomalous):", anomaly_scores[:5]
|
||||
```
|
||||
このコードでは、`IsolationForest`を100本の木でインスタンス化し、`contamination=0.15`を設定します(これは約15%の異常を期待することを意味します; モデルはスコアの閾値を設定し、約15%のポイントがフラグ付けされるようにします)。`X_test_if`にフィットさせますが、これは正常なポイントと攻撃ポイントの混合を含んでいます(注意: 通常はトレーニングデータにフィットさせ、新しいデータに対して予測を行いますが、ここでは結果を直接観察するために同じセットでフィットと予測を行います)。
|
||||
|
||||
出力は最初の20ポイントの予測ラベルを示しています(-1は異常を示します)。また、検出された異常の合計数といくつかの例の異常スコアを印刷します。120ポイントのうち約18ポイントが-1とラベル付けされることを期待します(汚染が15%だったため)。もし私たちの20の攻撃サンプルが本当に最も外れたものであれば、そのほとんどはこれらの-1予測に現れるはずです。異常スコア(Isolation Forestの決定関数)は正常なポイントでは高く、異常では低く(より負の値)なります – 分離を確認するためにいくつかの値を印刷します。実際には、スコアでデータをソートしてトップの外れ値を確認し、調査することが考えられます。したがって、Isolation Forestは大規模なラベルのないセキュリティデータを効率的にふるい分け、人間の分析やさらなる自動的な精査のために最も不規則なインスタンスを選び出す方法を提供します。
|
||||
出力は最初の20ポイントの予測ラベルを示しています(-1は異常を示します)。また、合計で検出された異常の数といくつかの例の異常スコアを印刷します。120ポイントのうち約18ポイントが-1とラベル付けされることを期待します(汚染が15%だったため)。もし私たちの20の攻撃サンプルが本当に最も外れたものであれば、そのほとんどはこれらの-1予測に現れるはずです。異常スコア(Isolation Forestの決定関数)は正常なポイントでは高く、異常では低く(より負の値)なります – 分離を確認するためにいくつかの値を印刷します。実際には、スコアでデータをソートしてトップの外れ値を見て調査することが考えられます。したがって、Isolation Forestは大規模なラベルのないセキュリティデータを効率的にふるい分け、人間の分析やさらなる自動的な精査のために最も不規則なインスタンスを選び出す方法を提供します。
|
||||
|
||||
### t-SNE (t-分布確率的近傍埋め込み)
|
||||
|
||||
@ -330,25 +331,25 @@ print("Example anomaly scores (lower means more anomalous):", anomaly_scores[:5]
|
||||
アルゴリズムには2つの主要なステージがあります:
|
||||
|
||||
1. **高次元空間でのペアワイズ親和性の計算:** 各ポイントのペアについて、t-SNEはそのペアを近隣として選ぶ確率を計算します(これは各ポイントにガウス分布を中心にして距離を測定することで行われます – パープレキシティパラメータは考慮される近隣の実効数に影響を与えます)。
|
||||
2. **低次元(例えば2D)空間でのペアワイズ親和性の計算:** 最初に、ポイントは2Dにランダムに配置されます。t-SNEはこのマップの距離に対して類似の確率を定義します(より遠くのポイントに自由を与えるために、ガウスよりも重い尾を持つスチューデントt分布カーネルを使用します)。
|
||||
3. **勾配降下法:** t-SNEは次に、2Dのポイントを反復的に移動させ、高次元の親和性分布と低次元のそれとの間のクルバック–ライブラー(KL)ダイバージェンスを最小化します。これにより、2Dの配置が高次元の構造をできるだけ反映するようになります – 元の空間で近かったポイントは互いに引き寄せ合い、遠くにあるものは反発し、バランスが見つかるまで続きます。
|
||||
2. **低次元(例えば2D)空間でのペアワイズ親和性の計算:** 最初に、ポイントは2Dにランダムに配置されます。t-SNEはこのマップ内の距離に対して類似の確率を定義します(より遠くのポイントに自由を与えるために、ガウスよりも重い尾を持つスチューデントt分布カーネルを使用します)。
|
||||
3. **勾配降下法:** t-SNEは次に、2D内のポイントを反復的に移動させ、高次元の親和性分布と低次元のそれとの間のクルバック–ライブラー(KL)ダイバージェンスを最小化します。これにより、2Dの配置が高次元の構造をできるだけ反映するようになります – 元の空間で近かったポイントは互いに引き寄せ合い、遠くのポイントは反発し、バランスが見つかるまで続きます。
|
||||
|
||||
その結果、データのクラスタが明らかになる視覚的に意味のある散布図が得られます。
|
||||
その結果、データ内のクラスターが明らかになる視覚的に意味のある散布図が得られます。
|
||||
|
||||
> [!TIP]
|
||||
> *サイバーセキュリティにおけるユースケース:* t-SNEはしばしば**人間の分析のために高次元のセキュリティデータを視覚化する**ために使用されます。例えば、セキュリティオペレーションセンターでは、アナリストがポート番号、頻度、バイト数などの数十の特徴を持つイベントデータセットを取り、t-SNEを使用して2Dプロットを生成することができます。このプロットでは、攻撃が独自のクラスタを形成したり、正常なデータから分離されたりすることがあり、識別が容易になります。マルウェアファミリーのグルーピングや、異なる攻撃タイプが明確にクラスタリングされるネットワーク侵入データに適用され、さらなる調査を導くことができます。基本的に、t-SNEはサイバーデータの構造を視覚化する方法を提供します。
|
||||
> *サイバーセキュリティにおけるユースケース:* t-SNEはしばしば**人間の分析のために高次元のセキュリティデータを視覚化する**ために使用されます。例えば、セキュリティオペレーションセンターでは、アナリストがポート番号、頻度、バイト数などの数十の特徴を持つイベントデータセットを取り、t-SNEを使用して2Dプロットを生成することができます。このプロットでは、攻撃が独自のクラスターを形成したり、正常なデータから分離されたりすることがあり、識別が容易になります。マルウェアファミリーのグルーピングや、異なる攻撃タイプが明確にクラスター化されるネットワーク侵入データに適用され、さらなる調査を導くことができます。基本的に、t-SNEはサイバーデータの構造を視覚化する方法を提供します。
|
||||
|
||||
#### 仮定と制限
|
||||
|
||||
t-SNEはパターンの視覚的発見に優れています。クラスタ、サブクラスタ、他の線形手法(PCAなど)では見えない外れ値を明らかにすることができます。マルウェアの行動プロファイルやネットワークトラフィックパターンのような複雑なデータを視覚化するためにサイバーセキュリティ研究で使用されてきました。局所的な構造を保持するため、自然なグルーピングを示すのに適しています。
|
||||
t-SNEはパターンの視覚的発見に優れています。クラスター、サブクラスター、他の線形手法(PCAなど)では見えない外れ値を明らかにすることができます。マルウェアの行動プロファイルやネットワークトラフィックパターンなどの複雑なデータを視覚化するためにサイバーセキュリティ研究で使用されています。局所的な構造を保持するため、自然なグルーピングを示すのに適しています。
|
||||
|
||||
しかし、t-SNEは計算負荷が重く(約$O(n^2)$)、非常に大きなデータセットではサンプリングが必要になる場合があります。また、出力に影響を与えるハイパーパラメータ(パープレキシティ、学習率、反復回数)があります – 例えば、異なるパープレキシティ値は異なるスケールでクラスタを明らかにするかもしれません。t-SNEプロットは時折誤解されることがあります – マップ内の距離はグローバルに直接的な意味を持たず(局所的な近隣に焦点を当てており、時にはクラスタが人工的に分離されて見えることがあります)。また、t-SNEは主に視覚化のためのものであり、新しいデータポイントを再計算せずに投影する簡単な方法を提供せず、予測モデリングの前処理として使用することは意図されていません(UMAPはこれらの問題のいくつかをより速い速度で解決する代替手段です)。
|
||||
しかし、t-SNEは計算負荷が重く(約$O(n^2)$)、非常に大きなデータセットではサンプリングが必要になる場合があります。また、出力に影響を与えるハイパーパラメータ(パープレキシティ、学習率、反復回数)があります – 例えば、異なるパープレキシティ値は異なるスケールでクラスターを明らかにするかもしれません。t-SNEプロットは時折誤解されることがあります – マップ内の距離はグローバルに直接的な意味を持たず(局所的な近隣に焦点を当てており、時にはクラスターが人工的に分離されて見えることがあります)。また、t-SNEは主に視覚化のためのものであり、新しいデータポイントを再計算せずに投影するための簡単な方法を提供せず、予測モデリングの前処理として使用することは意図されていません(UMAPはこれらの問題のいくつかをより速い速度で解決する代替手段です)。
|
||||
|
||||
<details>
|
||||
<summary>例 -- ネットワーク接続の視覚化
|
||||
</summary>
|
||||
|
||||
t-SNEを使用してマルチフィーチャーデータセットを2Dに削減します。例として、以前の4Dデータ(正常なトラフィックの3つの自然なクラスタがあった)を取り、いくつかの異常ポイントを追加します。その後、t-SNEを実行し、(概念的に)結果を視覚化します。
|
||||
t-SNEを使用してマルチフィーチャーデータセットを2Dに削減します。例として、以前の4Dデータ(正常なトラフィックの3つの自然なクラスターがあった)を取り、いくつかの異常ポイントを追加します。その後、t-SNEを実行し、(概念的に)結果を視覚化します。
|
||||
```python
|
||||
# 1 ─────────────────────────────────────────────────────────────────────
|
||||
# Create synthetic 4-D dataset
|
||||
@ -431,7 +432,7 @@ plt.legend()
|
||||
plt.tight_layout()
|
||||
plt.show()
|
||||
```
|
||||
ここでは、以前の4Dノーマルデータセットと少数の極端な外れ値を組み合わせました(外れ値は1つの特徴(「duration」)が非常に高く設定されており、奇妙なパターンをシミュレートしています)。通常のパープレキシティ30でt-SNEを実行します。出力データdata_2dの形状は(1505, 2)です。このテキストでは実際にプロットはしませんが、もし行った場合、3つのノーマルクラスタに対応する3つの密集したクラスタと、5つの外れ値がそれらのクラスタから遠く離れた孤立した点として現れることが予想されます。インタラクティブなワークフローでは、ポイントをラベル(ノーマルまたはどのクラスタ、対異常)で色分けしてこの構造を確認できます。ラベルがなくても、アナリストは2Dプロット上の空白のスペースに座っている5つのポイントに気づき、それらをフラグ付けするかもしれません。これは、t-SNEがサイバーセキュリティデータにおける視覚的異常検出とクラスタ検査に強力な助けとなり、上記の自動化アルゴリズムを補完する方法を示しています。
|
||||
ここでは、以前の4Dノーマルデータセットに少数の極端な外れ値を組み合わせました(外れ値は1つの特徴(「duration」)が非常に高く設定されており、奇妙なパターンをシミュレートしています)。通常のパープレキシティ30でt-SNEを実行します。出力データdata_2dの形状は(1505, 2)です。このテキストでは実際にプロットはしませんが、もし行った場合、3つのノーマルクラスタに対応する3つの密集したクラスタと、5つの外れ値がそれらのクラスタから遠く離れた孤立した点として現れることが予想されます。インタラクティブなワークフローでは、ポイントをラベル(ノーマルまたはどのクラスタ、対異常)で色分けしてこの構造を確認できます。ラベルがなくても、アナリストは2Dプロット上の空白のスペースに座っている5つのポイントに気づき、それらをフラグ付けするかもしれません。これは、t-SNEがサイバーセキュリティデータにおける視覚的異常検出とクラスタ検査に強力な支援を提供し、上記の自動化アルゴリズムを補完する方法を示しています。
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -802,7 +802,7 @@
|
||||
- [AI Prompts](AI/AI-Prompts.md)
|
||||
- [AI Risk Frameworks](AI/AI-Risk-Frameworks.md)
|
||||
- [AI Supervised Learning Algorithms](AI/AI-Supervised-Learning-Algorithms.md)
|
||||
- [AI Unsupervised Learning Algorithms](AI/AI-Unsupervised-Learning-algorithms.md)
|
||||
- [AI Unsupervised Learning Algorithms](AI/AI-Unsupervised-Learning-Algorithms.md)
|
||||
- [AI Reinforcement Learning Algorithms](AI/AI-Reinforcement-Learning-Algorithms.md)
|
||||
- [LLM Training](AI/AI-llm-architecture/README.md)
|
||||
- [0. Basic LLM Concepts](AI/AI-llm-architecture/0.-basic-llm-concepts.md)
|
||||
|
Loading…
x
Reference in New Issue
Block a user