YUTO-Wの日記

美容と健康のためのブログです(`・ω・´) #ビタミンC #健康志向 #機械学習 #AI #ロボット #ROS

【メモ】AWS SageMaker で新規パッケージをインストールする方法

【目的】

AWS SageMaker で新規パッケージをインストールする方法を示す。

 

【内容】

インストールしたいパッケージ名の前に "!" をつければ良い。

例えば、NeuralProphetをインストールしたい場合、以下を入力し Ctrl+Enter でOK。

!pip install neuralprophet

f:id:yutow0403:20220408154801p:plain

AWS SageMaker パッケージインストール方法

 

以上。

NeuralProphetによる多変量解析の実装方法

【目的】

NeuralProphetによる多変量解析を行う方法についてまとめる。

 

【背景】

時系列データのAI予測モデルとして「NeuralProphet」がある。

NeuralProphetのポイント:

 ・Facebookが公開しているProphetにDeep Learningの技術を組合せたもの

 ・2017年リリース

 ・時系列解析ライブラリ

 ・GitHubは以下URL参照

  https://neuralprophet.com/html/index.html

 

Web上には様々な情報がある。

例えば以下ページでは、単変量での実装方法が紹介されている。

NeuralProphetを使ってみた - Qiita

しかし、多変量での実装に関する情報がWeb上にほぼ無い。(見つけられない。)

そのため、本ブログでまとめる。

 

【内容】

AWS SageMakerで実装する。以下コマンドで neuralprophet インストール可能。

!pip install neuralprophet

 

ライブラリのimport。

# NeuralProphet
from neuralprophet import NeuralProphet

 

データ読み込み。PandasのDataFrameとする。

df = pd.read_csv("***.csv")

※dfには、"time", "power", "fire", "thunder" 列があるとする。

 

NeuralProphetで予測するためには、

"ds"(タイムスタンプ)と "y"(推論対象)の列が必須。

そのため、リネームして対応する。

例えば、"time"(タイムスタンプ) と "power"(推論対象)の列がある場合は以下。

df = df.rename(columns={"time": "ds", "power":"y"})

 

テストデータ分割。テストデータ数は適宜変更する。

# 学習データとテストデータの分割
test_length = 50 #テストデータ数
df_train = df.iloc[:-test_length] #学習用
df_test = df.iloc[-test_length:] #評価用

 

NeuralProphetのパラメータを適切に設定。例えば、以下のようにする。

params = {
    "yearly_seasonality": False,
    "weekly_seasonality": False,
    "daily_seasonality": False,
    "normalize": "standardize", #標準化指定
    "global_normalization": False, #全体の中央値を一致させるかどうか
}

 

ここからが多変量でのポイント。

future_regressors_df で使用する変数を指定する。

以下のコードは、"fire" と "thunder" を説明変数として追加したもの。

future_regressors_df = pd.DataFrame(data={
                                          'fire': df['fire'][:-test_length],
                                          'thunder': df['thunder'][:-test_length]
                                         })

 

NeuralProphetモデル構築。

model = NeuralProphet(**params)

 

構築したモデルに対し、説明変数追加。

normalize="true" で、追加した説明変数の標準化が可能。

model = model.add_future_regressor(name='fire', normalize="true")
model = model.add_future_regressor(name='thunder', normalize="true")

 

モデルに関するその他設定。

# 使用するデータフレーム、推論頻度等の設定
metrics = model.fit(df, freq='1min', progress="bar")

 

精度検証用のデータ生成。test_lengthで指定した期間が、実際の評価期間になる。

# NeuralProphet 予測モデルの精度検証用データの生成
# 未来の時刻を含むデータフレームを作成
# make_future_dataframe の使い方は鬼ムズ(Webにほとんど情報が無い)
future = model.make_future_dataframe(
    df_train,
    regressors_df=future_regressors_df,
    periods=test_length,
    n_historic_predictions=len(df_train)
)

 

予測(推論)する。

# futureにはdf_trainの期間も含まれる
pred = model.predict(future)

 

予測結果の可視化。点は実測値。

# NeuralProphet 予測モデルの予測結果(学習データ期間+テストデータ期間)
pred_plot = model.plot(pred)  # 予想値(点は学習データの実測値)
component_plot = model.plot_components(pred)  # モデルの要素分解

f:id:yutow0403:20220408153812p:plain

NeuralProphet予測結果 可視化

 

精度評価のため、テストデータに予測値を結合。

# テストデータに予測値を結合
df_test["NeuralProphet Predict"] = pred.iloc[-test_length:].loc[:, "yhat1"]

 

精度算出。

評価には、平均絶対誤差(MAE:Mean Absolute Error)を用いる。

# NeuralProphet 予測モデルの精度検証(テストデータ期間)
print("MAE(NeuralProphet):") #平均絶対誤差(MAE:Mean Absolute Error)
print(mean_absolute_error(df_test["y"], df_test["NeuralProphet Predict"]))

  MAE(NeuralProphet):
  36.52580529385156

 

以上で、NeuralProphetによる多変量解析は可能である。

 

【まとめ】

NeuralProphetで多変量を扱う場合についてまとめた。

機械学習に限らず、最新の情報は日本語文献が少ない。

もっと英語を勉強しなくては。。

【Jetsonセットアップ】VirtualBoxを使わないほうが良い【SDK Managerエラー】

【目的】

先日、 NVIDIA® Jetson AGX Xavier をセットアップした。

その際、かなりハマったのでメモしておく。

 

【内容】

基本的には、以下手順でセットアップしていく。

 1. Ubuntu環境を用意する

 2. Ubuntu上でNVIDIA SDK Managerをダウンロードする

 3. NVIDIA SDK Managerを実行してUSB接続した外部Jetsonをセットアップする

 

Jetsonセットアップに関する記事はたくさんある。例えば以下。

dev.classmethod.jp

 

NVIDIA SDK Manager を使ってインストールするのだが、

何度やってもうまくいかない。

 

エラー例1)途中で失敗する

f:id:yutow0403:20210514174610p:plain

SDK Manager error1

エラー例2)途中でストールする

f:id:yutow0403:20210514175301p:plain

SDK Manager error2

 

今回、Mac上にVirtualBoxを入れて、VMとしてUbuntuをインストールした。

 構成:MacOS + VirtualBox + Ubuntu18.04

いろいろ調べてみると、VirtualBox上のUbuntuだと失敗するという情報を得た。

 

そこで、Ubuntu専用マシンを用意して試してみた。

 構成:Ubuntu18.04(のみ)

 

すると・・・あっという間にセットアップが完了した。

 

【まとめ】

Jetsonセットアップする際は、Ubuntu専用マシンを用意した方が良い。

SDK Managerによるインストールは、失敗すると簡単に数時間吹っ飛ぶ。

私は上記エラーを解決するために4日間かかった。(半ギレ

 

仮想マシン"CentOS6.6"のセッションを開けませんでした。

Virtual Boxが起動しなくなった。 

f:id:yutow0403:20210319140213p:plain

Virtual Box起動失敗

ーーーエラーコードーーー

仮想マシン"CentOS6.6"のセッションを開けませんでした。

Failed to open/create the internal network 'HostInterfaceNetworking-VirtualBox Host-Only Ethernet Adapter' (VERR_INTNET_FLT_IF_NOT_FOUND).

Failed to attach the network LUN (VERR_INTNET_FLT_IF_NOT_FOUND).

終了コード : E_FAIL (0x80004005)
コンポーネント: ConsoleWrap
インターフェース: IConsole

ーーーエラーコードここまでーーー

 

  →最新版にアップデートしたら治った。 

ダウンロードページ:

Downloads – Oracle VM VirtualBox

 

【まとめ】

VirtualBoxが起動しなくなったら、ひとまず最新版にアップデートしましょう。

【Office365】MacでTeams画面共有できなくなった件

【内容】

先日、MacのOSバージョンアップを実施した。

すると、Teamsの画面共有が突然できなくなった。

本文書では、その解決方法を紹介する。

 

【内容】

Teamsで画面共有しようとすると、

 「システム環境設定 → セキュリティとプライバシー → 画面収録」

 で、"Microsoft Teams" にチェックを入れてください、と出る。

 

しかし、チェックを入れても画面共有できない。

f:id:yutow0403:20200326164950p:plain

Macシステム環境設定:セキュリティとプライバシー

 

解決するには、上記チェックだけでなく、

 「システム環境設定 → 共有」

 で、"画面共有" にもチェックを入れる必要があった。

f:id:yutow0403:20200326165708p:plain

Macシステム環境設定:共有

 

いやマジこれ気付かないって・・・(;^ω^)

 

【まとめ】

Macのバージョンアップは、基本してはならない。

実施する場合は、リカバリも含めた作業時間を確保すること。