LSSVM回帰の理論的背景
最小二乗支持ベクトルマシン(LSSVM)は、標準的なSVMの二次計画問題を線形連立方程式の求解に簡略化したモデルです。これにより、計算コストを大幅に削減しながら、高い汎化性能を維持することが可能になります。
1. 目的関数と制約条件
LSSVM回帰における最適化問題は、以下の損失関数を最小化することとして定義されます。
最適化対象:
$\min_{w,b,e} \mathcal{J}(w, e) = \frac{1}{2}w^T w + \frac{\gamma}{2} \sum_{i=1}^{N} e_i^2$
制約条件:
$y_i = w^T \phi(x_i) + b + e_i, \quad i=1, \dots, N$
ここで、$\phi(\cdot)$ は高次元特徴空間への写像、$\gamma$ は正則化パラメータ(誤差へのペナルティ重み)、$e_i$ は誤差項を表します。
2. 代表的なカーネル関数
非線形問題を解くために、以下のカーネル関数が一般的に利用されます。
| カーネル名 | 数式表現 | 主な特徴 |
|---|---|---|
| 線形核 | $K(x_i, x_j) = x_i^T x_j$ | 線形分離可能なデータに適用 |
| RBF核 (ガウス核) | $K(x_i, x_j) = \exp(-\|x_i - x_j\|^2 / \sigma^2)$ | 汎用性が高く、非線形回帰に多用される |
| 多項式核 | $K(x_i, x_j) = (x_i^T x_j + c)^d$ | 高次の特徴相関を抽出 |
MATLABによる実装プロセス
1. データの準備と前処理
回帰分析を行う前に、データのスケーリングを行い、学習用と検証用に分割します。
% データの読み込み
rawData = readmatrix('regression_data.csv');
inputs = rawData(:, 1:end-1);
targets = rawData(:, end);
% データ分割(80% 学習, 20% テスト)
totalSamples = size(inputs, 1);
trainIdx = 1:round(totalSamples * 0.8);
testIdx = round(totalSamples * 0.8) + 1:totalSamples;
xTrain = inputs(trainIdx, :);
yTrain = targets(trainIdx, :);
xTest = inputs(testIdx, :);
yTest = targets(testIdx, :);
% 正規化(0〜1の範囲にスケーリング)
[xNorm, xSettings] = mapminmax(xTrain', 0, 1);
[yNorm, ySettings] = mapminmax(yTrain', 0, 1);
xTestNorm = mapminmax('apply', xTest', xSettings);
2. LSSVMモデルの構築と訓練
ハイパーパラメータ(gamma, sig2)を設定し、モデルを学習させます。
% ハイパーパラメータの設定
gammaValue = 15; % 正則化パラメータ
sigmaSquared = 0.5; % RBFカーネルの幅
% モデルの初期化と学習
% 'f' は関数近似(回帰)を意味する
modelStruct = initlssvm(xNorm', yNorm', 'f', gammaValue, sigmaSquared, 'RBF_kernel');
trainedModel = trainlssvm(modelStruct);
3. 予測と精度評価
訓練済みモデルを使用してテストデータに対する予測を行い、評価指標を算出します。
% テストデータでの予測実行
yPredNorm = simlssvm(trainedModel, xTestNorm');
% 逆正規化
yPred = mapminmax('reverse', yPredNorm, ySettings);
% 指標の算出 (RMSE, R2)
errorVals = yTest' - yPred;
rmseVal = sqrt(mean(errorVals.^2));
rSquared = 1 - sum(errorVals.^2) / sum((yTest' - mean(yTest)).^2);
fprintf('RMSE: %.4f\n', rmseVal);
fprintf('R2 Score: %.4f\n', rSquared);
ハイパーパラメータの最適化戦略
グリッドサーチによるパラメータ探索
最適なモデル精度を得るために、異なるパラメータの組み合わせをループで検証します。
gRange = [1, 10, 50, 100];
sRange = [0.01, 0.1, 1, 10];
minError = inf;
for g = gRange
for s = sRange
m = initlssvm(xNorm', yNorm', 'f', g, s, 'RBF_kernel');
m = trainlssvm(m);
p = simlssvm(m, xTestNorm');
currentRmse = sqrt(mean((yTest' - mapminmax('reverse', p, ySettings)).^2));
if currentRmse < minError
minError = currentRmse;
bestParams = [g, s];
end
end
end
応用事例と手法の比較
実用シナリオ
- 再生可能エネルギー予測: 風速や日射量データに基づく発電出力の短期予測。
- 産業プロセスの監視: センサーデータを利用した機器の劣化予測や異常検知。
- 時系列データの補完: 欠損している観測値の推定。
モデル性能の傾向比較
| 手法 | 学習速度 | 非線形対応 | データ規模 |
|---|---|---|---|
| 標準LSSVM | 高速 | 高い | 中規模 |
| PCA-LSSVM | 非常に高速 | 中程度 | 大規模(高次元) |
| LSTM (深層学習) | 低速 | 非常に高い | 大規模(時系列) |
実務上の注意点と解決策
- 過学習の抑制: gammaパラメータを調整して正則化を強めるか、クロスバリデーション(交差検証)を導入して汎化性能を確認します。
- 計算リソースの管理: サンプル数が数万件を超える場合、カーネル行列のサイズが膨大になるため、Nyström法などの低ランク近似手法を検討してください。
- 多出力回帰: 複数の目的変数を同時に予測する場合は、モデル構造を多出力対応('m' モード)に設定して初期化します。