adaptive_gaussian_ridge プログラム仕様

adaptive_gaussian_ridge_practical.py

概要:

チェビシェフバックグラウンド、重み付きRidge正則化、およびオプションのプルーニングを伴う、 適応型可変幅ガウス基底回帰を実行します。

詳細説明:

このスクリプトは、Excelファイルまたは内蔵デモデータからx-yデータを読み込み、 バックグラウンド項とガウス基底項の和としてデータを回帰します。 バックグラウンド係数とガウス基底係数には異なるRidgeペナルティを設定できます。 幅の広いガウス基底に強いペナルティを与えることもできます。 オプションのプルーニング機能により、寄与の小さいガウス基底を段階的に除去できます。 計算結果はExcelファイルに出力でき、入力データ、フィット結果、バックグラウンド、 ガウス成分、基底パラメータ、プルーニング履歴、設定概要などを保存します。 診断プロット、主たるフィットプロット、個々のガウス成分の分解プロットも表示または保存できます。

使用例:

python adaptive_gaussian_ridge.py --infile demo --mode prune --n-centers 60 --bg-order 3 python adaptive_gaussian_ridge.py --infile data.xlsx --xcol Energy --ycol Intensity --mode prune python adaptive_gaussian_ridge.py --infile data.xlsx --sheet Sheet1 --xcol 0 --ycol 1 --outfile result.xlsx

関連リンク:

adaptive_gaussian_ridge_usage

class regression.adaptive_gaussian_ridge.WeightedRidgeResult(coef_: ndarray, penalty_diag_: ndarray)[ソース]

ベースクラス: object

概要:

重み付きリッジ回帰の結果を格納するデータクラス。

属性:
param coef_value:

推定された回帰係数。

type coef_value:

numpy.ndarray

param penalty_diag_value:

対角化されたペナルティ行列の対角要素。

type penalty_diag_value:

numpy.ndarray

coef_: ndarray
penalty_diag_: ndarray
predict(xmat)[ソース]
概要:

入力デザイン行列 xmat を使用して予測値を計算します。

引数:
param xmat:

デザイン行列。

type xmat:

numpy.ndarray

戻り値:
returns:

予測されたy値。

rtype:

numpy.ndarray

regression.adaptive_gaussian_ridge.adaptive_centers_from_derivatives(x, y, n_centers=45, eps=0.15, w_grad=0.3, w_curv=1.0, smooth_window=21, smooth_order=3)[ソース]
概要:

データの導関数に基づいて適応的にガウス基底の中心を決定します。

詳細説明:

まず、Savitzky-Golayフィルターを使用して入力yデータを平滑化します。 平滑化されたデータから1階導関数 (dy) と2階導関数 (d2y) を計算します。 これらの導関数(絶対値で正規化され、重み付けされたもの)とベースライン定数 eps を組み合わせて 「密度」プロファイルを構築します。この密度プロファイルに基づいてx軸をリサンプリングし、 n_centers個の適応的な中心を決定します。

引数:
param x:

x座標の配列。

type x:

numpy.ndarray

param y:

y座標の配列。

type y:

numpy.ndarray

param n_centers:

生成する中心の数。

type n_centers:

int

param eps:

密度プロファイルのベースライン定数。

type eps:

float

param w_grad:

勾配の重み。密度プロファイルにおける1階導関数の寄与を制御します。

type w_grad:

float

param w_curv:

曲率の重み。密度プロファイルにおける2階導関数の寄与を制御します。

type w_curv:

float

param smooth_window:

Savitzky-Golayフィルターのウィンドウサイズ。 データ点数に応じて自動調整されます。

type smooth_window:

int

param smooth_order:

Savitzky-Golayフィルターの多項式次数。 ウィンドウサイズに応じて自動調整されます。

type smooth_order:

int

戻り値:
returns:

生成された中心の配列 (centers), 計算された密度プロファイル (density), 平滑化されたyデータ (y_smooth), 1階導関数 (dy), 2階導関数 (d2y) のタプル。

rtype:

tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray, numpy.ndarray, numpy.ndarray]

例外:

ValueError: データ点数が少なすぎる場合(5点未満)。

regression.adaptive_gaussian_ridge.background_design_matrix(x, order, xmin, xmax)[ソース]
概要:

チェビシェフ多項式に基づくバックグラウンドのデザイン行列を生成します。

詳細説明:

