雑記 in hibernation

頭の整理と備忘録

ムスタング再生記

かつての愛機であったムスタングをリペアするついでに、ピックアップをダンカンのP-Railsに換装してみました。その結果「自分のことをムスタングと思い込んでいる謎ギター」っぷりに拍車がかかったので、その模様をまとめておきます。

動機

学生時代にメインのギターとしてムスタングを使っていたのですが、卒業が近づく頃にはボリュームをいじるとノイズが乗ったり、トーンノブの軸がひん曲がっていたりと電装系がだいぶヤバい状態になっていました。その後社会人になってからはサブに格下げされたままで放置状態になっていたのですが、このまま遊ばせておくのも勿体無いので、リペアついでに今一度ユースケースを整理しつつピックアップ換装しちゃおう、と思い至りました。

続きを読む

追い詰められたのでShap入門します

本職でクソモデルをこしらえた結果、モデルの中身に対する説明責任が発生してしまいました。逃げ場を失ったので素直にShapに入門します。


1. Shapとは

ビジネスの場で機械学習モデルを適用したり改善したりする場合、各変数が予測値に対してどのような影響を与えているのかを理解することは重要です。しかし「とりあえずlightGBMに思いつく限りの変数をぶち込めばOK」ってなノリでモデリングした結果生まれるのは、往々にして「ブラックボックスだけどそこそこ精度はでてんだよな〜」的なサムシングです。それを素直に「ブラックボックスだけどそこそこ精度はでてんすよ」などと報告しようものなら上司とクライアントにすっ叩かれて終了なわけで、そこで登場するのが機械学習モデルに一定の解釈性・説明性を担保する「説明可能な AI(XAI)」という概念です。そしてShapはそれを実現する技術の一つであり、OSSとしてライブラリが提供されています。

Shapの原理に関する説明は、以下のページの概説が大変わかりやすいです。

www.datarobot.com


ざっくりいうと、ゲーム理論において成果に対するプレイヤーの寄与度を定量化する手法「シャープレイ値(Shapley Value)」を応用して、機械学習モデルのアウトプットに対する各変数の寄与度を推し量ろう、という考え方です。シャープレイ値の計算と同等の処理フローをそのまま実行した場合、説明変数の数に応じて計算量が爆発してしまいます。そこで、Shapでは近似的に計算して処理コストを抑えることで、現実的な処理時間で寄与度の大きさ(Shap値)を算出できます。


続きを読む

PySparkデータフレームをscikit-learnのモデルで推論してみる(pandas_udf)

scikit-learnで学習したモデルを使ってPySparkのデータフレームに対する推論を行う方法はいくつかあって、例えば単純な方法としてはデータフレームを.toPandas()でPandasのデータフレームに変換してからモデルに入力する手があります。しかし、この方法だとSparkの分散処理を活かせませんし、単一の計算機に乗り切らない量のデータセットに対する推論はできません。そこで、pandas_udfを使うことでPySparkのデータフレームのまま推論ができるということで、ちょっと試してみました。

参考はこちら。

qiita.com


1. さっそく実装

実行環境はGoogle Colabです。以下の過去記事の一連の準備が整っている前提です。

Google ColaboratoryでPySpark環境構築(v3.2.1) - 雑記 in hibernation

続きを読む

Google ColaboratoryでPySpark環境構築(v3.2.1)

以前GoogleColabでのPySpark環境構築の方法をまとめたのですが、最近(v3.x.x以降?)はもっと楽にインストールできるっぽいです。ってことで、手順を更新します。

前回の↓

toeming.hatenablog.com


早速ですが、以下notebook上での処理手順

1. Sparkモジュールをマジックコマンドでインストールします

前回に比べるとめっちゃシンプル、、、

!pip install pyspark
Collecting pyspark
  Downloading pyspark-3.2.1.tar.gz (281.4 MB)
     |████████████████████████████████| 281.4 MB 32 kB/s 
Collecting py4j==0.10.9.3
  Downloading py4j-0.10.9.3-py2.py3-none-any.whl (198 kB)
     |████████████████████████████████| 198 kB 44.3 MB/s 
Building wheels for collected packages: pyspark
  Building wheel for pyspark (setup.py) ... done
  Created wheel for pyspark: filename=pyspark-3.2.1-py2.py3-none-any.whl size=281853642 sha256=2407f69057d0e045fa99a817fe2a924a927feb5dafcc8e663201e5138c1fafca
  Stored in directory: /root/.cache/pip/wheels/9f/f5/07/7cd8017084dce4e93e84e92efd1e1d5334db05f2e83bcef74f
Successfully built pyspark
Installing collected packages: py4j, pyspark
Successfully installed py4j-0.10.9.3 pyspark-3.2.1
続きを読む

Pythonで2次元の辞書に要素を追加する

表題まんまです。入れ子になっている辞書に要素を追加する方法の備忘録です。

1次元の辞書

こんな辞書があったとしまして、、、

dict_1dim = {"a":1, "b":2, "c":3}
dict_1dim
{'a': 1, 'b': 2, 'c': 3}


こんな感じで要素を追加できます。

dict_1dim["d"]=4
dict_1dim
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
続きを読む

【個人的まとめ】実存と構造

個人的な事情により、一年位前に読んだ書籍を読み返してまとめました。備忘録としてメモです。

概要

どんな本?

新書。2011年に初版刊行なので、ちょうど10年くらい前の本ですね。

どんな筆者?

三田誠広氏。芥川賞も受賞している作家さんです。翻訳や書評も。大学で文学の教授なども務めていて、アカデミックな世界の方です。

要するにどういう話?

本書では「実存主義」と「構造主義」という思考のフレームワークについて解説し、それが中世から近代、現代と時代が進む中で文学にどのように表出してきたかを論じます

続きを読む

AutoGluonでAuto ML実装(最短実装編)


ぶっちゃけ機械学習エンジニアリングにはあまり興味がない、最低限の作業でそこそこ精度が出てくれればいいと思っている身としてはAuto MLには惹かれるものがありました。で、ちょうど最近AutoGluonの解説を聞く機会があったのですが、想像よりもはるかに手軽&高精度で驚いたので、この機会にお試しで実装してみたいと思います。

今回は最短実装編と題して、まず超絶シンプル実装でAuto MLの手軽さを実感してみたいと思います。次回の記事で、もう少し実践的な使い方を色々試してみたいと思います。


AutoGluonとは

AutoGluonはAWSが提供しているOSSのAutoMLツールキットです。データの前処理からモデリング(学習&アンサンブル&ハイパラ探索)、精度評価までの流れを、ローコードで手軽に構築することができます。また、画像や自然言語処理など、非構造化データにも対応しています。

以下のリンク先の説明がわかりやすいです。

https://pages.awscloud.com/rs/112-TZM-766/images/1.AWS_AutoML_AutoGluon.pdf

続きを読む