目次
この記事では、基本概念や数学的背景から Python や PyTorch でのコード実装に至るまで、サポート ベクター マシン (SVM) のあらゆる側面を包括的かつ詳細に解説します。この記事では、テキスト分類、画像認識、バイオインフォマティクス、財務予測などの複数の実用的なアプリケーション シナリオでの SVM の使用についても説明します。
TechLead をフォローして、AI に関するあらゆる次元の知識を共有してください。著者は 10 年以上のインターネット サービス アーキテクチャ、AI 製品開発の経験、およびチーム管理の経験があり、復旦大学の同済大学で修士号を取得し、復丹ロボット知能研究所のメンバーであり、Alibaba Cloud によって認定された上級アーキテクトです。プロジェクト管理のプロフェッショナルであり、数億の収益を誇る AI 製品の研究開発者です。
I.はじめに
背景
サポート ベクター マシン (SVM、サポート ベクター マシン) は、分類、回帰、さらには異常検出で広く使用されている教師あり学習アルゴリズムです。SVM アルゴリズムは、1995 年に Vapnik と Chervonenkis によって初めて提案されて以来、機械学習の分野で大きな評判を得てきました。これは、幾何学理論および統計理論における強固な数学的基礎が部分的にありますが、実際のアプリケーションでの優れたパフォーマンスによるものでもあります。
例: たとえば、顔認識やテキスト分類の問題では、SVM は他のアルゴリズムよりも高い精度を達成できることがよくあります。
SVMアルゴリズムの重要性
SVM は、2 つのカテゴリ間の「マージン」を最大化する決定境界 (または「超平面」) を見つけることによって機能します。これにより、高次元空間で優れた一般化機能が得られます。
例: スパム分類問題では、数十、場合によっては数百の特徴が存在する可能性があり、SVM はこの高次元の特徴空間で最適な決定境界を効果的に見つけることができます。
2. SVMの基本
線形分類器の概要
サポート ベクター マシン (SVM) は、決定境界によって異なるデータ ポイントを分離するように設計された線形分類器の一種です。この決定境界は、2 次元平面では直線、3 次元空間では平面などとなり、N 次元空間ではこの決定境界は「超平面」と呼ばれます。
例: 2 次元平面上に赤と青の点がある場合、線形分類器 (SVM など) は直線を探して、赤の点と青の点を分離しようとします。
サポートベクターとは何ですか?
SVM アルゴリズムでは、「サポート ベクター」は超平面に最も近いデータ ポイントを指します。これらのデータ ポイントは、誤って分類されたポイントである可能性が最も高いため、超平面の位置と方向を決定するために使用されます。
例: 猫と犬を区別する分類問題では、サポート ベクターは、猫に見える犬や犬に見える猫など、誤って分類されやすい猫または犬の写真である可能性があります。
超平面と決定境界
超平面は、SVM がデータ分類に使用する決定境界です。2 次元空間では超平面は直線であり、3 次元空間では超平面は平面になります。数学的には、N 次元の超平面は (Ax + By + … + Z = 0) の形式で表現できます。
例: テキスト分類問題では、単語の頻度やその他のテキストの特徴を次元として使用できます。超平面は、この多次元空間でさまざまなカテゴリ (スパムと非スパムなど) を分割する決定境界となります。
SVMの目的関数
SVM の主な目標は、サポート ベクターから超平面までの距離を「最大化する」超平面を見つけることです。数学的には、これは「マージンの最大化」と呼ばれます。目的関数は通常、さまざまなアルゴリズム (勾配降下法、SMO アルゴリズムなど) によって解決できる凸最適化問題です。
例: クレジット カード不正検出システムにおける SVM の目標は、「無害な」トランザクションと「不正な」トランザクションの間の間隔を最大化する超平面を見つけて、新しいトランザクション レコードをより正確に分類できるようにすることです。
3. 数学的背景と最適化
ラグランジュ乗数法
ラグランジュ乗数法は、制約付きの最適化問題を解くために使用される数学的手法で、特にサポート ベクター マシン (SVM) の最適化問題に適しています。ラグランジュ関数の基本形式は次のように表現できます。
例: バイナリ分類問題では、すべてのサンプルが正しく分類されるように (または可能な限りこの目標に近づくように) しながら、(w) のノルムを最小化する (つまり、モデルの複雑さを最適化する) 必要がある場合があります。この問題を解決する手法がラグランジュ乗数法である。
KKTの条件
Karush-Kuhn-Tucker (KKT) 条件は、非線形計画問題で必要な条件のセットであり、SVM の最適化問題でも使用されます。これは、不等式制約を処理するためのラグランジュ乗数法の拡張です。SVM では、KKT 条件は主に、特定の解が最適解であるかどうかをテストするために使用されます。
例: SVM モデルでは、KKT 条件は、見つかった超平面がマージンを最大化する超平面であるかどうかを検証し、モデルの優位性を確認するのに役立ちます。
カーネルトリック
カーネル トリックは、実際に高次元の計算を実行せずに、高次元空間内のデータ ポイント間の類似性を暗黙的に計算する方法です。これにより、SVM は非線形問題を効果的に解決できます。一般的に使用されるカーネル関数には、線形カーネル、多項式カーネル、放射基底カーネル (RBF) などが含まれます。
例: テキスト分類タスクで非線形分離可能データに遭遇した場合は、カーネル技術を使用して、データを効果的に分離できる高次元空間内の決定境界を見つけます。
双対問題と主問題
SVM では通常、最適化問題を双対問題に変換できるため、双対問題の方が解決しやすく、カーネル機能をより自然に導入できるという利点があります。双対問題と主問題は、いわゆる双対性ギャップを通じて接続されており、双対性ギャップが 0 の場合、双対問題の解決策は主問題の解決策となります。
例: 大規模なデータセットを扱う場合、マスター問題の代わりに双対問題を解くことで、計算の複雑さと時間を大幅に削減できます。
4. コードの実装
このパートでは、Python と PyTorch ライブラリを使用して、基本的なサポート ベクター マシン (SVM) を実装します。次の主な手順に従います。
- データの前処理: トレーニングとテスト用にデータを準備します。
- モデル定義: SVM モデルのアーキテクチャを定義します。
- オプティマイザーの選択: 適切な最適化アルゴリズムを選択します。
- モデルをトレーニングする: トレーニング データを使用してモデルをトレーニングします。
- モデルを評価する: テスト データを使用してモデルのパフォーマンスを評価します。
データの前処理
まず、トレーニングとテスト用のデータを準備する必要があります。簡単にするために、PyTorch の組み込み Tensor データ構造を使用します。
import torch
# 创建训练数据和标签
X_train = torch.FloatTensor([[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3]])
y_train = torch.FloatTensor([1, 1, 1, -1, -1, -1])
# 创建测试数据
X_test = torch.FloatTensor([[1, 0.5], [2, 0.5]])
例:
X_train
のデータは 2 次元平面上の点を表し、y_train
のデータはこれらの点のラベルを表します。たとえば、(1, 1)
点のラベルは1
、(2, 3)
点のラベルは です-1
。
モデルの定義
次に、SVM モデルを定義します。ここでは線形カーネル関数を使用します。
class LinearSVM(torch.nn.Module):
def __init__(self):
super(LinearSVM, self).__init__()
self.weight = torch.nn.Parameter(torch.rand(2), requires_grad=True)
self.bias = torch.nn.Parameter(torch.rand(1), requires_grad=True)
def forward(self, x):
return torch.matmul(x, self.weight) + self.bias
例: この例では、線形 SVM モデルを定義します。
self.weight
および はself.bias
モデルのパラメータであり、トレーニング中に最適化されます。
オプティマイザーの選択
PyTorch の組み込み SGD (確率的勾配降下法) をオプティマイザーとして使用します。
# 实例化模型和优化器
model = LinearSVM()
optimizer = torch.optim.SGD([model.weight, model.bias], lr=0.01)
トレーニングモデル
次のコード スニペットは、モデルをトレーニングする方法を示しています。
# 设置训练轮次和正则化参数C
epochs = 100
C = 0.1
for epoch in range(epochs):
for i, x in enumerate(X_train):
y = y_train[i]
optimizer.zero_grad()
# 计算间隔损失 hinge loss: max(0, 1 - y*(wx + b))
loss = torch.max(torch.tensor(0), 1 - y * model(x))
# 添加正则化项: C * ||w||^2
loss += C * torch.norm(model.weight)**2
loss.backward()
optimizer.step()
例: この例では、損失関数としてヒンジ損失を使用し、過学習を防ぐために正則化項を追加します
C * ||w||^2
。
評価モデル
最後に、テスト データを使用してモデルのパフォーマンスを評価します。
with torch.no_grad():
for x in X_test:
prediction = model(x)
print(f"Prediction for {
x} is: {
prediction}")
例: 出力「予測」は、テスト データ ポイントに対するモデルの分類予測を表します。正の数値はカテゴリを表し
1
、負の数値はカテゴリを表します-1
。
5. 実用化
サポート ベクター マシン (SVM) は、さまざまな実際のアプリケーション シナリオで広く使用されています。
テキストの分類
テキスト分類タスクでは、SVM を使用してドキュメントまたはメッセージを自動的に分類できます。たとえば、スパム フィルタは SVM を使用してスパム電子メールと正当な電子メールを識別する場合があります。
例: ニュース Web サイトでは、SVM モデルを使用して、ニュース記事を「政治」、「スポーツ」、「エンターテイメント」などのさまざまなカテゴリに自動的に分類できます。
画像の識別
SVM は、手書き数字認識や顔認識などの画像認識タスクにも使用されます。さまざまなカーネル関数を使用することにより、SVM は高次元空間で決定境界を見つけることができます。
例: セキュリティ監視システムでは、SVM を使用してさまざまな顔を認識し、認証を実行できます。
バイオインフォマティクス
バイオインフォマティクスの分野では、SVM は遺伝子配列パターンを特定するために使用され、創薬などの多くの側面で使用されます。
例: 病気の診断では、SVM を使用して遺伝子発現データを分析し、特定の病気のリスクがあるかどうかを特定できます。
業績予想
SVM には、株価動向の予測や信用スコアリングなど、金融分野における一連のアプリケーションもあります。
例: クレジット カードの不正行為の検出では、SVM を使用して消費者の取引記録を分析し、不正行為の可能性のある取引を自動的に特定できます。
クライアントのサブディビジョン
市場分析では、SVM を使用して顧客をセグメント化し、購入履歴、地理的位置、その他の情報を分析することで顧客の将来の行動を予測できます。
例: 電子商取引プラットフォームでは、SVM モデルを使用して、どの顧客が特定の製品を購入する可能性が高いかを予測できます。
6. まとめ
サポート ベクター マシン (SVM) は、幅広いアプリケーション シナリオと優れたパフォーマンスを備えた強力で柔軟な機械学習アルゴリズムです。テキスト分類から画像認識、バイオインフォマティクスから財務予測に至るまで、SVM は強力な一般化能力を実証してきました。この記事では、SVM の基本概念、数学的背景、最適化方法を紹介するだけでなく、特定の Python および PyTorch コードを使用して基本的な SVM モデルを実装します。さらに、複数の実用的なアプリケーション シナリオでの SVM の使用についても調査します。
SVM はさまざまな問題で広く使用されていますが、「万能」ツールではありません。高次元空間や大規模なデータ セットでは、SVM モデルは計算の複雑さとメモリ使用量に関する問題に遭遇する可能性があります。現時点では、適切なカーネル関数の選択、データの前処理、パラメーターの最適化が特に重要です。
ディープラーニングの台頭により、より複雑なモデル (ニューラル ネットワークなど) が特定のタスクでより優れたパフォーマンスを発揮する可能性があることは注目に値します。しかし、SVM はその強力な説明力と強固な理論的基盤により、依然としてその地位を保っています。実際、小規模なデータ セットやモデルの解釈可能性に対する高度な要件がある状況など、一部のアプリケーション シナリオでは、SVM の方が適切な選択肢となる場合があります。
TechLead をフォローして、AI に関するあらゆる次元の知識を共有してください。著者は 10 年以上のインターネット サービス アーキテクチャ、AI 製品開発の経験、およびチーム管理の経験があり、復旦大学の同済大学で修士号を取得し、復丹ロボット知能研究所のメンバーであり、Alibaba Cloud によって認定された上級アーキテクトです。プロジェクト管理のプロフェッショナルであり、数億の収益を誇る AI 製品の研究開発者です。