« Go言語の数値計算ライブラリGonumを使う(2)特異値分解(SVD)、主成分分析(PCA)を計算してみる。 | トップページ | 特別展 ゴールドマン コレクション 河鍋暁斎の世界@神戸市立博物館を観てきた。いろいろなジャンルをものすごい画力で描いていて圧巻。でも笑えるものや風刺もたくさんある。百鬼夜行がよかった。行った日は全作品撮影OKな日でした。 »

2026年9月18日 (金)

TimesFM 3.0(Googleの時系列予測基盤モデル。追加学習なしで予測する。3.0になって多変量、共変量が入れられるようになった)をPythonで使ってSパラメータ(バンドパスフィルタ)の高周波部分を予測する。共変量として角度を入れると2.5のときよりだいぶよくなる。

以前こういうことをやった。

 TimesFM 2.5(Googleの時系列予測基盤モデル。追加学習なしで予測する)をPythonで使ってSパラメータ(伝送線路、バンドパスフィルタ)の高周波部分を予測する。

これはこれでまあまあだが、バージョンが3.0になって多変量と共変量が入れられるようになっていた。ただAPIの文法が全く変わっているのはなんとかしてほしかった…(ずっと簡単になったので文句は言うまい)

https://github.com/google-research/timesfm

早速試してみよう。共変量は過去のみと過去と未来を入れられる。ちょっとずるいような気もするが共変量はSパラの角度にして、角度のみ過去と未来をいれてみよう。コードはこちら。


import torch
import numpy as np
from timesfm3 import TimesFM3Evaluator, ModelConfig
import pandas as pd
import skrf as rf
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Noto Sans CJK JP'


# Initialize TimesFM 3.0
config = ModelConfig(
    checkpoint_path="google/timesfm-3.0-pytorch",
    per_core_batch_size=16,
    device="cuda"
)

forecaster = TimesFM3Evaluator(config)

ntwk = rf.Network("dea165550bt-2322a1-h.s2p")
s = ntwk.s
f = ntwk.f
s11db = 10*np.log10(np.abs(s[:, 0, 0])**2)
s21db = 10*np.log10(np.abs(s[:, 1, 0])**2)
s11phase = np.angle(s[:, 0, 0], deg = True)
s21phase = np.angle(s[:, 1, 0], deg = True)

n = 100
s11dbtrain = s11db[:-n]
s21dbtrain = s21db[:-n]

outputs = list(
    forecaster.predict_batch(
        contexts=[s11dbtrain, s21dbtrain],
        horizon=n,
        past_only_covariates=[s11phase[:-n],s21phase[:-n]],
        past_future_covariates=[s11phase, s21phase],
        return_quantiles=True,
        use_symmetric_averaging=False,
    )
)

fig = plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1)
plt.plot(f, s11db, label="真値")
plt.plot(f[-n:], outputs[0].forecast, label="予測値")
plt.fill_between(f[-n:], outputs[0].quantiles[:, 0], outputs[0].quantiles[:, 8], alpha=0.2, label="10-90 パーセンタイル")
plt.legend()
plt.xlabel("f[GHz]")
plt.ylabel("S11[dB]")
plt.title("S11 forecast")
plt.subplot(1, 2, 2)
plt.plot(f, s21db, label="真値")
plt.plot(f[-n:], outputs[1].forecast, label="予測値")
plt.fill_between(f[-n:], outputs[1].quantiles[:, 0], outputs[1].quantiles[:, 8], alpha=0.2, label="10-90 パーセンタイル")
plt.legend()
plt.xlabel("f[GHz]")
plt.ylabel("S21[dB]")
plt.title("S21 forecast")

予測結果。

Timesfmspara

そうとういい感じで予測できている。まあ角度は未来も入れているのでずるいかも。

なので未来は入れないようにするとこちら。

Timesfm3spara2

まあでも2.5のときより良くなっている。

« Go言語の数値計算ライブラリGonumを使う(2)特異値分解(SVD)、主成分分析(PCA)を計算してみる。 | トップページ | 特別展 ゴールドマン コレクション 河鍋暁斎の世界@神戸市立博物館を観てきた。いろいろなジャンルをものすごい画力で描いていて圧巻。でも笑えるものや風刺もたくさんある。百鬼夜行がよかった。行った日は全作品撮影OKな日でした。 »

「パソコン・インターネット」カテゴリの記事

「学問・資格」カテゴリの記事

「日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« Go言語の数値計算ライブラリGonumを使う(2)特異値分解(SVD)、主成分分析(PCA)を計算してみる。 | トップページ | 特別展 ゴールドマン コレクション 河鍋暁斎の世界@神戸市立博物館を観てきた。いろいろなジャンルをものすごい画力で描いていて圧巻。でも笑えるものや風刺もたくさんある。百鬼夜行がよかった。行った日は全作品撮影OKな日でした。 »

最近の記事

2026年10月
日 月 火 水 木 金 土
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

最近のコメント

無料ブログはココログ
フォト