入力x値を [-1, 1] にスケーリングした後、指定された次数までの チェビシェフ多項式を計算し、デザイン行列として返します。 orderが-1の場合、バックグラウンドなしとして空の行列を返します。

引数:
param x:

x座標の配列。

type x:

numpy.ndarray

param order:

チェビシェフ多項式の次数。-1の場合、空の行列を返します。

type order:

int

param xmin:

x範囲の最小値。

type xmin:

float

param xmax:

x範囲の最大値。

type xmax:

float

戻り値:
returns:

バックグラウンドのデザイン行列。各列が次数に対応するチェビシェフ多項式の値。

rtype:

numpy.ndarray

regression.adaptive_gaussian_ridge.build_output_tables(args, source, x, y, df_input, centers0, sigmas0, density, y_smooth, dy, d2y, centers, sigmas, model, xmin, xmax, prune_results)[ソース]
概要:

計算結果を格納するためのPandas DataFrameの辞書を構築します。

詳細説明:

以下の情報を含むDataFrameを生成し、Excelの各シートに対応する辞書として返します。 - 入力データ (InputData) - データとフィット結果 (DataAndFit) - フィットされたスペクトル (FitSpectrum) - 個々のガウス成分 (GaussianComponents) - バックグラウンド係数 (BackgroundCoef) - 初期ガウス基底の情報 (InitialGaussianBasis) - 選択されたガウス基底の情報 (SelectedGaussianBasis) - プルーニング履歴 (PruneHistory、プルーニングモードの場合のみ) - 計算の概要と設定 (Summary) フィットスペクトルは、args.n_fit の点数でx範囲にわたって計算されます。 デモデータの場合、真の関数と比較する列も追加されます。

引数:
param args:

コマンドライン引数。

type args:

argparse.Namespace

param source:

データソースを示す文字列(ファイル名または「demo」)。

type source:

str

param x:

元の入力xデータ。

type x:

numpy.ndarray

param y:

元の入力yデータ。

type y:

numpy.ndarray

param df_input:

元の入力データとそのソース列情報を含むDataFrame。

type df_input:

pandas.DataFrame

param centers0:

初期ガウス基底の中心の配列。

type centers0:

numpy.ndarray

param sigmas0:

初期ガウス基底の標準偏差の配列。

type sigmas0:

numpy.ndarray

param density:

適応型中心計算に使用された密度プロファイル。

type density:

numpy.ndarray

param y_smooth:

Savitzky-Golayフィルターで平滑化されたyデータ。

type y_smooth:

numpy.ndarray

param dy:

平滑化されたyの1階導関数。

type dy:

numpy.ndarray

param d2y:

平滑化されたyの2階導関数。

type d2y:

numpy.ndarray

param centers:

最終的に選択されたガウス基底の中心の配列。

type centers:

numpy.ndarray

param sigmas:

最終的に選択されたガウス基底の標準偏差の配列。

type sigmas:

numpy.ndarray

param model:

最終的に適合されたモデルオブジェクト。

type model:

WeightedRidgeResult

param xmin:

x範囲の最小値。

type xmin:

float

param xmax:

x範囲の最大値。

type xmax:

float

param prune_results:

プルーニング結果の履歴のリスト(プルーニングモードの場合のみ)。

type prune_results:

Optional[List[Dict]]

戻り値:
returns:

Excelのシート名と対応するDataFrameの辞書。

rtype:

Dict[str, pandas.DataFrame]

regression.adaptive_gaussian_ridge.calc_aic_bic(y_ref, y_pred, df)[ソース]
概要:

赤池情報量基準(AIC)とベイズ情報量基準(BIC)を計算します。

詳細説明:

モデルの適合度と複雑さのバランスを評価するための指標です。 残差平方和(RSS)と実効自由度(df)を使用して計算されます。 RSSが非常に小さい値(ゼロに近い)の場合、数値的な安定性を確保するために下限が適用されます。

引数:
param y_ref:

参照y値の配列。

type y_ref:

numpy.ndarray

param y_pred:

予測y値の配列。

type y_pred:

numpy.ndarray

param df:

モデルの実効自由度。

type df:

float

戻り値:
returns:

AICとBICのタプル。

rtype:

tuple[float, float]

regression.adaptive_gaussian_ridge.calc_metrics(y_ref, y_pred)[ソース]
概要:

参照値と予測値間の平均絶対誤差 (MAE)、二乗平均平方根誤差 (RMSE)、 および残差平方和 (RSS) を計算します。

