tklsq プログラム仕様

tklsq.py

汎用線形回帰・誤差評価・モデル選択ユーティリティ。

関連リンク:

tklsq.py 技術ドキュメント

設計方針

  • 基本は線形最小二乗: y = X beta + eps

  • パラメータ誤差は cov(beta) = sigma^2 (X^T W X)^(-1)

  • 推定値誤差は Var[y_mean] = diag(X_new cov(beta) X_new^T)

  • 予測誤差は Var[y_pred] = Var[y_mean] + sigma^2

  • モデル選択は AIC/BIC/AICc と、必要に応じてベイズ evidence を使う

このファイルは tklib / matplotlib / openpyxl に依存しない「計算コア」です。 入出力、グラフ、Excel保存は呼び出し側スクリプトに残す想定です。

class regression.tklsq.tklsq.BayesianLinearResult(mean: ndarray, cov: ndarray, alpha: float, beta: float, sigma_noise: float, log_evidence: float | None = None, n_iter: int = 0, converged: bool = False)[ソース]

ベースクラス: object

ベイズ線形回帰の事後分布の結果を格納するデータクラス。

ベイズ線形回帰によって得られたパラメータの事後平均、共分散、および関連するハイパーパラメータを保持します。

パラメータ:
  • mean -- np.ndarray: 事後分布の平均(推定された回帰係数)。

  • cov -- np.ndarray: 事後分布の共分散行列。

  • alpha -- float: パラメータの事前分布の精度(逆分散)ハイパーパラメータ。

  • beta -- float: ノイズの精度(逆分散)ハイパーパラメータ。

  • sigma_noise -- float: 推定されたノイズの標準偏差 (1/sqrt(beta))。

  • log_evidence -- Optional[float]: モデルの対数エビデンス。デフォルトはNone。

  • n_iter -- int: ハイパーパラメータ推定の繰り返し回数。デフォルトは0。

  • converged -- bool: ハイパーパラメータ推定が収束したかどうか。デフォルトはFalse。

alpha: float
beta: float
converged: bool = False
cov: ndarray
log_evidence: float | None = None
mean: ndarray
n_iter: int = 0
sigma_noise: float
class regression.tklsq.tklsq.LeastSquaresResult(beta: ndarray, beta_std: ndarray | None, cov_beta: ndarray | None, sigma2_resid: float | None, residuals: ndarray, y_fit: ndarray, N: int, p: int, dof: int, rank: int, RSS: float, WRSS: float, singular_values: ndarray, condition_number: float, error_estimation_enabled: bool, warning: str = '', known_sigma: bool = False)[ソース]

ベースクラス: object

線形最小二乗の結果を格納するデータクラス。

線形最小二乗回帰の計算結果と、その統計的な情報、誤差推定の結果を保持します。

パラメータ:
  • beta -- np.ndarray: 推定された回帰係数ベクトル。

  • beta_std -- Optional[np.ndarray]: 回帰係数の標準誤差。誤差推定が無効な場合はNone。

  • cov_beta -- Optional[np.ndarray]: 回帰係数の共分散行列。誤差推定が無効な場合はNone。

  • sigma2_resid -- Optional[float]: 残差分散 (sigma^2)。誤差推定が無効な場合はNone。

  • residuals -- np.ndarray: 残差ベクトル (y - y_fit)。

  • y_fit -- np.ndarray: モデルによる推定値 (X @ beta)。

  • N -- int: データ点数。

  • p -- int: 回帰係数の数(モデルパラメータの数)。

  • dof -- int: 残差自由度 (N - p)。

  • rank -- int: 設計行列のランク。

  • RSS -- float: 残差平方和 (Residual Sum of Squares)。

  • WRSS -- float: 重み付き残差平方和 (Weighted Residual Sum of Squares)。

  • singular_values -- np.ndarray: 設計行列の特異値。

  • condition_number -- float: 設計行列の条件数。

  • error_estimation_enabled -- bool: 誤差推定が有効かどうか。

  • warning -- str: 発生した警告メッセージ。デフォルトは空文字列。

  • known_sigma -- bool: ノイズの分散が既知として扱われたかどうか。デフォルトはFalse。

N: int
RSS: float
WRSS: float
beta: ndarray
beta_std: ndarray | None
condition_number: float
cov_beta: ndarray | None
dof: int
error_estimation_enabled: bool
known_sigma: bool = False
p: int
rank: int
residuals: ndarray
sigma2_resid: float | None
property sigma_resid: float | None

残差の標準偏差 (sigma_resid) を返すプロパティ。

singular_values: ndarray
warning: str = ''
y_fit: ndarray
class regression.tklsq.tklsq.ModelSelectionResult(labels: List[str], scores: ndarray, weights: ndarray, best_index: int, criterion: str, results: List[LeastSquaresResult] | None = None, log_evidences: ndarray | None = None)[ソース]

ベースクラス: object

複数モデルの比較結果を格納するデータクラス。

異なるモデル候補を比較し、選択基準(AIC、BIC、Evidenceなど)に基づいて評価した結果を保持します。

パラメータ:
  • labels -- List[str]: 各モデルのラベル。

  • scores -- np.ndarray: 各モデルのスコア(例: AIC, BIC, log_evidence)。

  • weights -- np.ndarray: 各モデルの相対的な重み(モデル確率)。

  • best_index -- int: 最良モデルのインデックス。

  • criterion -- str: モデル選択に使用された基準の名称。

  • results -- Optional[List[LeastSquaresResult]]: 各モデルの線形最小二乗結果のリスト。デフォルトはNone。

  • log_evidences -- Optional[np.ndarray]: 各モデルの対数エビデンス。デフォルトはNone。

best_index: int
property best_label: str

最良モデルのラベルを返すプロパティ。

criterion: str
labels: List[str]
log_evidences: ndarray | None = None
results: List[LeastSquaresResult] | None = None
scores: ndarray
weights: ndarray
class regression.tklsq.tklsq.PredictionResult(y_mean: ndarray, sigma_param: ndarray | None, sigma_pred: ndarray | None, var_param: ndarray | None, var_pred: ndarray | None)[ソース]

ベースクラス: object

線形モデルの予測結果と誤差バンドを格納するデータクラス。

新しい入力データに対するモデルの推定値と、その予測誤差の範囲を保持します。

パラメータ:
  • y_mean -- np.ndarray: 予測される応答変数の平均値。

  • sigma_param -- Optional[np.ndarray]: パラメータ推定の不確かさに起因する標準誤差。

  • sigma_pred -- Optional[np.ndarray]: 予測の総標準誤差(パラメータ不確かさ+ノイズ)。

  • var_param -- Optional[np.ndarray]: パラメータ推定の不確かさに起因する分散。

  • var_pred -- Optional[np.ndarray]: 予測の総分散(パラメータ不確かさ+ノイズ)。

sigma_param: ndarray | None
sigma_pred: ndarray | None
var_param: ndarray | None
var_pred: ndarray | None
y_mean: ndarray
regression.tklsq.tklsq.add_intercept(X: ndarray) ndarray[ソース]

既存の設計行列の先頭列に定数項(切片)を追加します。

入力の設計行列 X の各行の先頭に1の列を追加し、定数項を含むモデルに対応させます。

パラメータ:

X -- np.ndarray: 既存の設計行列。

戻り値:

np.ndarray: 定数項が追加された新しい設計行列。

regression.tklsq.tklsq.ard_select(X: ndarray, y: Sequence[float] | ndarray, *, threshold: float = 0.001, fit_intercept: bool = False, **kwargs) Dict[str, object][ソース]

sklearn の ARDRegression (Automatic Relevance Determination Regression) を使用して、 疎な基底選択(特徴量選択)を行います。

ARDRegression は、各回帰係数に異なる事前分布(精度パラメータを持つガウス分布)を仮定し、 エビデンス最大化を通じて不要な特徴量に対応する係数をゼロに近づけることで、 特徴量を自動的に選択します。

パラメータ:
  • X -- np.ndarray: 設計行列 (shape: N, p)。

  • y -- ArrayLike: 観測値のベクトル (shape: N,)。

  • threshold -- float: 選択される係数の絶対値の閾値。この値より小さい係数は選択されません。デフォルトは1.0e-3。

  • fit_intercept -- bool: 定数項(切片)を計算に含めるかどうか。デフォルトはFalse。

  • kwargs -- ARDRegression クラスに渡される追加のキーワード引数。

戻り値:

Dict[str, object]: 選択された係数、選択された基底のインデックス、モデルオブジェクト、 およびARDRegressionの他の属性(scores, alpha, lambda)を含む辞書。

例外:

ImportError -- scikit-learn ライブラリがインストールされていない場合。

regression.tklsq.tklsq.basis_index_candidates(x: Sequence[float] | ndarray, models: Sequence[Sequence[int]]) Dict[str, ndarray][ソース]

任意の多項式のべき指数リストに基づいて、モデル候補の設計行列の辞書を作成します。

特定のべき指数の組み合わせで構成される多項式モデルを柔軟に定義し、 モデル選択関数で使用できる形式の辞書として返します。

パラメータ:
  • x -- ArrayLike: 説明変数データ。

  • models -- Sequence[Sequence[int]]: 各要素が1つのモデルに対応するべき指数(例: [[0, 1], [0, 1, 2]])のシーケンス。

戻り値:

Dict[str, np.ndarray]: キーがモデルラベル(べき指数リストの文字列表現)、値が設計行列の辞書。

regression.tklsq.tklsq.bayesian_log_evidence(X: ndarray, y: Sequence[float] | ndarray, *, alpha: float = 1.0, beta: float = 1.0, mu0: Sequence[float] | ndarray | None = None, prior_cov: ndarray | None = None) float[ソース]

線形ガウスモデルの対数エビデンス(モデル周辺尤度)を計算します。

モデル周辺尤度 p(y | X, alpha, beta) は、モデルがデータをどれだけよく説明するかを示す指標であり、 異なるモデルの比較に使用できます。

prior: beta_vec ~ N(mu0, prior_cov / alpha) noise: y|beta_vec ~ N(X beta_vec, I / beta)

N が大きい場合は O(N^3) の計算コストがかかるため、多数の候補モデルや大規模データセットに 適用する場合は、高速化された実装を検討する必要があります。

パラメータ:
  • X -- np.ndarray: 設計行列 (shape: N, p)。

  • y -- ArrayLike: 観測値のベクトル (shape: N,)。

  • alpha -- float: パラメータの事前分布の精度ハイパーパラメータ。デフォルトは1.0。

  • beta -- float: ノイズの精度ハイパーパラメータ。デフォルトは1.0。

  • mu0 -- Optional[ArrayLike]: パラメータの事前平均ベクトル。Noneの場合、ゼロベクトルが使用されます。デフォルトはNone。

  • prior_cov -- Optional[np.ndarray]: パラメータの事前共分散行列。Noneの場合、単位行列が使用されます。デフォルトはNone。

戻り値:

float: 計算された対数エビデンス。行列式が非正の場合、-inf を返します。

regression.tklsq.tklsq.bayesian_posterior(X: ndarray, y: Sequence[float] | ndarray, *, alpha: float = 1.0, beta: float = 1.0, mu0: Sequence[float] | ndarray | None = None, prior_cov: ndarray | None = None) BayesianLinearResult[ソース]

線形ガウスモデルのベイズ的な事後分布の平均と共分散を計算します。

パラメータ beta_vec にガウス事前分布 N(mu0, prior_cov / alpha) を、 ノイズにガウス分布 N(X beta_vec, I / beta) を仮定します。 事後分布 p(beta_vec | y, X, alpha, beta) の平均 m と共分散 S を算出します。

パラメータ:
  • X -- np.ndarray: 設計行列 (shape: N, p)。

  • y -- ArrayLike: 観測値のベクトル (shape: N,)。

  • alpha -- float: パラメータの事前分布の精度(逆分散)ハイパーパラメータ。デフォルトは1.0。

  • beta -- float: ノイズの精度(逆分散)ハイパーパラメータ。デフォルトは1.0。

  • mu0 -- Optional[ArrayLike]: パラメータの事前平均ベクトル。Noneの場合、ゼロベクトルが使用されます。デフォルトはNone。

  • prior_cov -- Optional[np.ndarray]: パラメータの事前共分散行列。prior_cov / alpha が実際の共分散となります。 Noneの場合、単位行列が使用されます。デフォルトはNone。

戻り値:

BayesianLinearResult: ベイズ線形回帰の事後平均、共分散、およびハイパーパラメータを含む結果。

例外:

ValueError -- mu0 のサイズが p と一致しない場合、または prior_cov の形状が (p, p) と一致しない場合。

regression.tklsq.tklsq.delta_method_variance(jacobian: ndarray, cov_beta: ndarray) ndarray[ソース]

デルタ法を用いて、変換された量の分散 Var[g(beta)] の対角要素を計算します。

デルタ法は、非線形関数 g の伝播誤差を近似するために使用されます。 Var[g(beta)] = J @ cov_beta @ J.T の対角要素を計算します。 ここで Jgbeta に関するヤコビ行列です。 活性化エネルギーや移動度などの派生量の、対数変換後の誤差伝播に有用です。

パラメータ:
  • jacobian -- np.ndarray: 関数 gbeta に関するヤコビ行列。 shape (N_deriv, p) または (p,) を想定します。 (p,) の場合は (1, p) に整形されます。

  • cov_beta -- np.ndarray: パラメータ beta の共分散行列 (shape: p, p)。

戻り値:

np.ndarray: 各派生量に対する分散のベクトル (shape: N_deriv,)。

regression.tklsq.tklsq.design_matrix_from_functions(x: Sequence[float] | ndarray, basis_functions: Sequence) ndarray[ソース]

任意の基底関数リストから設計行列を作成します。

与えられた1次元の説明変数 x と基底関数のシーケンスに基づいて、 設計行列 X を構築します。各基底関数は x_array または x_scalar を引数に取り、 対応する基底ベクトルの要素を返すと想定されます。

パラメータ:
  • x -- ArrayLike: 1次元の説明変数データ。

  • basis_functions -- Sequence: 基底関数のリスト。各関数は f(x_array) を返すか、 np.vectorize 可能な f(x_scalar) であると想定されます。

戻り値:

np.ndarray: 基底関数によって構築された設計行列 X (shape: N, p)。

regression.tklsq.tklsq.empirical_bayes_linear(X: ndarray, y: Sequence[float] | ndarray, *, alpha0: float = 1.0, beta0: float | None = None, sigma_noise0: float = 1.0, mu0: Sequence[float] | ndarray | None = None, max_iter: int = 100, tol: float = 0.0001, eps: float = 1e-300) BayesianLinearResult[ソース]

MacKay型の evidence maximization を用いて、ベイズ線形回帰のハイパーパラメータ (alpha, beta) を推定します。

この関数は現在、パラメータの事前分布が等方性 beta_vec ~ N(mu0, I/alpha) である場合に 対応しています。期待値最大化アルゴリズムにより alphabeta を繰り返し更新し、 最尤推定されたハイパーパラメータを求めます。

パラメータ:
  • X -- np.ndarray: 設計行列 (shape: N, p)。

  • y -- ArrayLike: 観測値のベクトル (shape: N,)。

  • alpha0 -- float: alpha の初期値。デフォルトは1.0。

  • beta0 -- Optional[float]: beta の初期値。Noneの場合、1.0 / (sigma_noise0 ** 2) が使用されます。デフォルトはNone。

  • sigma_noise0 -- float: beta の初期値計算に使用されるノイズの初期標準偏差。beta0 が指定された場合は無視されます。デフォルトは1.0。

  • mu0 -- Optional[ArrayLike]: パラメータの事前平均ベクトル。Noneの場合、ゼロベクトルが使用されます。デフォルトはNone。

  • max_iter -- int: ハイパーパラメータ更新の最大繰り返し回数。デフォルトは100。

  • tol -- float: 更新の相対変化がこの閾値より小さくなった場合に収束と見なす許容誤差。デフォルトは1.0e-4。

  • eps -- float: 分母がゼロになるのを防ぐための微小な正の数。デフォルトは1.0e-300。

戻り値:

BayesianLinearResult: 推定されたハイパーパラメータと、それらを用いて計算された事後分布の結果。

例外:

ValueError -- mu0 のサイズが p と一致しない場合。

regression.tklsq.tklsq.gaussian_log_likelihood_from_rss(RSS: float, N: int, sigma2: float | None = None) float[ソース]

ガウス分布の残差を仮定した対数尤度を計算します。

尤度関数は L(sigma^2 | y, X) = (2 * pi * sigma^2)^(-N/2) * exp(-RSS / (2 * sigma^2)) に基づいています。

パラメータ:
  • RSS -- float: 残差平方和 (Residual Sum of Squares)。

  • N -- int: データ点数。

  • sigma2 -- Optional[float]: 既知のノイズ分散 sigma^2。 Noneの場合、最尤推定値 sigma^2 = RSS / N を使用します。デフォルトはNone。

戻り値:

float: 計算された対数尤度。

regression.tklsq.tklsq.information_criteria(result: LeastSquaresResult, *, k: int | None = None) Dict[str, float][ソース]

与えられた線形最小二乗の結果から、AIC、AICc、BIC を計算します。

モデルの複雑さとデータへの適合度のバランスを評価するための情報量基準を導出します。

パラメータ:
  • result -- LeastSquaresResult: linear_lsq 関数によって得られた線形最小二乗の結果。

  • k -- Optional[int]: モデルのパラメータ数。Noneの場合、result.p が使用されます。デフォルトはNone。

戻り値:

Dict[str, float]: 計算された対数尤度 (logL) と情報量基準 (AIC, AICc, BIC) を含む辞書。

regression.tklsq.tklsq.linear_lsq(X: ndarray, y: Sequence[float] | ndarray, *, weights: Sequence[float] | ndarray | None = None, known_sigma: bool = False, rcond: float | None = None, cond_warning: float = 1000000000000.0) LeastSquaresResult[ソース]

線形最小二乗回帰を実行し、回帰係数と統計的な誤差情報を計算します。

モデル y = X @ beta + eps に基づいて回帰係数 beta を推定します。 設計行列がフルランクであり、残差自由度が正の場合、係数の共分散行列、 標準誤差、および残差分散も計算されます。重み付き最小二乗もサポートします。

パラメータ:
  • X -- np.ndarray: 設計行列 (shape: N, p)。

  • y -- ArrayLike: 観測値のベクトル (shape: N,)。

  • weights -- Optional[ArrayLike]: 各データ点に適用する重みベクトル。通常は 1 / sigma_y^2 を指定します。 Noneの場合、等重み(重み1)と見なされます。デフォルトはNone。

  • known_sigma -- bool: Trueの場合、weights が絶対的な 1/sigma_y^2 であるとみなし、 cov(beta) = (X^T W X)^(-1) を使用します。 Falseの場合、残差から sigma^2 を推定し、それを (X^T W X)^(-1) に乗じます。 デフォルトはFalse。

  • rcond -- Optional[float]: np.linalg.lstsq における特異値のカットオフ値。デフォルトはNone。

  • cond_warning -- float: 設計行列の条件数がこの値を超えた場合に、結果の`warning`フィールドに 警告メッセージを追記します。デフォルトは1.0e12。

戻り値:

LeastSquaresResult: 線形最小二乗回帰の結果を格納するデータクラス。

例外:

ValueError -- X が2次元配列でない場合、または X の行数と y の要素数が一致しない場合、 あるいは weights のサイズと y の要素数が一致しない場合、または weights が負の値を含む場合。

regression.tklsq.tklsq.measurement_std(y: Sequence[float] | ndarray, ddof: int = 1) float[ソース]

観測値の配列全体の標準偏差を計算し、測定ばらつきの目安として返します。

numpy.std を使用して標準偏差を計算します。ddof (Delta Degrees of Freedom) は、 計算で使う自由度の調整値であり、標本標準偏差を計算する場合は通常1とします。

パラメータ:
  • y -- ArrayLike: 観測値のベクトル。

  • ddof -- int: 自由度のデルタ。標準偏差の計算でN-ddofで除算します。デフォルトは1。

戻り値:

float: 観測値の標準偏差。y.size <= ddof の場合は0.0を返します。

regression.tklsq.tklsq.normalized_weights_from_scores(scores: Sequence[float] | ndarray, *, lower_is_better: bool = True) ndarray[ソース]

与えられたモデルスコア(例: AIC, BIC, -log evidence)から、正規化された相対重み(モデル確率)を計算します。

Akaike weight や Bayesian model probability の計算に使用される、モデル間の相対的な強さを示す重みです。 スコアの差分を指数関数に適用し、合計が1になるように正規化します。

パラメータ:
  • scores -- ArrayLike: 各モデルのスコアの配列。

  • lower_is_better -- bool: スコアが低いほど良いモデル(例: AIC, BIC)である場合はTrue。 スコアが高いほど良いモデル(例: log evidence)である場合はFalse。デフォルトはTrue。

戻り値:

np.ndarray: 各モデルの正規化された重みの配列。合計は1になります。

regression.tklsq.tklsq.parameter_prediction_variance(X_new: ndarray, cov_beta: ndarray) ndarray[ソース]

新しい設計行列 X_new におけるパラメータ推定の不確かさに起因する分散を計算します。

Var[y_mean] = diag(X_new @ cov_beta @ X_new.T) の計算を行います。 これは、モデルの平均応答の分散を示します。

パラメータ:
  • X_new -- np.ndarray: 予測を行いたい新しいデータ点に対応する設計行列 (shape: N_new, p)。

  • cov_beta -- np.ndarray: 推定された回帰係数の共分散行列 (shape: p, p)。

戻り値:

np.ndarray: 各予測点におけるパラメータ推定起因の分散のベクトル (shape: N_new,)。

regression.tklsq.tklsq.polynomial_candidates(x: Sequence[float] | ndarray, max_order: int, *, min_order: int = 0) Dict[str, ndarray][ソース]

指定された次数範囲で、多項式基底に基づくモデル候補の辞書を作成します。

min_order から max_order までの各次数に対応する設計行列を生成し、 モデル選択関数で使用できる形式の辞書として返します。

パラメータ:
  • x -- ArrayLike: 説明変数データ。

  • max_order -- int: 生成する多項式基底の最大次数。

  • min_order -- int: 生成する多項式基底の最小次数。デフォルトは0。

戻り値:

Dict[str, np.ndarray]: キーがモデルラベル(例: "poly0", "poly1")、値が設計行列の辞書。

regression.tklsq.tklsq.polynomial_design_matrix(x: Sequence[float] | ndarray, order: int | None = None, basis_indices: Sequence[int] | None = None) ndarray[ソース]

多項式基底に基づく設計行列を作成します。

与えられた1次元の説明変数 x に対して、指定された次数または基底インデックスの 多項式項を持つ設計行列 X を生成します。

パラメータ:
  • x -- ArrayLike: 1次元の説明変数データ。

  • order -- Optional[int]: 0から order までのすべてのべき指数を持つ多項式基底を使用する場合の最大次数。 basis_indices が指定された場合は無視されます。デフォルトはNone。

  • basis_indices -- Optional[Sequence[int]]: 使用する多項式のべき指数をリストで指定します。 例: [0, 1, 3] は定数項、1次項、3次項を意味します。 デフォルトはNone。

戻り値:

np.ndarray: 多項式基底によって構築された設計行列 X (shape: N, p)。

例外:

ValueError -- orderbasis_indices の両方がNoneの場合。

regression.tklsq.tklsq.polynomial_lsq(x: Sequence[float] | ndarray, y: Sequence[float] | ndarray, order: int | None = None, *, basis_indices: Sequence[int] | None = None, weights: Sequence[float] | ndarray | None = None, known_sigma: bool = False, rcond: float | None = None) LeastSquaresResult[ソース]

多項式線形回帰を実行するための便利な関数です。

polynomial_design_matrix を使用して多項式基底の設計行列を作成し、 その後 linear_lsq を呼び出して線形最小二乗回帰を実行します。

パラメータ:
  • x -- ArrayLike: 1次元の説明変数データ。

  • y -- ArrayLike: 観測値のベクトル (shape: N,)。

  • order -- Optional[int]: 0から order までのすべてのべき指数を持つ多項式基底を使用する場合の最大次数。 basis_indices が指定された場合は無視されます。デフォルトはNone。

  • basis_indices -- Optional[Sequence[int]]: 使用する多項式のべき指数をリストで指定します。 例: [0, 1, 3]。デフォルトはNone。

  • weights -- Optional[ArrayLike]: 各データ点に適用する重みベクトル。デフォルトはNone。

  • known_sigma -- bool: ノイズの分散が既知として扱われるかどうか。デフォルトはFalse。

  • rcond -- Optional[float]: np.linalg.lstsq における特異値のカットオフ値。デフォルトはNone。

戻り値:

LeastSquaresResult: 多項式線形最小二乗回帰の結果。

regression.tklsq.tklsq.posterior_model_probabilities(log_evidences: Sequence[float] | ndarray, log_priors: Sequence[float] | ndarray | None = None) ndarray[ソース]

対数エビデンスと対数事前確率から、各モデルの事後モデル確率を計算します。

ベイズモデル選択において、各モデルがデータによってどれだけ支持されているかを示す確率を計算します。 P(M_i | D) = P(D | M_i) * P(M_i) / sum_j(P(D | M_j) * P(M_j)) の対数形式に基づきます。

パラメータ:
  • log_evidences -- ArrayLike: 各モデルの対数エビデンスの配列。

  • log_priors -- Optional[ArrayLike]: 各モデルの対数事前確率の配列。 Noneの場合、すべてのモデルが等しい事前確率を持つと仮定されます。デフォルトはNone。

戻り値:

np.ndarray: 各モデルの事後モデル確率の配列。合計は1になります。

例外:

ValueError -- log_priors が指定されており、その形状が log_evidences の形状と一致しない場合。

regression.tklsq.tklsq.predict_bayesian(X_new: ndarray, result: BayesianLinearResult, *, include_noise: bool = True) PredictionResult[ソース]

ベイズ線形回帰の結果から、新しいデータ点に対する予測平均と分散を計算します。

BayesianLinearResult オブジェクトに含まれる事後平均と共分散、ノイズ精度を用いて、 新しい設計行列 X_new における予測値を計算します。

パラメータ:
  • X_new -- np.ndarray: 予測を行いたい新しいデータ点に対応する設計行列 (shape: N_new, p)。

  • result -- BayesianLinearResult: bayesian_posterior または empirical_bayes_linear から得られたベイズ線形回帰の結果。

  • include_noise -- bool: 予測分散に観測ノイズの分散を含めるかどうか。Trueの場合、1/result.beta が加算されます。 デフォルトはTrue。

戻り値:

PredictionResult: 予測平均値、パラメータ誤差、予測誤差を格納するデータクラス。

regression.tklsq.tklsq.predict_linear(X_new: ndarray, result: LeastSquaresResult, *, sigma2_noise: float | None = None, include_noise: bool = True) PredictionResult[ソース]

線形回帰の結果から、新しいデータ点に対する予測値と誤差バンドを計算します。

指定された新しい設計行列 X_new に基づいて、線形モデルの平均応答と その不確かさ(パラメータ推定に起因する誤差と、観測ノイズに起因する誤差)を計算します。

パラメータ:
  • X_new -- np.ndarray: 予測を行いたい新しいデータ点に対応する設計行列 (shape: N_new, p)。

  • result -- LeastSquaresResult: linear_lsq 関数によって得られた線形最小二乗の結果。

  • sigma2_noise -- Optional[float]: 予測に含めるノイズの分散。 Noneの場合、result.sigma2_resid が使用されます。デフォルトはNone。

  • include_noise -- bool: 予測誤差に観測ノイズの分散を含めるかどうか。Trueの場合、sigma2_noise が加算されます。 デフォルトはTrue。

戻り値:

PredictionResult: 予測平均値、パラメータ誤差、予測誤差を格納するデータクラス。

regression.tklsq.tklsq.predict_polynomial(x_new: Sequence[float] | ndarray, result: LeastSquaresResult, order: int | None = None, *, basis_indices: Sequence[int] | None = None, sigma2_noise: float | None = None, include_noise: bool = True) PredictionResult[ソース]

多項式回帰の結果から、新しいデータ点に対する予測値と誤差バンドを計算します。

polynomial_design_matrix を使用して多項式基底の設計行列を作成し、 その後 predict_linear を呼び出して予測値を計算します。

パラメータ:
  • x_new -- ArrayLike: 予測を行いたい新しい説明変数データ点。

  • result -- LeastSquaresResult: polynomial_lsq 関数によって得られた多項式線形最小二乗の結果。

  • order -- Optional[int]: polynomial_design_matrix に渡す多項式の最大次数。 basis_indices がNoneで、かつ order がNoneの場合、result.p - 1 が使用されます。 デフォルトはNone。

  • basis_indices -- Optional[Sequence[int]]: polynomial_design_matrix に渡す多項式のべき指数リスト。デフォルトはNone。

  • sigma2_noise -- Optional[float]: 予測に含めるノイズの分散。デフォルトはNone。

  • include_noise -- bool: 予測誤差に観測ノイズの分散を含めるかどうか。デフォルトはTrue。

戻り値:

PredictionResult: 予測平均値、パラメータ誤差、予測誤差を格納するデータクラス。

regression.tklsq.tklsq.regression_scores(y: Sequence[float] | ndarray, y_fit: Sequence[float] | ndarray, p: int = 0) Dict[str, float][ソース]

基本的な回帰分析のスコア(指標)を計算して返します。

残差平方和 (RSS)、平均二乗誤差 (RMSE)、決定係数 (R^2)、 自由度調整済み決定係数 (Adjusted R^2) などを計算します。

パラメータ:
  • y -- ArrayLike: 実際の観測値のベクトル。

  • y_fit -- ArrayLike: モデルによる予測値または適合値のベクトル。

  • p -- int: モデルのパラメータ数(説明変数の数 + 定数項の有無)。Adjusted R^2 の計算に使用されます。デフォルトは0。

戻り値:

Dict[str, float]: 計算された回帰スコアを含む辞書。キーは "N", "p", "RSS", "RMSE", "R2", "adj_R2"。

regression.tklsq.tklsq.select_models_by_evidence(candidates: Sequence[ndarray] | Mapping[str, ndarray], y: Sequence[float] | ndarray, *, labels: Sequence[str] | None = None, alpha: float = 1.0, beta: float = 1.0, log_priors: Sequence[float] | ndarray | None = None) ModelSelectionResult[ソース]

複数の候補モデルをベイズ対数エビデンスに基づいて比較し、最良モデルを選択します。

各モデル候補に対して bayesian_log_evidence を実行し、対数エビデンスを計算します。 その後、オプションで事前モデル確率を考慮し、事後モデル確率を計算して最良のモデルを特定します。

パラメータ:
  • candidates -- CandidateType: モデル候補。設計行列のシーケンス、またはラベルをキーとする設計行列のマップ。

  • y -- ArrayLike: 観測値のベクトル (shape: N,)。

  • labels -- Optional[Sequence[str]]: candidates がシーケンスの場合に使用するモデルラベルのシーケンス。デフォルトはNone。

  • alpha -- float: bayesian_log_evidence に渡すパラメータの事前分布の精度ハイパーパラメータ。デフォルトは1.0。

  • beta -- float: bayesian_log_evidence に渡すノイズの精度ハイパーパラメータ。デフォルトは1.0。

  • log_priors -- Optional[ArrayLike]: posterior_model_probabilities に渡す各モデルの対数事前確率。デフォルトはNone。

戻り値:

ModelSelectionResult: モデル選択の結果、各モデルの対数エビデンス、事後モデル確率、最良モデルのインデックスなど。

regression.tklsq.tklsq.select_models_by_ic(candidates: Sequence[ndarray] | Mapping[str, ndarray], y: Sequence[float] | ndarray, *, labels: Sequence[str] | None = None, criterion: str = 'BIC', weights: Sequence[float] | ndarray | None = None, rcond: float | None = None) ModelSelectionResult[ソース]

複数の候補モデルをAIC、AICc、またはBICに基づいて比較し、最良モデルを選択します。

各モデル候補に対して線形最小二乗回帰を実行し、選択された情報量基準を計算します。 その後、normalized_weights_from_scores を使用してモデル重み(Akaike weightsなど)を計算し、 最良のモデルを特定します。

パラメータ:
  • candidates -- CandidateType: モデル候補。設計行列のシーケンス、またはラベルをキーとする設計行列のマップ。

  • y -- ArrayLike: 観測値のベクトル (shape: N,)。

  • labels -- Optional[Sequence[str]]: candidates がシーケンスの場合に使用するモデルラベルのシーケンス。デフォルトはNone。

  • criterion -- str: モデル選択に使用する情報量基準 ("AIC", "AICc", "BIC")。デフォルトは"BIC"。

  • weights -- Optional[ArrayLike]: linear_lsq に渡す重みベクトル。デフォルトはNone。

  • rcond -- Optional[float]: linear_lsq に渡す np.linalg.lstsqrcond。デフォルトはNone。

戻り値:

ModelSelectionResult: モデル選択の結果、各モデルのスコア、重み、最良モデルのインデックスなど。

例外:

ValueError -- criterion が "AIC", "AICc", "BIC" のいずれでもない場合。