タグ

ブックマーク / blog.amedama.jp (36)

  • Python: XGBoost を使ってみる - CUBE SUGAR CONTAINER

    XGBoost (eXtreme Gradient Boosting) は勾配ブースティング決定木 (Gradient Boosting Decision Tree) のアルゴリズムを実装したオープンソースのライブラリ。 最近は、同じ GBDT 系のライブラリである LightGBM にややお株を奪われつつあるものの、依然として機械学習コンペティションの一つである Kaggle でよく使われている。 今回は、そんな XGBoost の Python バインディングを使ってみることにする。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.14.2 BuildVersion: 18C54 $ python -V Python 3.7.2 もくじ もくじ 下準備 乳がんデータセットを分類してみる 学習過程を可視化する

    Python: XGBoost を使ってみる - CUBE SUGAR CONTAINER
    Gln
    Gln 2024/06/03
  • nvidia-smi(1) で GPU にパワーリミットを設定して消費電力や発熱を減らす - CUBE SUGAR CONTAINER

    自宅にあるオンプレマシンでグラフィックカードを GPGPU の用途に使用していると、消費電力や発熱は切実な問題になりうる。 特に昨今は電気代の値上がりも著しいし、発熱は製品寿命の短縮や夏だと室温の上昇につながる。 そこで、今回は Linux の環境で nvidia-smi(1) を使って NVIDIA の GPU にパワーリミットを設定することで消費電力や発熱の低減を目指してみる。 使った環境は次のとおり。 Ubuntu 20.04 LTS のマシンに、Docker と nvidia-container-toolkit がインストールしてある。 $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.4 LTS Release: 20.04 Codenam

    nvidia-smi(1) で GPU にパワーリミットを設定して消費電力や発熱を減らす - CUBE SUGAR CONTAINER
    Gln
    Gln 2022/07/24
  • Python: LightGBM の cv() 関数と SHAP を使ってみる - CUBE SUGAR CONTAINER

    以前、このブログでは機械学習モデルの解釈可能性を向上させる手法として SHAP を扱った。 blog.amedama.jp 上記のエントリでは、LightGBM の train() 関数と共に、モデルの学習に使ったデータを解釈していた。 今度は cv() 関数を使って、Out-of-Fold なデータを解釈する例を試してみる。 つまり、モデルにとって未知のデータを、どのような根拠で予測をしているのかざっくり把握することが目的になる。 使った環境は次のとおり。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.15.7 BuildVersion: 19H114 $ python -V Python 3.8.6 もくじ もくじ 下準備 擬似的な二値分類用のデータを作って試してみる 下準備 あらかじめ、必要なパッケージをインストールしておく。

    Python: LightGBM の cv() 関数と SHAP を使ってみる - CUBE SUGAR CONTAINER
    Gln
    Gln 2021/01/08
  • 「Linuxで動かしながら学ぶTCP/IPネットワーク入門」という本を書きました - CUBE SUGAR CONTAINER

    表題のとおり TCP/IP に関するを書きました。 今回は、そのご紹介です! Linuxで動かしながら学ぶTCP/IPネットワーク入門 作者:もみじあめAmazon どんななの? Linux を使って実際にネットワークを組んで動かしながら TCP/IP について学べるです。 実際に手を動かすことで、より実践的で風化しにくい知識と技術を身につけることがの目的です。 こんな人にオススメ 次のいずれかに当てはまるような方には、このが参考になると思います。 ネットワークが専門ではない IT エンジニア、またはそれを志す学生さん 他の TCP/IP に関するを読んだことはあるけど、身についている実感が少ない インターネットやインフラの技術についてよく知らないけど興味はある ネットワークを気軽に組んで実験できる環境の作り方に興味がある そして、このを読んで試した後には、次のような効果が見

    「Linuxで動かしながら学ぶTCP/IPネットワーク入門」という本を書きました - CUBE SUGAR CONTAINER
    Gln
    Gln 2020/12/10
  • Python: SHAP (SHapley Additive exPlanations) を LightGBM と使ってみる - CUBE SUGAR CONTAINER

    SHAP は協力ゲーム理論にもとづいて機械学習モデルを解釈する手法と、その実装を指している。 今回は、あまり理論の部分には踏み込むことなく、使い方を中心として書いていく。 使った環境は次のとおり。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.15.6 BuildVersion: 19G73 $ python -V Python 3.8.5 下準備 はじめに、利用するパッケージをインストールしておく。 $ pip install shap lightgbm scikit-learn matplotlib jupyterlab また、SHAP は Jupyter 経由で使った方がインタラクティブな表示ができる。 そのため、今回は Jupyter Lab 上で操作することを想定する。 $ jupyter-lab Jupyter Lab を

    Python: SHAP (SHapley Additive exPlanations) を LightGBM と使ってみる - CUBE SUGAR CONTAINER
    Gln
    Gln 2020/10/11
  • Python: LIME (Local Interpretable Model Explanations) を LightGBM と使ってみる - CUBE SUGAR CONTAINER

    今回は、機械学習モデルの解釈可能性を向上させる手法のひとつである LIME (Local Interpretable Model Explanations) を LightGBM と共に使ってみる。 LIME は、大局的には非線形なモデルを、局所的に線形なモデルを使って近似することで、予測の解釈を試みる手法となっている。 今回使った環境は次のとおり。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.15.7 BuildVersion: 19H2 $ python -V Python 3.8.5 もくじ もくじ 下準備 Boston データセットを LightGBM で学習させる LIME を使って局所的な解釈を得る 参考 下準備 まずは、下準備として使うパッケージをインストールしておく。 $ pip install lime sciki

    Python: LIME (Local Interpretable Model Explanations) を LightGBM と使ってみる - CUBE SUGAR CONTAINER
    Gln
    Gln 2020/10/11
  • Python: LightGBM の cv() 関数の実装について - CUBE SUGAR CONTAINER

    今回は LightGBM の cv() 関数について書いてみる。 LightGBM の cv() 関数は、一般的にはモデルの性能を評価する交差検証に使われる。 一方で、この関数から取り出した学習済みモデルを推論にまで使うユーザもいる。 今回は、その理由やメリットとデメリットについて書いてみる。 cv() 関数から取り出した学習済みモデルを使う理由とメリット・デメリットについて 一部のユーザの間では有名だけど、LightGBM の cv() 関数は各 Fold の決定木の増やし方に特色がある。 まず、LightGBM では決定木の集まりを Booster というオブジェクトで管理している。 Booster が内包する決定木の数は、ラウンド (イテレーション) 数として認識できる。 https://github.com/microsoft/LightGBM/blob/v3.0.0rc1/py

    Python: LightGBM の cv() 関数の実装について - CUBE SUGAR CONTAINER
    Gln
    Gln 2020/08/12
  • Python: NumPy 配列の操作でメモリのコピーが生じているか調べる - CUBE SUGAR CONTAINER

    パフォーマンスの観点からいえば、データをコピーする機会は少ないほど望ましい。 コンピュータのバスの帯域幅は有限なので、データをコピーするには時間がかかる。 NumPy の配列 (ndarray) には、メモリを実際に確保している配列と、それをただ参照しているだけのビュー (view) がある。 そして、配列への操作によって、メモリが確保されて新しい配列が作られるか、それとも単なるビューになるかは異なる。 今回は NumPy の配列を操作するときにメモリのコピーが生じているか調べる方法について。 使った環境は次のとおり。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.15.5 BuildVersion: 19F101 $ python -V Python 3.7.7 $ pip list | grep -i numpy numpy 1.

    Python: NumPy 配列の操作でメモリのコピーが生じているか調べる - CUBE SUGAR CONTAINER
    Gln
    Gln 2020/07/19
  • Python: Keras でカスタムメトリックを扱う - CUBE SUGAR CONTAINER

    今回は Keras に組み込みで用意されていない独自の評価指標 (カスタムメトリック) を扱う方法について書いてみる。 なお、Keras でカスタムメトリックを定義する方法については、以下の公式ドキュメントに記載がある。 keras.io 使った環境は次のとおり。 Keras にはスタンドアロン版ではなく TensorFlow 組み込みのもの (tf.keras) を使った。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.14.6 BuildVersion: 18G4032 $ python -V Python 3.7.7 $ python -c "import tensorflow as tf; print(tf.__version__)" 2.2.0 $ python -c "import tensorflow as tf; pr

    Python: Keras でカスタムメトリックを扱う - CUBE SUGAR CONTAINER
    Gln
    Gln 2020/05/22
  • Python: LightGBM の学習率を動的に制御する - CUBE SUGAR CONTAINER

    LightGBM の学習率は基的に低い方が最終的に得られるモデルの汎化性能が高くなることが経験則として知られている。 しかしながら、学習率が低いとモデルの学習に多くのラウンド数、つまり計算量を必要とする。 そこで、今回は学習率を学習の過程において動的に制御するコールバックを実装してみた。 きっかけは以下のツイートを見たこと。 validation scoreをモニタリングして、lr=0.1で限界に達したらlr=0.01に下げる、みたいなことやったら面白い気がする。誰かcallback使って実装して欲しい https://t.co/iaG6rNo1t5— mamas (@mamas16k) 2019年7月17日 なるほど面白そう。 下準備 使用するライブラリをあらかじめインストールしておく。 $ pip install lightgbm seaborn scikit-learn 学習率を動

    Python: LightGBM の学習率を動的に制御する - CUBE SUGAR CONTAINER
    Gln
    Gln 2019/07/20
  • Python: RFE (Recursive Feature Elimination) で特徴量を選択してみる - CUBE SUGAR CONTAINER

    今回は RFE (Recursive Feature Elimination) と呼ばれる手法を使って特徴量選択 (Feature Selection) してみる。 教師データの中には、モデルの性能に寄与しない特徴量が含まれている場合がある。 アルゴリズムがノイズに対して理想的にロバストであれば、有効な特徴量だけを読み取って学習するため特徴量選択は不要かもしれない。 しかしながら、現実的にはそのような仮定を置くことが難しい場合があると思う。 そこで、元の特徴量からモデルの性能に寄与する部分集合を取り出す作業を特徴量選択という。 特徴量選択の手法には、以下の 3 つがあるようだ。 フィルター法 (Filter Method) 統計的な物差しにもとづいて特徴量を評価する ラッパー法 (Wrapper Method) 機械学習のモデルを用いて特徴量を評価する 組み込み法 (Embedding M

    Python: RFE (Recursive Feature Elimination) で特徴量を選択してみる - CUBE SUGAR CONTAINER
    Gln
    Gln 2019/04/21
  • Python: Adversarial Validation について - CUBE SUGAR CONTAINER

    最近、Kaggle などのデータ分析コンペで使われることの多い Adversarial Validation という手法について調べたり考えていたので書いてみる。 もくじ もくじ 背景 Adversarial Validation 試してみる 下準備 二つのデータが同じ分布に由来するとき 二つのデータが異なる分布に由来するとき 異なる分布でそのまま分類してみる 検証用データに似ているものを取り出す 取り出したデータを使って学習してみる ラベルごとに似ているデータを取り出す どれだけ取り出して学習させれば良いのか Adversarial Validation の応用例 背景 Adversarial Validation という手法は、データ分析コンペに存在する、ある課題を解決するために考案された。 その課題とは、提供される複数のデータセットの分布が異なる場合に、いかにして正しく予測するかとい

    Python: Adversarial Validation について - CUBE SUGAR CONTAINER
    Gln
    Gln 2019/02/24
  • Python: 機械学習における不均衡データの問題点と対処法について - CUBE SUGAR CONTAINER

    機械学習における分類問題では、扱うデータセットに含まれるラベルに偏りのあるケースがある。 これは、例えば異常検知の分野では特に顕著で、異常なデータというのは正常なデータに比べると極端に数が少ない。 正常なデータが 99.99% なのに対し異常なデータは 0.01% なんてこともある。 このようなデータセットは不均衡データ (Imbalanced data) といって機械学習で扱う上で注意を要する。 今回は、不均衡データを扱う上での問題点と、その対処法について見てみる。 なお、登場する分類問題の評価指標については、以前このブログで扱ったことがあるのでそちらを参照のこと。 blog.amedama.jp 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.14.2 BuildVersion: 18C54 $ python

    Python: 機械学習における不均衡データの問題点と対処法について - CUBE SUGAR CONTAINER
    Gln
    Gln 2018/12/16
  • OpenSSH のコネクションが切れにくいように Keepalive を送る - CUBE SUGAR CONTAINER

    たまに SSH のコネクションが頻繁に切れる環境があるので、定期的にデータを送受信することで切断されるのを防ぎたい。 これは OpenSSH のクライアントであれば ServerAliveInterval を設定することで実現できる。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.13.6 BuildVersion: 17G3025 $ ssh -V OpenSSH_7.6p1, LibreSSL 2.6.2 コマンドラインからであれば、次のように -o オプションで ServerAliveInterval に秒数を指定しながらリモートに接続する。 $ ssh -o ServerAliveInterval=60 <username>@<remotehost> 毎回コマンドラインで指定するのは面倒なので Open

    OpenSSH のコネクションが切れにくいように Keepalive を送る - CUBE SUGAR CONTAINER
    Gln
    Gln 2018/11/16
  • Python: 特徴量の重要度を Permutation Importance で計測する - CUBE SUGAR CONTAINER

    学習させた機械学習モデルにおいて、どの特徴量がどれくらい性能に寄与しているのかを知りたい場合がある。 すごく効く特徴があれば、それについてもっと深掘りしたいし、あるいは全く効かないものがあるなら取り除くことも考えられる。 使うフレームワークやモデルによっては特徴量の重要度を確認するための API が用意されていることもあるけど、そんなに多くはない。 そこで、今回はモデルやフレームワークに依存しない特徴量の重要度を計測する手法として Permutation Importance という手法を試してみる。 略称として PIMP と呼ばれたりすることもあるようだ。 この手法を知ったのは、以下の Kaggle のノートブックを目にしたのがきっかけだった。 Permutation Importance | Kaggle あんまりちゃんと読めてないけど、論文としては Altmann et al. (2

    Python: 特徴量の重要度を Permutation Importance で計測する - CUBE SUGAR CONTAINER
    Gln
    Gln 2018/11/16
  • リモートサーバ上の Docker コンテナで Jupyter Notebook を使う - CUBE SUGAR CONTAINER

    今回は、以下のエントリの続き。 blog.amedama.jp 上記の記事でやったことを Docker コンテナにしてみる。 使った環境は次の通り。 まずは Docker ホストとして使う Ubuntu 18.04 のマシンから。 こちらも前回と同じように Vagrant で構築している。 vagrant $ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04.1 LTS" vagrant $ uname -r 4.15.0-29-generic そこに接続するクライアントは次の通り。 client $ sw_vers ProductName: Mac OS X ProductVersion: 10.13.

    リモートサーバ上の Docker コンテナで Jupyter Notebook を使う - CUBE SUGAR CONTAINER
    Gln
    Gln 2018/10/27
  • Python: ベイズ最適化で機械学習モデルのハイパーパラメータを選ぶ - CUBE SUGAR CONTAINER

    機械学習モデルにおいて、人間によるチューニングが必要なパラメータをハイパーパラメータと呼ぶ。 ハイパーパラメータをチューニングするやり方は色々とある。 例えば、良さそうなパラメータの組み合わせを全て試すグリッドサーチや、無作為に試すランダムサーチなど。 今回は、それとはちょっと違ったベイズ最適化というやり方を試してみる。 ベイズ最適化では、過去の試行結果から次に何処を調べれば良いかを確率分布と獲得関数にもとづいて決める。 これにより、比較的少ない試行回数でより優れたハイパーパラメータが選べるとされる。 Python でベイズ最適化をするためのパッケージとしては Bayesian Optimization や skopt、GPyOpt などがある。 今回は、その中でも Bayesian Optimization を使ってみることにした。 使った環境は次の通り。 $ sw_vers Produ

    Python: ベイズ最適化で機械学習モデルのハイパーパラメータを選ぶ - CUBE SUGAR CONTAINER
    Gln
    Gln 2018/08/22
  • Python: Keras/TensorFlow で GPU のメモリを必要な分だけ確保する - CUBE SUGAR CONTAINER

    Keras のバックエンドに TensorFlow を使う場合、デフォルトでは一つのプロセスが GPU のメモリを全て使ってしまう。 今回は、その挙動を変更して使う分だけ確保させるように改めるやり方を書く。 環境には次のようにしてセットアップした Ubuntu 16.04 LTS を使っている。 blog.amedama.jp サンプルとして動作させるアプリケーションには Keras が提供している MNIST データセットを CNN で認識するものを使う。 まずはこれをダウンロードしておこう。 同時に、セッションをクリアするパッチも追加しておく。 $ wget https://raw.githubusercontent.com/fchollet/keras/master/examples/mnist_cnn.py $ echo 'K.clear_session()' >> mnist_c

    Python: Keras/TensorFlow で GPU のメモリを必要な分だけ確保する - CUBE SUGAR CONTAINER
    Gln
    Gln 2018/07/29
  • Python: Selenium + Headless Chrome で Web ページ全体のスクリーンショットを撮る - CUBE SUGAR CONTAINER

    スクレイピングした Web サイトからページ全体のスクリーンショットを撮影したい機会があった。 そこで Selenium の Python バインディングと Headless Chrome を使ったところ実現できたのでメモしておく。 ちなみに、ページ全体でなければ Headless Chrome 単体でも撮れる。 その方法についても末尾に補足として記載しておいた。 使った環境は次の通り。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.13.5 BuildVersion: 17F77 $ python -V Python 3.6.5 $ pip list --format=columns | grep -i selenium selenium 3.13.0 $ chromedriver --version ChromeDriver 2.

    Python: Selenium + Headless Chrome で Web ページ全体のスクリーンショットを撮る - CUBE SUGAR CONTAINER
    Gln
    Gln 2018/07/29
  • Python: パラメータ選択を伴う機械学習モデルの交差検証について - CUBE SUGAR CONTAINER

    今回は、ハイパーパラメータ選びを含む機械学習モデルの交差検証について書いてみる。 このとき、交差検証のやり方がまずいと汎化性能を来よりも高く見積もってしまう恐れがある。 汎化性能というのは、未知のデータに対処する能力のことを指す。 ようするに、いざモデルを実環境に投入してみたら想定よりも性能が出ない (Underperform) ということが起こる。 これを防ぐには、交差検証の中でも Nested Cross Validation (Nested CV) あるいは Double Cross Validation と呼ばれる手法を使う。 ハイパーパラメータの選び方としては、色々な組み合わせをとにかく試すグリッドサーチという方法を例にする。 また、モデルのアルゴリズムにはサポートベクターマシンを使った。 これは、サポートベクターマシンはハイパーパラメータの変更に対して敏感な印象があるため。

    Python: パラメータ選択を伴う機械学習モデルの交差検証について - CUBE SUGAR CONTAINER
    Gln
    Gln 2018/07/24