引数:
param y_ref:

参照y値の配列。

type y_ref:

numpy.ndarray

param y_pred:

予測y値の配列。

type y_pred:

numpy.ndarray

戻り値:
returns:

MAE、RMSE、RSSのタプル。

rtype:

tuple[float, float, float]

regression.adaptive_gaussian_ridge.design_matrix(x, centers, sigmas, bg_order, xmin, xmax)[ソース]
概要:

バックグラウンドとガウス基底を組み合わせた全体のデザイン行列を生成します。

詳細説明:

background_design_matrixとgaussian_design_matrixを呼び出し、 それらの結果を水平方向に結合して単一のデザイン行列を作成します。 最初の列群がバックグラウンド項、その後の列群がガウス基底項に対応します。

引数:
param x:

x座標の配列。

type x:

numpy.ndarray

param centers:

ガウス基底の中心の配列。

type centers:

numpy.ndarray

param sigmas:

ガウス基底の標準偏差の配列。

type sigmas:

numpy.ndarray

param bg_order:

チェビシェフバックグラウンドの次数。

type bg_order:

int

param xmin:

x範囲の最小値。

type xmin:

float

param xmax:

x範囲の最大値。

type xmax:

float

戻り値:
returns:

全体のデザイン行列。

rtype:

numpy.ndarray

regression.adaptive_gaussian_ridge.estimate_local_amplitude(x, y_smooth, centers, window_points=21, p_low=10.0, p_high=90.0, floor_frac=0.0001)[ソース]
概要:

各中心周辺の局所的な振幅を推定します。

詳細説明:

バックグラウンドを明示的に使用せずに、平滑化されたyデータの局所パーセンタイル幅から 振幅を推定します。これにより、スペクトルに大きなオフセットやバックグラウンドがある場合でも、 振幅推定がよりロバストになります。各中心の周りのウィンドウ内で、p_lowとp_high パーセンタイルの差の半分と、中心点の値と局所中央値の差の絶対値の大きい方を採用します。 推定された振幅には、グローバルスケールに基づく小さなフロアが適用されます。

引数:
param x:

x座標の配列。

type x:

numpy.ndarray

param y_smooth:

平滑化されたy座標の配列。

type y_smooth:

numpy.ndarray

param centers:

ガウス基底の中心の配列。

type centers:

numpy.ndarray

param window_points:

局所振幅推定に使用するウィンドウ内のデータ点数。 自動的に奇数に調整され、データ点数を超えないようにします。

type window_points:

int

param p_low:

低い方のパーセンタイル値(例: 10.0)。

type p_low:

float

param p_high:

高い方のパーセンタイル値(例: 90.0)。

type p_high:

float

param floor_frac:

振幅の最小値フロアを決定するための、グローバルスケールに対する割合。

type floor_frac:

float

戻り値:
returns:

各中心における推定振幅の配列。

rtype:

numpy.ndarray

regression.adaptive_gaussian_ridge.estimate_variable_sigma(centers, alpha=1.6, m=2, sigma_min=None, sigma_max=None, method='hybrid_slope', x=None, y_smooth=None, dy=None, alpha_slope=1.0, sigma_amp_window=21, slope_eps=1e-06, return_details=False)[ソース]
概要:

ガウス基底の幅(シグマ)を推定します。

詳細説明:

sigma_min と sigma_max を使って、推定されたシグマを必要に応じてクリップします。 method が distance の場合は、隣接する中心間隔の平均に alpha を掛けた値を使います。 method が nearest の場合は、左右の最近接中心との距離の小さい方に alpha を掛けた値を使います。 method が slope の場合は、局所振幅を一階導関数の絶対値と slope_eps の和で割り、alpha_slope を掛けた値を使います。 method が hybrid_slope の場合は、nearest と slope の推定値の小さい方を使います。 slope または hybrid_slope を使う場合は、x, y_smooth, dy が必要です。

引数:
param centers:

ガウス基底の中心の配列。

type centers:

numpy.ndarray

param alpha:

距離ベースのシグマ推定に使用する乗数。

type alpha:

float

param m:

距離ベースのシグマ推定で考慮する隣接中心の数。

type m:

int

param sigma_min:

シグマの最小許容値。指定しない場合は適用されません。

type sigma_min:

Optional[float]

param sigma_max:

シグマの最大許容値。指定しない場合は適用されません。

type sigma_max:

Optional[float]

param method:

シグマ推定方法。distance, nearest, slope, hybrid_slope を指定できます。

type method:

str

param x:

x座標の配列。slope または hybrid_slope の場合に必要です。

type x:

Optional[numpy.ndarray]

param y_smooth:

平滑化されたy座標の配列。slope または hybrid_slope の場合に必要です。

type y_smooth:

Optional[numpy.ndarray]

param dy:

平滑化されたyの一階導関数。slope または hybrid_slope の場合に必要です。

type dy:

Optional[numpy.ndarray]

param alpha_slope:

傾きベースのシグマ推定に使用する乗数。

type alpha_slope:

float

param sigma_amp_window:

傾きベースのシグマ推定で局所振幅を計算する際のウィンドウ点数。

type sigma_amp_window:

int

param slope_eps:

傾きベースのシグマ推定で分母に追加される小さな値。

type slope_eps:

float

param return_details:

詳細なシグマ候補を返すかどうか。

type return_details:

bool

戻り値:
returns:

推定されたシグマの配列。return_details が True の場合はシグマ配列と詳細辞書のタプル。

rtype:

Union[numpy.ndarray, tuple[numpy.ndarray, dict[str, numpy.ndarray]]]

例外:
raises ValueError:

中心が2つ未満の場合、必要なデータが不足している場合、または不明な推定方法が指定された場合。

regression.adaptive_gaussian_ridge.fit_weighted_ridge(x, y, centers, sigmas, bg_order, xmin, xmax, lambda_bg=1e-08, lambda_gauss=0.001, sigma_penalty_power=2.0)[ソース]
概要:

重み付きリッジ回帰モデルをデータに適合させます。

詳細説明:

入力データ x, y、ガウス基底の centers と sigmas、 およびバックグラウンドの次数 bg_order を使用してデザイン行列を構築します。 make_penalty_diag を用いてペナルティ行列の対角要素を生成し、 以下のリッジ回帰の正規方程式を解きます。 (X^T X + diag(penalty)) @ coef = X^T @ y 線形代数ソルバー np.linalg.solve が失敗した場合は、 np.linalg.lstsq にフォールバックします。

引数:
param x:

x座標の配列。

type x:

numpy.ndarray

param y:

y座標の配列。

type y:

numpy.ndarray

param centers:

ガウス基底の中心の配列。

type centers:

numpy.ndarray

param sigmas:

ガウス基底の標準偏差の配列。

type sigmas:

numpy.ndarray

param bg_order:

チェビシェフバックグラウンドの次数。

type bg_order:

int

param xmin:

x範囲の最小値。

type xmin:

float

param xmax:

x範囲の最大値。

type xmax:

float

param lambda_bg:

バックグラウンド項のリッジペナルティ係数。

type lambda_bg:

float

param lambda_gauss:

ガウス基底項のリッジペナルティ係数。

type lambda_gauss:

float

param sigma_penalty_power:

シグマのペナルティ重み付けのべき乗。

type sigma_penalty_power:

float

戻り値:
returns:

適合されたモデルの結果オブジェクト。

rtype:

WeightedRidgeResult

regression.adaptive_gaussian_ridge.gaussian_design_matrix(x, centers, sigmas)[ソース]
概要:

ガウス基底関数に基づくデザイン行列を生成します。

詳細説明:

指定された中心 centers と標準偏差 sigmas を持つ ガウス関数を各x点に対して計算し、デザイン行列として返します。 各列は個々のガウス基底に対応します。

引数:
param x:

x座標の配列。

type x:

numpy.ndarray

param centers:

各ガウス基底の中心の配列。

type centers:

numpy.ndarray

param sigmas:

各ガウス基底の標準偏差の配列。

type sigmas:

numpy.ndarray

戻り値:
returns:

ガウス基底のデザイン行列。

rtype:

numpy.ndarray

regression.adaptive_gaussian_ridge.generate_demo_data(n=180, noise=0.06, seed=1)[ソース]
概要:

デモ用のx, y, 真の関数データを生成します。

詳細説明:

指定された点数 n とノイズレベル noise に基づいて、 true_function から模擬データを生成します。

引数:
param n:

データ点の数。

type n:

int

param noise:

yデータに加えるノイズの標準偏差。

type noise:

float

param seed:

乱数生成のシード。

type seed:

int

戻り値:
returns:

x, y, 真のy値のタプル。

rtype:

tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]

regression.adaptive_gaussian_ridge.main()[ソース]
概要:

メイン実行関数。コマンドライン引数の解析から結果の出力まで、プログラムの全処理を制御します。

詳細説明:
  1. argparse を使用して、入力/出力ファイル、モデルパラメータ、プルーニング設定、 プロットオプションなどのコマンドライン引数を定義および解析します。

  2. read_input_data を呼び出して、Excelファイルまたはデモデータからx-yデータを読み込みます。

  3. adaptive_centers_from_derivatives と estimate_variable_sigma を使用して、 適応的なガウス基底の中心と標準偏差を初期化します。

  4. args.mode に応じて、モデルの適合 (fit_weighted_ridge) または プルーニング (prune_basis_by_ridge_weight) を実行します。

  5. 最終的な適合結果、モデルパラメータ、および評価指標をコンソールに出力します。

  6. build_output_tables を使用して、結果のDataFrameの辞書を構築します。

  7. write_excel_output を使用して、すべての結果をExcelファイルに書き込みます。

  8. plot_results を使用して、適合結果と診断プロットを表示または保存します。

引数:
param なし:

この関数は引数を直接受け取りません。すべての設定はコマンドライン引数 sys.argv から解析されます。

type なし:

None

戻り値:
returns:

なし

rtype:

None

例外:

Exception: 予期せぬエラーが発生した場合、エラーメッセージとトレースバックを表示し、プログラムを終了します。

regression.adaptive_gaussian_ridge.make_default_outfile(infile, suffix='_adaptive_gaussian_ridge.xlsx')[ソース]
概要:

入力ファイル名からデフォルトの出力Excelファイル名を生成します。

詳細説明:

入力ファイル名が"demo"の場合は"demo_adaptive_gaussian_ridge.xlsx"を返します。 それ以外の場合は、入力ファイル名から拡張子を除去し、指定されたサフィックスを追加します。

引数:
param infile:

入力ファイル名(または「demo」)。

type infile:

str

param suffix:

出力ファイルに追加するサフィックス。デフォルトは "_adaptive_gaussian_ridge.xlsx"。

type suffix:

str

戻り値:
returns:

生成された出力ファイル名。

rtype:

str

regression.adaptive_gaussian_ridge.make_penalty_diag(n_bg, sigmas, lambda_bg=1e-08, lambda_gauss=0.001, sigma_penalty_power=2.0)[ソース]
概要:

重み付きリッジ回帰のペナルティ行列の対角要素を生成します。

詳細説明:

この関数は、バックグラウンド項とガウス基底項に異なるリッジペナルティを適用します。 ガウス基底のペナルティは、その標準偏差(sigmas)の大きさに応じて重み付けされます。 sigma_penalty_powerが大きいほど、幅の広いガウス基底にはより強いペナルティが課されます。

引数:
param n_bg:

バックグラウンド項の数。

type n_bg:

int

param sigmas:

ガウス基底の標準偏差の配列。

type sigmas:

numpy.ndarray

param lambda_bg:

バックグラウンド項のリッジペナルティ係数。

type lambda_bg:

float

param lambda_gauss:

ガウス基底項のリッジペナルティ係数。

type lambda_gauss:

float

param sigma_penalty_power:

シグマのペナルティ重み付けのべき乗。 例えば2.0の場合、ペナルティはシグマの二乗に比例します。

type sigma_penalty_power:

float

戻り値:
returns:

ペナルティ行列の対角要素の配列。

rtype:

numpy.ndarray

regression.adaptive_gaussian_ridge.parse_column_selector(selector, columns)[ソース]
概要:

列セレクタ(名前またはゼロベースのインデックス)から実際の列名を返します。

詳細説明:

セレクタがNoneの場合、Noneを返します。 セレクタが整数(文字列形式も含む)の場合、利用可能な列リストのインデックスとして解釈します。 セレクタが文字列の場合、利用可能な列名と直接比較します。 セレクタがどの形式でも有効な列名に解決できない場合、ValueErrorを発生させます。

引数:
param selector:

列名、列インデックス、またはNone。

type selector:

Union[str, int, None]

param columns:

利用可能な列名のリスト。

type columns:

List[str]

戻り値:
returns:

解決された列名、またはNone。

rtype:

Union[str, None]

例外:

ValueError: 列セレクタが有効な列名に解決できない場合。

regression.adaptive_gaussian_ridge.plot_results(args, x, y, centers0, sigmas0, density, y_smooth, centers, sigmas, model, xmin, xmax, prune_results)[ソース]
概要:

適合結果と診断プロットを生成し、表示または保存します。

詳細説明:

この関数は、診断、メインフィット、分解の3種類のMatplotlibウィンドウを生成します。 診断ウィンドウには、生データ、平滑化データ、基底密度、シグマ候補、選択された中心、 さらにプルーニング時の誤差推移またはフィット時の残差を表示します。 メインフィットウィンドウには、生データ、バックグラウンド、ガウス成分の合計、 全体フィットを表示します。デモデータの場合は、真の関数成分も表示します。 分解ウィンドウには、生データ、全体フィット、ガウス成分の合計、個々のガウス成分を表示します。 プロットは args.show に基づいて表示されるか、args.save_plot に基づいて指定されたファイルに保存されます。

引数:
param args:

コマンドライン引数。

type args:

argparse.Namespace

param x:

元の入力xデータ。

type x:

numpy.ndarray

param y:

元の入力yデータ。

type y:

numpy.ndarray

param centers0:

初期ガウス基底の中心の配列。

type centers0:

numpy.ndarray

param sigmas0:

初期ガウス基底の標準偏差の配列。

type sigmas0:

numpy.ndarray

param density:

適応型中心計算に使用された密度プロファイル。

type density:

numpy.ndarray

param y_smooth:

Savitzky-Golayフィルターで平滑化されたyデータ。

type y_smooth:

numpy.ndarray

param centers:

最終的に選択されたガウス基底の中心の配列。

type centers:

numpy.ndarray

param sigmas:

最終的に選択されたガウス基底の標準偏差の配列。

type sigmas:

numpy.ndarray

param model:

最終的に適合されたモデルオブジェクト。

type model:

WeightedRidgeResult

param xmin:

x範囲の最小値。

type xmin:

float

param xmax:

x範囲の最大値。

type xmax:

float

param prune_results:

プルーニング結果の履歴のリスト。

type prune_results:

Optional[List[Dict]]

戻り値:
returns:

なし。

rtype:

None

regression.adaptive_gaussian_ridge.predict(model, x, centers, sigmas, bg_order, xmin, xmax)[ソース]
概要:

適合済みモデルを使用して、指定されたx値での予測値を計算します。

詳細説明:

新しいx値に対してデザイン行列を再構築し、WeightedRidgeResult オブジェクトの predict メソッドを呼び出して予測されたy値を計算します。

引数:
param model:

適合済みモデルオブジェクト。

type model:

WeightedRidgeResult

param x:

予測を行うx座標の配列。

type x:

numpy.ndarray

param centers:

ガウス基底の中心の配列。

type centers:

numpy.ndarray

param sigmas:

ガウス基底の標準偏差の配列。

type sigmas:

numpy.ndarray

param bg_order:

チェビシェフバックグラウンドの次数。

type bg_order:

int

param xmin:

x範囲の最小値。

type xmin:

float

param xmax:

x範囲の最大値。

type xmax:

float

戻り値:
returns:

予測されたy値の配列。

rtype:

numpy.ndarray

regression.adaptive_gaussian_ridge.predict_background(model, x, bg_order, xmin, xmax)[ソース]
概要:

適合済みモデルからバックグラウンド成分のみを予測します。

詳細説明:

バックグラウンドのデザイン行列のみを生成し、モデルの係数から バックグラウンドに対応する部分を取り出して予測値を計算します。 バックグラウンドの次数が-1の場合(バックグラウンドなし)、 ゼロの配列を返します。

引数:
param model:

適合済みモデルオブジェクト。

type model:

WeightedRidgeResult

param x:

予測を行うx座標の配列。

type x:

numpy.ndarray

param bg_order:

チェビシェフバックグラウンドの次数。

type bg_order:

int

param xmin:

x範囲の最小値。

type xmin:

float

param xmax:

x範囲の最大値。

type xmax:

float

戻り値:
returns:

予測されたバックグラウンド値の配列。

rtype:

numpy.ndarray

regression.adaptive_gaussian_ridge.print_prune_results(results, selected, metric)[ソース]
概要:

プルーニングの履歴と選択された結果をコンソールに出力します。

詳細説明:

各プルーニングステップでのガウス基底の数、MAE、RMSE、実効自由度、AIC、BICを表示します。 また、metric に基づいて選択された最適なモデルには「<== selected」マークを付けます。

引数:
param results:

プルーニングステップごとの結果のリスト。

type results:

List[Dict]

param selected:

選択された最適なモデルの結果。

type selected:

Dict

param metric:

最適モデル選択に使用された評価指標。

type metric:

str

戻り値:
returns:

なし

rtype:

None

regression.adaptive_gaussian_ridge.prune_basis_by_ridge_weight(x, y, centers0, sigmas0, bg_order, xmin, xmax, lambda_bg=1e-08, lambda_gauss=0.001, sigma_penalty_power=2.0, prune_frac=0.1, min_basis=5, metric='mae', allowed_ratio=1.02)[ソース]
概要:

リッジ回帰の係数に基づいて弱いガウス基底を段階的に除去(プルーニング)します。

詳細説明:

この関数は、与えられた初期のガウス基底のセットから、 重み付きリッジ回帰の係数の絶対値が小さい(寄与が弱い)基底を 段階的に除去していくプロセスを実行します。 各プルーニングステップでは、モデルを再適合させ、MAE、RMSE、AIC、BIC、実効自由度などを計算し記録します。 このプロセスは、残りのガウス基底の数が min_basis に達するまで繰り返されます。 最終的に、指定された metric(例: MAE)と allowed_ratio に基づいて最適なモデルが選択されます。 allowed_ratio は、最良のメトリック値からどれだけ乖離しても許容するかを指定します。 (例: 1.02 は最良値の102%以内であれば許容)。

引数:
param x:

x座標の配列。

type x:

numpy.ndarray

param y:

y座標の配列。

type y:

numpy.ndarray

param centers0:

初期ガウス基底の中心の配列。

type centers0:

numpy.ndarray

param sigmas0:

初期ガウス基底の標準偏差の配列。

type sigmas0:

numpy.ndarray

param bg_order:

チェビシェフバックグラウンドの次数。

type bg_order:

int

param xmin:

x範囲の最小値。

type xmin:

float

param xmax:

x範囲の最大値。

type xmax:

float

param lambda_bg:

バックグラウンド項のリッジペナルティ係数。

type lambda_bg:

float

param lambda_gauss:

ガウス基底項のリッジペナルティ係数。

type lambda_gauss:

float

param sigma_penalty_power:

シグマのペナルティ重み付けのべき乗。

type sigma_penalty_power:

float

param prune_frac:

各ステップで除去するガウス基底の割合(0.0から1.0)。

type prune_frac:

float

param min_basis:

維持するガウス基底の最小数。

type min_basis:

int

param metric:

最適モデル選択に使用する評価指標 ("mae" または "rmse")。

type metric:

str

param allowed_ratio:

最良の指標値に対する許容誤差の比率。

type allowed_ratio:

float

戻り値:
returns:

プルーニングステップごとの結果のリスト (results) と、選択された最適なモデルの結果 (selected) のタプル。

rtype:

tuple[list[dict], dict]

regression.adaptive_gaussian_ridge.read_input_data(args)[ソース]
概要:

コマンドライン引数に基づいて、Excelファイルからx, yデータを読み込むか、デモデータを生成します。

詳細説明:

args.infileが"demo"の場合、generate_demo_dataを呼び出してデモデータを生成します。 それ以外の場合、指定されたExcelファイルとシートからデータを読み込みます。 x列とy列は、名前またはインデックスで指定できます。 読み込んだデータは、数値型への変換、欠損値の除去、x値によるソート、 重複するx値の平均化が行われます。

引数:
param args:

コマンドライン引数を格納するオブジェクト。

type args:

argparse.Namespace

戻り値:
returns:

x座標 (numpy.ndarray), y座標 (numpy.ndarray), 処理済み入力データを含むDataFrame (pandas.DataFrame), データソースを示す文字列 (str) のタプル。

rtype:

tuple[numpy.ndarray, numpy.ndarray, pandas.DataFrame, str]

例外:

FileNotFoundError: 入力Excelファイルが見つからない場合。 ValueError: 入力シートが空である、または有効なx-yデータポイントが少なすぎる場合。

regression.adaptive_gaussian_ridge.ridge_effective_df(x, centers, sigmas, bg_order, xmin, xmax, lambda_bg, lambda_gauss, sigma_penalty_power)[ソース]
概要:

リッジ回帰における実効自由度(Effective Degrees of Freedom, EDF)を計算します。

詳細説明:

EDFは、正則化されたモデルの複雑さの尺度であり、以下の式で定義されます。 Tr(X (X^T X + diag(penalty))^-1 X^T) ただし、Xはデザイン行列、diag(penalty)はペナルティ行列の対角要素です。 線形代数ソルバーが失敗した場合はNaNを返します。

