技術資料

技術資料

ターミナルアトラクタを組み込んだ複製・競合メカニズムによる効率的な機械学習.

目次 

目的 

構築データ空間からランダムにデータ点が与えられたとき,そのデータ点群から元の信号を推定する.

推定方法として,複製・競合動径基底関数ネットワーク(RC-RBFN)を使用する.

しかし,RC-RBFNには複製における計算量の課題がある.そこで計算量を考慮した複製方法を提案して実装を行う.

また,従来の機械学習手法にRC-RBFNを組み込むことを提案する.

使うモジュールのインストール 

使用するモジュール 

モジュールversion用途
pandasデータ収集やデータフレームへの格納などに用いる
numpy数値計算を効率的に行うための拡張モジュール
numbaサブセットのソースコードを高速に実行する機械語に変換するJITコンパイラ
matplotlibグラフ描写の為のライブラリ
scipy数値解析ライブラリ

モジュールのインストールはコマンドプロンプトでpip install モジュール名

バージョンまで指定する場合はコマンドプロンプトでpip install モジュール名==指定するバージョン でインストールする

Pythonのバージョンは3.10.14(指定しなくてもいいかもしれない)

↓動作環境(また置き換える)

動作環境(また貼りかえる)

プログラムの動かし方 

使用するテキストエディタ 

テキストエディタはVisualStudioCodeを使用する.

ダウンロードはこのページ( https://code.visualstudio.com/ )から行う.

VSCの設定は各自好きな拡張機能入れてもらえれば

実行前準備 

カーネル

↑右上の「カーネルの選択」→「Python環境」で構築した環境を選べばOK

[RC-RBFNの学習則] 

VAR-LiNGAMの分析ではPythonのモジュール「LiNGAM」のVAR-LiNGAMを用いる. これはhttps://lingam.readthedocs.io/en/latest/tutorial/var.html を参考にすればよい

path = "用いるデータのパス"
df=pd.read_csv(path,parse_dates=True,index_col="Day",encoding="cp932")
scaler = MinMaxScaler()
normalized_df = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
model = lingam.VARLiNGAM(lags=2, prune=True)
model.fit(normalized_df)

上のコードではデータの読み取り,正規化を行い,それについてVAR-LiNGAMを実行している.

labels = [f'{col}(t)' for i, col in enumerate(normalized_df.columns)]+[f'{col}(t-1)' for i,col in enumerate(df.columns)]
make_dot(np.hstack(model.adjacency_matrices_),
        lower_limit=0.05,
        ignore_shape=True,
        labels=labels
        )

上のコードで2次元グラフを作成している.このコードは結果を出すうえで特に必要ないため,実行しなくても良いが必要になった場合にはgraphvizのインストールが必要になる. graphvizのインストールについては以下のサイトを参考にした

https://www.kkaneko.jp/tools/win/graphviz.html

model = lingam.VARLiNGAM()
result = model.bootstrap(normalized_df,n_sampling=100)

これでLiNGAMのVAR-LiNGAMをモデルとして設定し,ブートストラップ法による分析を行っている.n_samplingの数でサンプリング回数を設定し,今回は100回になっているが,用いるデータのサンプル数を考慮し設定する必要がある. ブートストラップ法では一般的に用いるデータのサンプル数よりも大きいものを設定することが望ましい.

p_values = model.get_error_independence_p_values()

これで誤差変数間の独立性を分析する.

cdc = result.get_causal_direction_counts(n_directions=8, min_causal_effect=0.3,
split_by_causal_effect_sign=True)

このコードで因果関係の方向性を取得する.n_directionは上位いくつの因果方向を限定するかを設定するものであり,min_causal_effectでは係数が何以上の因果方向に限定するかを指定できる.

print_causal_directions(cdc, 100, labels=labels)

でその結果を描画できる.

dagc = result.get_directed_acyclic_graph_counts(n_dags=3, 
min_causal_effect=0.2, split_by_causal_effect_sign=True)

これではDAGのランキングを取得できる.また,

causal_effects = result.get_total_causal_effects(min_causal_effect=0.01)
df = pd.DataFrame(causal_effects)
df['from'] = df['from'].apply(lambda x : labels[x])
df['to'] = df['to'].apply(lambda x : labels[x])
df

これで合計因果関係を取得することができ,この結果を用いて3Dグラフの作成を行うため,pandasのto_csvを用いることでcsvファイルに保存しておく.

#ref(): File not found: "ingakekka.PNG" at page "小澤さん卒論_backup"

得られた因果性は上のような形式で保存される. fromには影響を与えている要素,toには影響を与えられている要素,valueには因果性の大きさが格納されている. 一行ずつ因果の向きと大きさが格納されている

STEP1 ニューラルネットワークのパラメータ更新 

1.シナプス結合荷重wの更新 競争を考慮したシナプス可塑性方程式(適者生存型学習則) に従って更新する。

パラメータw.png

ここでαj(ϕ)は内的自然増加率、γjk(ϕ) は競争係数を示し以下のような式で成り立つ

内的自然増加率.png
競争係数.png

2.動径基底関数の中心𝑚𝑗の更新 従来のRBFNにおける更新式は以下の通りである

RBFNのmパラメータ.png

RC-RBFNでは自由エネルギーを考慮します。更新式は条件付確率密度関数𝑝𝛽′(𝑥𝑖∣𝑚𝑗[𝑖]) を用いて最急降下方向に従って更新されます。

RCRBFNにおけるパラメータm.png

θは(w_0,w_j,w_jk)かなっている. このθの中身がtheta.csvには格納され,これを用いて復元を行う.

STEP2 

df['from'] = df['from'].apply(lambda x : labels[x])


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS