1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SVMがLightGBMよりうまく分類できたケースを可視化してみた

1
Last updated at Posted at 2026-03-13

導入

先日scikit-learn を使って分類問題を解いた際、
勾配ブースティング系のモデルである LightGBM よりも
Support Vector Machine(以下、SVM)の方がうまく分類できるケースに遭遇しました。

この記事では

どのような状況で SVM > LightGBM になったのか

を可視化してみます。

計算コード含めて詳細は以下のブログで解説しています。

データ生成

かなり恣意的ですが、乱数で2次元データを生成して2次曲線で境界を設定します。
簡単のため2クラス分類を行います。
$x_1$と$x_2$の2変数を$(0,1)$で乱数引いてサンプリングして、以下の条件でラベル付けします。
$$
x_2 > 2x_1^2 - 0.7
$$

generated_dat.png
図示してみるとこんな感じです。

分類モデル

生成したデータのすべてを使って学習を行い、分類境界を図示します。
本記事では分類性能評価目的ではないので、訓練データとテストデータの分割は行いません。

SVM

まずはSVMでカーネルに2次多項式を指定して学習を行います。
多項式カーネルを選択します。

LightGBM

LightGBMの学習を行います。
ハイパーパラメータのチューニングは特にしませんでした。

分類結果

SVMの分類境界

意図的に問題設定したこともありますが、綺麗に分類出来ています。
分類曲線が滑らかに変化します。
Cやcoef0の値を変えながら、分類領域を見ると理解が深まります。
svm_classify.png

LightGBMの分類境界

LightGBMの分類境界を示します。
よく分類出来ていますが境界がジグザグになっていて、境界に近い所で分類しきれないことが分かります。
Decision Tree.png

考察

SVMの多項式カーネルは
今回の問題設定と相性が良かったと考えられます。

一方、LightGBM は内部的には 2値分割を繰り返して境界を作ります。
そのため、分類境界はどうしても 矩形の組み合わせのような形になりやすく、
今回のような滑らかな境界を表現するには不利だったと考えられます。

雑感

この話だとSVMがいいと聞こえるかもしれないですが、そうでもありません。
LightGBMは何も調整せずともそれなりに分類できましたが、SVMだとハイパーパラメータ等、気に掛ける項目が多くて手間がかかる印象を受けました。

今回の内容のPythonの計算コードを含めた詳細は以下のブログにて解説しています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?