引数:
param x:

x座標の配列。

type x:

numpy.ndarray

param centers:

ガウス基底の中心の配列。

type centers:

numpy.ndarray

param sigmas:

ガウス基底の標準偏差の配列。

type sigmas:

numpy.ndarray

param bg_order:

チェビシェフバックグラウンドの次数。

type bg_order:

int

param xmin:

x範囲の最小値。

type xmin:

float

param xmax:

x範囲の最大値。

type xmax:

float

param lambda_bg:

バックグラウンド項のリッジペナルティ係数。

type lambda_bg:

float

param lambda_gauss:

ガウス基底項のリッジペナルティ係数。

type lambda_gauss:

float

param sigma_penalty_power:

シグマのペナルティ重み付けのべき乗。

type sigma_penalty_power:

float

戻り値:
returns:

実効自由度、または計算失敗時はNaN。

rtype:

float

regression.adaptive_gaussian_ridge.safe_import_message(exc, package_hint)[ソース]
概要:

必要なパッケージのインポートまたは使用が失敗した場合に、エラーメッセージを表示し、プログラムを終了します。

詳細説明:

発生した例外の詳細と、必要なパッケージのインストール方法を示すメッセージをユーザーに提供します。 ユーザーがEnterキーを押すとプログラムが終了します。

引数:
param exc:

発生した例外オブジェクト。

type exc:

Exception

param package_hint:

インストールを促すパッケージ名(例: "pandas openpyxl")。

type package_hint:

str

戻り値:
returns:

なし (この関数はプログラムを終了します)。

rtype:

None

regression.adaptive_gaussian_ridge.scale_x_to_chebyshev_domain(x, xmin=None, xmax=None)[ソース]
概要:

x値をチェビシェフ多項式の定義域 [-1, 1] にスケーリングします。

詳細説明:

入力x値を xmin から xmax の範囲で線形にスケーリングし、 チェビシェフ多項式の標準的な定義域である [-1, 1] にマッピングします。 xmin と xmax が指定されない場合、入力x値の最小値と最大値が使用されます。

引数:
param x:

スケーリングするx値の配列。

type x:

numpy.ndarray

param xmin:

x範囲の最小値。指定しない場合はxの最小値を使用。

type xmin:

Optional[float]

param xmax:

x範囲の最大値。指定しない場合はxの最大値を使用。

type xmax:

Optional[float]

戻り値:
returns:

[-1, 1] にスケーリングされたx値の配列。

rtype:

numpy.ndarray

例外:

ValueError: xmaxがxmin以下の場合。

regression.adaptive_gaussian_ridge.true_background(x)[ソース]
概要:

模擬データの真のバックグラウンド関数を計算します。

引数:
param x:

x座標の配列。

type x:

numpy.ndarray

戻り値:
returns:

xに対応するバックグラウンド値。

rtype:

numpy.ndarray

regression.adaptive_gaussian_ridge.true_function(x)[ソース]
概要:

模擬データの真の関数(バックグラウンドとピークの合計)を計算します。

引数:
param x:

x座標の配列。

type x:

numpy.ndarray

戻り値:
returns:

xに対応する真の関数値。

rtype:

numpy.ndarray

regression.adaptive_gaussian_ridge.true_peaks(x)[ソース]
概要:

模擬データの真のピーク(ガウス関数の和)を計算します。

引数:
param x:

x座標の配列。

type x:

numpy.ndarray

戻り値:
returns:

xに対応するピーク値。

rtype:

numpy.ndarray

regression.adaptive_gaussian_ridge.write_excel_output(outfile, tables)[ソース]
概要:

計算結果のDataFrameをExcelファイルに書き出します。

詳細説明:

tables辞書内の各DataFrameを、辞書のキーをシート名としてExcelファイルに書き込みます。 書き込み後、openpyxlを使用して各シートの列幅を自動調整し、 最初の行(ヘッダー)を固定(フリーズ)して可読性を高めます。 必要なパッケージ(pandas, openpyxl)が見つからない場合は、エラーメッセージを表示し、 インストールを促します。

引数:
param outfile:

出力Excelファイルのパス。

type outfile:

str

param tables:

Excelのシート名と対応するDataFrameの辞書。

type tables:

Dict[str, pandas.DataFrame]

戻り値:
returns:

なし

rtype:

None