雑記 in hibernation

頭の整理と備忘録

PySparkでfillna()

毎回忘れるPySparkでの欠損処理の書き方と注意点について、個人的な備忘録です。

1. 前提

こちら相当の準備ができていることを前提にします

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


2. PySparkの欠損補完

こんな感じの適当な欠損データがあったとします。

sdf_na = (
    sdf_input
    # 適当に欠損を作る
    .withColumn("weight", fn.when(fn.col("weight")>60, fn.lit(None)).otherwise(fn.col("weight")))
    .withColumn("height", fn.when(fn.col("height")>160, fn.lit(None)).otherwise(fn.col("height")))
    .withColumn("time", fn.when(fn.col("time")>75, fn.lit(None)).otherwise(fn.col("time")))
)
sdf_na.show()
+----+-----+---+------+------+----+
|name|class|sex|weight|height|time|
+----+-----+---+------+------+----+
| aaa|    A|  F|    45|   150|null|
| bbb|    A|  M|    50|   160|null|
| ccc|    A|  F|    55|   155|  74|
| ddd|    B|  M|  null|  null|null|
| eee|    B|  F|    51|   158|  65|
| fff|    B|  M|    40|   155|  68|
| ggg|    C|  F|  null|  null|null|
| hhh|    C|  M|  null|  null|null|
|iiii|    C|  F|    52|  null|  73|
+----+-----+---+------+------+----+
続きを読む

【あるある】数値をちゃんとソートできないと思ったら文字型になってた

タイトル以上でも以下でもありません。個人的あるあるなんですが、たまにしか引っかからない分、毎回原因に気づくまでに時間がかかるんですよね、、、、

どういうことかと言いますと、

こんな感じのデータがありまして、、、、

id payment
0 aaa 10000
1 bbb 2000
2 ccc 1500


df.show()
+---+-------+
| id|payment|
+---+-------+
|aaa|  10000|
|bbb|   2000|
|ccc|   1500|
+---+-------+


ソートします

できてないんだが。

df.sort("payment").show()
+---+-------+
| id|payment|
+---+-------+
|aaa|  10000|
|ccc|   1500|
|bbb|   2000|
+---+-------+
続きを読む

【読んだ本のメモ】シンギュラリティ:人工知能から超知能へ

輪読用の備忘録として読んだ本の内容をメモっておきます。

概要

どんな本?

人間レベルの人工知能(汎用人工知能)、そして人間を超えたレベルの知能(超知能)を実現するために考えうる道筋と、その過程にどのような技術的課題が存在するかを検討します。また、人工知能が実現された場合の社会へのインパクトや想定されるリスク、人工知能に意識は宿るのか、といった問いについても議論します。

どんな筆者?

wikiより

Murray Patrick Shanahan is a Professor of Cognitive Robotics at Imperial College London,[3] in the Department of Computing, and a senior scientist at DeepMind.[4] He researches artificial intelligence, robotics, and cognitive science.[1][5]

だそうです。

つまり、ロボット工学やCSに対してちゃんとテクニカルなバックグラウンドを持った人が書いてる本だよってことですね。

要するにどういう話?

汎用人工知能を実現するには、生体脳を模倣する方法と、強化学習の枠組みでゼロベースの知能を構築する方法があります。いずれにおいても、ひとたび汎用人工知能(人間レベルの人工知能)が実現されれば、その生物的・時空間的な制約に縛られない特性から、超知能も実現可能になると考えられます。人工知能の実現はさまざまな分野において革新をもたらしますが、同時に人工知能の意識の有無や人権の適用など、従来の社会の枠組みでは対応できない課題が発生するでしょう。また、特にゼロベースの人工知能は目的達成のためにあらゆる手段を講じうるであろう事、その場合人類の実存すら危ぶまれるであろう点を考えれば、報酬関数を適切に設計することが非常に重要であると言えます。

続きを読む

ArviZの体裁で引っかかったところメモ

ベイズモデリングMCMCの結果をArviZのトレースプロットで表示する際、体裁が狙い通りならないことがありました。解決方法を備忘録として残しておきます。

前提

以下の記事相当の処理をしている前提で、最後のトレースプロットのセル部分に関する話です。

Google ColaboratoryでPyStanをいじくる - 雑記 in hibernation

続きを読む

Google ColaboratoryでPyStanをいじくる

ベイズモデリングのお勉強で「StanとRでなんちゃらhogehoge」的な書籍のサンプルコードを実装しようとしているのですが、ここはRではなく使い慣れているPythonGoogle Colabで動かしたい。と思ってググってみたところ、ローカルで動かそうと思うと意外と面倒なStanですが、幸運なことにGoogle Colabでは既にインストール済みらしく、importして即使えるようです。

yululy.com

ってことで、Google ColabでGLMのパラメータをMCMCで推定する流れを備忘録として残しておきます。

2022/08/28 追記 importについて情報更新があります。以下をご参照ください。

toeming.hatenablog.com

続きを読む

ムスタング再生記

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

動機

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

続きを読む

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

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


1. Shapとは

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

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

www.datarobot.com


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


続きを読む