Tools
R² (決定係数)
fit がデータをどれくらい説明できるかの指標。SS_res / SS_tot の比で、1.0 が完璧、0 が「平均を返すだけ」
要点: 。fit がデータの分散のうち何割を説明できたかを表す指標。1.0 = 完璧、0 = fit なしと同等 (データの平均を返すだけ)、負値 = fit が平均より悪い。
定義
- : 観測値
- : fit の予測値
- : 観測値の平均
- 分子: 残差平方和 (SS_res, sum of squared residuals)
- 分母: 全変動 (SS_tot, total sum of squares)
数値の目安
| R² 値 | 意味 |
|---|---|
| 1.0 | 完璧 fit (残差 0) |
| 0.95+ | 実験誤差レベルまで fit |
| 0.8-0.95 | 良い fit |
| 0.5-0.8 | 有意だがノイズ多め (低 SNR 系では普通) |
| 0.3-0.5 | データ不足 or モデルが構造的に合わない |
| < 0.3 | fit 失敗 |
| 0.0 | fit なしと同等 (平均を返してるだけ) |
| < 0.0 | fit が平均より悪い (LS 以外で起きうる) |
直感
「データの分散」を、モデルは何割説明できたか。
- を予測値としても SS_tot だけ残差が残る (これが baseline)
- fit ができれば SS_res < SS_tot になる
- 割合 (1 - SS_res/SS_tot) が R²
何が R² を下げるか
1. ノイズ (SNR 低)
観測に測定ノイズが乗ると、モデルが真に正しくても残差にノイズが乗る → R² 下がる。
例: 低摩擦機構で friction fit
- 真の signal (duty 変動幅) が 0.03 duty しかない
- ノイズが 0.005 duty あると、R² は 0.7 前後で頭打ち
- 高摩擦機構で signal 幅 0.3 なら同じノイズでも R² 0.95+ 出せる
2. モデルの構造誤り
データが sign(v) + v² に従うのに sign(v) + v で fit → R² 頭打ち。
症状: サンプル数増やしても R² 上がらない、残差プロットに系統誤差 (curve, drift) が見える。
3. 外れ値
1 個の外れ値で R² が急落することも。ロバスト fit (Huber loss 等) で緩和。
4. サンプル数不足
n < 5 くらいだと R² の分散大 (統計的に信頼できない)。
何が R² を上げすぎるか (要注意)
Over-fit
パラメータ数を増やせば R² は必ず上がる (最悪 R² = 1、n パラメータで n サンプル完全フィット)。モデルの正しさとは別。
対策:
- adjusted R² (): パラメータ数でペナルティ
- cross validation: 別データで R² 見る
単調変換で見せかけの高 R²
を vs に変換 → R² 大きく変わる。何 vs 何の R² かを明示。
FF 校正での用途
mech_ff_calibration の sanity check:
sanity:
r2_min: 0.5 # これ未満は fit 拒否- 0.5 は「有意な fit」の下限
- 低摩擦機構では 0.3 に下げる調整も可
- ただし R² < 0.3 は「そもそも friction が測れない機構」の可能性 → データ変動幅を確認
実装 (C++)
double mean = std::accumulate(y.begin(), y.end(), 0.0) / y.size();
double ss_tot = 0, ss_res = 0;
for (size_t i = 0; i < y.size(); ++i) {
const double y_fit = model_predict(x[i]);
ss_res += (y[i] - y_fit) * (y[i] - y_fit);
ss_tot += (y[i] - mean) * (y[i] - mean);
}
double r2 = (ss_tot > 1e-12) ? (1.0 - ss_res / ss_tot) : 0.0;ゼロ除算注意: SS_tot が 0 (全観測値が同じ) の時は R² 定義できない → 0 or NaN を返す。
R² と他の指標
| 指標 | 意味 | 使い分け |
|---|---|---|
| R² | 分散の説明割合 | fit の全体品質 (0-1 で直感的) |
| RMSE | 残差の RMS | 物理単位で誤差を見たい |
| MAE | 残差の絶対値平均 | 外れ値に頑健 |
| χ² (chi-squared) | 誤差の重み付き二乗和 | 各点の誤差分散が既知の時 |
| BIC/AIC | 尤度 + パラメータ数ペナルティ | モデル選択 |
関連
- システム同定 — LS fit と R²
- 機構摩擦 — friction fit の R² 例
- PID と FF 項の自動チューニング
最終更新: