‘cryptography’ package is required for sha256_password or caching_sha2_password auth methods

AWS EC2 上に、MySQLをインストールして、Lambda関数(python実装)で、pymysql / cryptography ライブラリを使用して、表題のエラーに2週間ほどハマっていた。

上記の(pymysql / cryptography)ライブラリは、共に、layers/common_layer/python/lib/python3.13/site-packages/ に配置していた。しかし、どうしても表題のエラーとなる。

結論から言うと、site-packages 内に、Amazon Linux 2023 でコンパイルされた _cffi_backend.cpython-312-x86_64-linux-gnu.so というバイナリファイル(.so)が必要であった。

ローカルマシンである、Macで、pymysql / cryptography を、pip install すると、Mac 用の .so ファイルが作成されるのであるが、これをAmazon Linux 2023上にデプロイしても動作しないと言うオチ。

では、どのように _cffi_backend.cpython-312-x86_64-linux-gnu.so を作成するかと言うと、EC2インスタンスを立ち上げ、ワーク用のディレクトリを作成し、pip install pymysql / pip install cryptography を実行してインストールする。すると、ディレクトリ内に、お目当ての、_cffi_backend.cpython-312-x86_64-linux-gnu.so が生成される。

これを、ローカル環境に持ってきて、layers/common_layer/python/lib/python3.13/site-packages/cryptography 内に配置する。そして、CDKにてデプロイすれば動作するようになる。

とりあえず、解決できて良かった。

※追記

その後、動作していたプログラムが再度動かなくなった。結論から言うと、pythonのバージョンをきちんと合わせていなかったことが原因のようだ。

LambdaのPythonバージョンの誤り: Lambda関数の設定で指定しているPythonのランタイムバージョンが、レイヤーをビルドしたPythonのバージョン(ファイル名から推測するとPython 3.12)と完全に一致しているか再度確認してください。バージョンが異なると、ネイティブ拡張ライブラリが正しくロードされないことがあります。そして、_cffi_backend.cpython-312-x86_64-linux-gnu.so は、cryptography パッケージ内に入れてください。

compatibleRuntimes: [lambda.Runtime.PYTHON_3_12],
layers/common_layer/python/lib/python3.12/site-packages/
_cffi_backend.cpython-312-x86_64-linux-gnu.so

Posted in AWS, CDK, Linux, Mac, MySQL, Python, 技術情報 | Leave a comment

Amazon Linux 2023へのpyenv インストール方法

1. インストーラをダウンロードする。

$ curl -fsSL https://pyenv.run | bash

2. ~/.bashrc へPathを設定する

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init - bash)"' >> ~/.bashrc

3. ~/.bash_profileへPathを設定する

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init - bash)"' >> ~/.bash_profile

4. 設定を反映させる

$ exec "$SHELL"
Posted in Linux, Python, 技術情報 | Leave a comment

Macへのaws-cli のインストール方法

$ brew install awscli
Posted in AWS, Mac, 技術情報 | Leave a comment

Mac へのnode.js のインストール方法

Macへのnode.js のインストール方法はいくつかあるが、nodeのバージョンの切り替えを行なって行きたい場合は、nvm をインストールするのがキレイな方法だと思う。HomeBrewを使用することを前提です。

1. Homebrew で nvm をインストール

$ brew install nvm

2. ディレクトリ作成(nvm用)

$ mkdir ~/.nvm

3. シェル設定(.zshrc)ファイルに追記

export NVM_DIR="$HOME/.nvm"
[ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh"
[ -s "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm"

4. 設定読み込み

$ source ~/.zshrc

5. インストール可能なバージョン一覧

$ nvm ls-remote

6. Nodeのバージョンをインストール(version 23.11.0 の場合)

$ nvm install 23.11.0

7. インストールされているバージョンの表示

$ nvm ls

8. Node バージョンの切り替え

$ nvm use 22.14.0

9. 使用しているNode バージョンの確認

$ node -v
Posted in Mac, Node, 技術情報 | Leave a comment

Mac の history 履歴件数の設定

% echo "HISTSIZE=1000" >> ~/.zshrc 
Posted in Mac, 技術情報 | Leave a comment

Mac へ Pythonをインストールする方法

MacにPythonをインストールする方法はいくつかあるが、自分はpyenv を使用することにする。

1. Homebrewを使用してpyenv をインストール

$ brew install pyenv

2. シェル設定ファイル(.zshrc)に以下を追加

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
$ echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(pyenv init -)"' >> ~/.zshrc

3. 設定を反映

$ source ~/.zshrc

4. インストール可能なPythonバージョンを一覧表示

$ pyenv install --list

5. 希望するバージョンをインストールする(例:3.13.2)

$ pyenv install 3.13.2

6. グローバルにバージョンを設定する

$ pyenv global 3.13.2

7. ローカルにインストールされたバージョン一覧

$ pyenv versions
Posted in Linux, Mac, Python, 技術情報 | Leave a comment

Mac のFinder で常に隠しフォルダを表示する方法

% defaults write com.apple.finder AppleShowAllFiles TRUE
Posted in Mac, 技術情報 | Leave a comment

バギングについて

バギング:色々な人に意見を聞いて、より確実な答えを見つけよう!

バギングは、アンサンブル学習の仲間で、こちらも複数の弱い学習器を組み合わせて、より良い予測をするための方法です。ブースティングとは少し違う考え方をしています。

  • 考え方:
    1. 元のデータから、重複を許して何回かランダムにデータを取り出して、いくつかの小さなデータセット(ブートストラップサンプル)を作ります。
    2. それぞれの小さなデータセットを使って、独立した弱い学習器を学習させます。
    3. 最後に、これらのたくさんの弱い学習器の予測結果を集計して、最終的な予測を決めます。
  • 例えるなら:
    • あなたが難しい問題に困っているとします。
    • 一人の賢い先生に聞くのも良いですが、色々な先生に同じ問題について別々に意見を聞いてみます。
    • それぞれの先生は、少し違うデータ(例えば、違う参考書や過去問)を見ているかもしれません。
    • 最後に、それぞれの先生の意見を総合的に判断して、一番信頼できる答えを見つけ出す、というイメージです。

バギングのポイント

  • データのランダム抽出(ブートストラップサンプリング): 元のデータから、同じデータが何度も選ばれることを許して、ランダムに新しいデータセットをいくつか作ります。これにより、それぞれの弱い学習器は少しずつ異なるデータで学習することになります。
  • 独立した学習: それぞれの弱い学習器は、他の学習器の学習結果に影響を受けずに、独立して学習します。
  • 予測の集計:
    • 分類問題(犬か猫かの予測など): 多数決で最終的なクラスを決定します。一番多くの弱い学習器が「犬」と予測したら、最終的な答えも「犬」とします。
    • 回帰問題(気温の予測など): 弱い学習器の予測値の平均を取って、最終的な予測値とします。

バギングの代表的な手法

  • Random Forest (ランダムフォレスト): バギングの考え方をベースにして、さらに学習させる特徴量(説明変数)もランダムに選択する工夫を加えた、非常に強力なアルゴリズムです。たくさんの決定木(はい/いいえで判断していく木のようなモデル)を組み合わせて使います。

バギングのメリット

  • 過学習を抑える効果が高い: それぞれの弱い学習器が少しずつ異なるデータで学習するため、一つのモデルが特定のデータに過剰に適合してしまう(過学習)のを防ぐ効果があります。色々な視点を持つ学習器の結果を平均化することで、より汎化性能の高いモデルを作ることができます。
  • 比較的簡単に実装できる: ブースティングのように順番に学習する必要がないため、並列に学習を進めることができ、実装も比較的容易です。
  • ロバスト性(頑丈さ): 一部の弱い学習器が間違った予測をしても、他の学習器がカバーできるため、全体として安定した予測ができます。

バギングとブースティングの違い

特徴バギングブースティング
データの扱い重複ありのランダム抽出(ブートストラップ)間違えたデータを重視
学習の進め方独立して並行に学習順番に、前の学習器の結果を考慮して学習
目的過学習の抑制予測精度の向上
代表的な手法Random ForestAdaBoost, Gradient Boosting

まとめ

バギングは、色々な人に少しずつ違うデータを見てもらいながら意見を聞いて、最終的に一番信頼できる答えを見つけ出す方法です。それぞれの「弱い先生」は独立して考えるので、意見が偏りにくく、より多くのケースに対応できる、賢い「全体の判断」ができるようになります。

アンサンブル学習には、このバギングのように「みんなで少しずつ違うことをして、最後に良い結果を出す」という面白い考え方があります。

Posted in AI, 技術情報 | Leave a comment

アンサンブル学習と弱学習器、ブースティングについて

アンサンブル学習:みんなで力を合わせる作戦!

アンサンブル学習は、まるでチームで難しい問題に取り組むようなイメージです。一人で考えるよりも、色々な人の意見を聞いた方が、より良い答えにたどり着けることがありますよね?

  • 考え方: 性能があまり高くない、たくさんの弱い学習器を組み合わせて、全体として性能の高い強い学習器を作ろう!という方法です。
  • 弱い学習器って?:
    • ちょっとだけ賢いけど、完璧ではない学習モデルのことです。
    • 例えば、簡単なルールしか理解できなかったり、一部のデータに対してしか正しく予測できなかったりします。
    • 例えるなら、テストでヤマ勘で答えるのが得意な人、計算問題だけ得意な人、など、得意なことや得意な範囲が限られているようなイメージです。
  • 強い学習器って?:
    • 色々な問題を高い精度で解決できる、賢い学習モデルのことです。
    • アンサンブル学習で作られた、みんなの知恵が集まった結果のモデルがこれにあたります。

弱学習器をどうやって組み合わせるの?

色々な方法がありますが、代表的なものに「多数決」や「平均化」があります。

  • 多数決: 複数の弱い学習器に同じ問題を解かせ、一番多かった答えを最終的な答えとします。クラスの友達に同じ質問をして、一番多かった意見を採用するのに似ています。主に、犬か猫かを予測するような分類問題で使われます。
  • 平均化: 複数の弱い学習器に数値を予測させ、それらの予測値の平均を最終的な答えとします。何人かの友達に明日の気温を予想してもらって、その平均値を自分の予想にするのに似ています。主に、気温や株価を予測するような回帰問題で使われます。

ブースティング:間違いから学ぶ賢いチーム!

ブースティングは、アンサンブル学習の中でも、特に「間違いを次に活かす」という考え方が強い方法です。

  • 考え方:
    1. まず、最初の弱い学習器にデータを学習させます。
    2. その学習器が間違えたデータに注目し、次の弱い学習器には、その間違えたデータをより重点的に学習させます。
    3. これを何回か繰り返すことで、苦手な問題を克服していく、賢いチームを作るイメージです。
  • 例えるなら:
    • 最初はみんなで同じ問題を解きます。
    • 間違えた問題が多かった人には、次に似たような問題をたくさん練習してもらいます。
    • そうすることで、チーム全体として苦手な問題を克服し、だんだん正解率が上がっていく、という感じです。
  • ブースティングのポイント:
    • 順番に学習する: 弱い学習器は順番に作られ、前の学習器の失敗を次の学習器が改善しようとします。
    • 重み付け: 間違えたデータや、性能の低い学習器の予測には、より大きな重みをつけて、最終的な判断に影響を与えます。

ブースティングの代表的な手法

  • AdaBoost (アダブースト): 間違えたデータの重みを大きくすることで、次の学習器がその間違いを意識して学習するようにします。
  • Gradient Boosting (勾配ブースティング): 前の学習器の予測の「間違いの方向」を次の学習器が修正するように学習を進めます。

アンサンブル学習とブースティングのメリット

  • 予測精度が高い: 一つの強力な学習器よりも、複数の弱い学習器を組み合わせることで、より複雑なパターンを捉え、精度の高い予測ができることが多いです。
  • 過学習しにくい: 一つのモデルが特定のデータに過剰に適合してしまう(過学習)のを防ぐ効果があります。色々な視点を持つ弱い学習器が協力することで、バランスの取れた学習ができます。
  • ロバスト性(頑丈さ): 一部の弱い学習器が間違った予測をしても、他の学習器がカバーできるため、全体として安定した予測ができます。

まとめ

  • アンサンブル学習 は、複数のちょっと頼りない「弱学習器」を集めて、みんなで力を合わせて賢い「強学習器」を作る方法です。
  • 弱学習器 は、得意なことや得意な範囲が限られた、性能があまり高くない学習モデルのことです。
  • ブースティング は、アンサンブル学習の中でも、特に「間違いから学び、どんどん賢くなる」という考え方を取り入れた方法です。弱い学習器が順番に学習し、前の学習器が間違えた部分を重点的に学習することで、チーム全体の精度を高めていきます。

アンサンブル学習とブースティングは、難しい問題をみんなで協力して解決する、とても強力な考え方です。

Posted in AI, 技術情報 | Leave a comment

交差エントロピーと平均二乗誤差

どちらも、機械学習で「先生」(正解データ)と「生徒」(予測モデル)のズレを測るための物差しのようなものです。生徒の出した答えが、先生の教えた正解とどれくらい違うのかを数字で表します。

1. 平均二乗誤差(Mean Squared Error – MSE):答えのズレを「二乗」で見る物差し

これは、主に**「数値」を予測する**ときに使われます。例えば、「明日の気温は何度になるか?」といった予測です。

  • 例えるなら:
    • あなたが「明日の気温は20度」と予測したとします。
    • 実際には、先生(天気予報)が「明日の気温は22度」と言いました。
    • このとき、あなたの予測と正解のズレは「22 – 20 = 2度」です。
  • 平均二乗誤差の計算方法(ちょっとだけ詳しく):
    1. それぞれの予測と正解のズレ(誤差)を計算します。(例:2度)
    2. そのズレを二乗します。(例:2度 × 2度 = 4) ← ここがポイント!
    3. 全ての予測データについて、この二乗したズレを合計します。
    4. その合計を、データの個数で割ります。(平均を出す)
  • なぜ「二乗」するの?:
    • ズレがプラスでもマイナスでも、二乗することで必ずプラスの数になります。これで、プラスのズレとマイナスのズレが打ち消し合うのを防ぎます。
    • 大きなズレは二乗するとさらに大きくなるので、「大きな間違い」をより強く評価することができます。
  • 平均二乗誤差の値が大きいとき: 生徒の予測は先生の正解と大きくズレていることが多い → まだまだ練習が必要!
  • 平均二乗誤差の値が小さいとき: 生徒の予測は先生の正解と近いことが多い → 上手に予測できているね!

つまり、平均二乗誤差は、「予測がどれくらい正解からズレているかの平均」を、ズレの大きさを強調して評価する物差しです。

2. 交差エントロピー(Cross-Entropy):正解の「仲間」を選べているかを見る物差し

これは、主に**「どちらの仲間か?」を予測する**ときに使われます。例えば、「この画像は犬ですか?猫ですか?」といった分類問題です。

  • 例えるなら:
    • 先生が「これは犬の写真です」と教えました。
    • 生徒のモデルは、「犬である確率は0.8(80%)、猫である確率は0.2(20%)」と予測しました。
    • 正解は「犬」なので、生徒は「犬」の仲間である可能性を高く予測できています。
  • 交差エントロピーの考え方(ちょっと難しいけど頑張って!):
    • 先生が「正解はこっち!」とハッキリ示しているのに対して、生徒がどれくらい自信を持って正解の仲間を選べているかを見ます。
    • 生徒が正解の仲間である確率を高く予測していれば、交差エントロピーの値は小さくなります。(良い予測)
    • 生徒が正解の仲間である確率を低く予測していれば、交差エントロピーの値は大きくなります。(悪い予測)
    • 間違った仲間の確率を高く予測すると、さらに大きなペナルティ(悪い評価)が与えられます。
  • イメージ:
    • 正解が「犬」の場合、予測が「犬:0.99、猫:0.01」のように、正解の確率がほぼ100%に近いほど、交差エントロピーは小さくなります。
    • 予測が「犬:0.5、猫:0.5」のように、どちらか分かっていない状態だと、交差エントロピーは大きくなります。
    • 最悪なのは、予測が「犬:0.1、猫:0.9」のように、間違った方を高い確率で選んでしまう場合で、このときに交差エントロピーは非常に大きくなります。
  • 交差エントロピーの値が大きいとき: 生徒は正解の仲間を自信を持って選べていない → どちらの仲間か、もっとよく考える必要がある!
  • 交差エントロピーの値が小さいとき: 生徒は正解の仲間を自信を持って選べている → 上手に分類できているね!

まとめると…

  • 平均二乗誤差 (MSE): 予測した「数値」が、実際の数値とどれくらいズレているかを、ズレの大きさを強調して測る物差し。(気温、株価などの予測に使う)
  • 交差エントロピー (Cross-Entropy): 予測した「仲間(クラス)」が、実際の仲間とどれくらい合っているかを、自信の度合いも考慮して測る物差し。(犬か猫かの分類、病気かどうかの診断などに使う)

どちらも、機械学習のモデルがどれくらい正確に予測できているかを評価するために、とても大切な考え方です。先生と生徒の間の「答え合わせ」のようなものだと考えると、少し分かりやすいかもしれませんね!

Posted in AI, 技術情報 | Leave a comment