特徴量重要度(SHAP)をDataframeで取得する

SHAP を用いて shap.summary_plot() で特徴量重要度のグラフを出力できるが、定量データとして取得したい場合がある。 以下のようにすればDataFrameにできる。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import lightgbm as lgb from sklearn import datasets import shap X = train_df.drop('target', axis=1) y = train_df['target'] model = lgb.train( params={}, train_set=lgb.Dataset(X, y) ) explainer = shap.TreeExplainer(model) shap_values = explainer(X) pd.DataFrame(shap_values.values[0], columns=["feature_importance"], index=X.columns).sort_values( by="feature_importance", ascending=False) feature_importance age 0.045195 gender 0.001254 … …

December 25, 2023

Apache Airflowのstandalone環境でHTTP接続が無期限にハングする問題

概要 Mac OS環境にて airflow standalone でAirflowを立ち上げると、DAGでHTTP接続を行おうとした際に無期限にハングする。 原因 OSXのPythonのバグ 回避策 Airflowを立ち上げる際に NO_PROXY="*" をセットする 1 2 3 $ export NO_PROXY="*" $ export AIRFLOW_HOME=/path/to/airflow/home $ airflow standalone ref: https://github.com/apache/airflow/discussions/35903

December 22, 2023

Ubuntu desktop 23.04 環境構築メモ

GPUを使う開発は自作PC+Linuxに限る、ということでゲーム用Windowsと開発用Ubuntuのデュアルブートにした。 OS関係 Windowsをnvme0, Ubuntuをsata0に入れてfirst boot driveをsata0に設定、GNU GRUBでOSを選択する。 こうしておくとブートローダーを吹っ飛ばしてもsata0を外せばきれいなWindowsが起動する。(はず) ハードウェアクロックをローカルタイムにする 1 sudo hwclock -D --systohc --localtime この設定をしないとWindows側の時刻がずれる 日本語ディレクトリを英語化 1 LANG=C xdg-user-dirs-gtk-update GPU関係 GPUドライバのインストール 1 $ sudo ubuntu-drivers autoinstall CUDAセットアップ https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=deb_network 1 2 3 4 $ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb $ sudo dpkg -i cuda-keyring_1.0-1_all.deb $ sudo apt update $ sudo apt install cuda ~/.bashrc 1 2 3 ... export PATH="/usr/local/cuda/bin:$PATH" export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH" 動作確認 1 2 3 4 5 6 $ nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2023 NVIDIA Corporation Built on Mon_Apr__3_17:16:06_PDT_2023 Cuda compilation tools, release 12....

June 20, 2023

JSONLファイルからBigQueryスキーマJSONを生成する

script.sh 1 2 3 4 5 6 7 8 #!/bin/bash set -eu PROJECT_ID=myproject DATASET_NAME=temp TABLE_NAME=$(basename $1 | sed 's/\.[^\.]*$//') bq load --autodetect --source_format=NEWLINE_DELIMITED_JSON ${PROJECT_ID}:${DATASET_NAME}.${TABLE_NAME} $1 bq show --schema --format=prettyjson ${PROJECT_ID}:${DATASET_NAME}.${TABLE_NAME} > ${TABLE_NAME}.json bq rm -f -t ${PROJECT_ID}:${DATASET_NAME}.${TABLE_NAME} 1 $ ./script.sh /path/to/mydata.jsonl 以下のファイルが出力される ./mydata.json 1 2 3 4 5 6 7 8 [ { "mode": "NULLABLE", "name": "id", "type": "INTEGER" } ... ] もっといい方法ありそう

January 17, 2023

kubectl logsに任意のログを表示する

kubectl logsはPID1の標準出力を表示するため、直接書き込んでしまえばなんでも表示できる。 1 2 3 $ kubectl exec -it pod-xxx bash # echo 'show as stdin' > /proc/1/fd/1 # echo 'show as stderr' > /proc/1/fd/2 1 2 3 4 $ kubectl logs pod-xxx show as stdin show as stderr

September 8, 2021

VSCode Remote ContainerからGitHubにssh接続する

公式ドキュメントの Sharing Git credentials with your containerに色々と記載があるが、非常に簡単なソリューションがあったためメモ Mac 1 2 3 4 5 $ sudo vi ~/.ssh/config Host github.com AddKeysToAgent yes UseKeychain yes Windows 1 2 3 > Set-Service ssh-agent -StartupType Automatic > Start-Service ssh-agent > ssh-add $HOME/.ssh/id_rsa WSL2 1 sudo apt install keychain ~/.bashrc 1 2 keychain -q --nogui $HOME/.ssh/id_rsa source $HOME/.keychain/$(hostname)-sh

September 2, 2021

KubernetesのCronJobからJobを手動作成する

1 kubectl create job 作成するJob名 --from=cronjob/CronJob名 https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#-em-job-em-

November 30, 2020

GCPでカスタムロールをサービスアカウントにbindingしようとしてエラーになる場合

1 2 3 4 $ gcloud projects add-iam-policy-binding myproject --member=serviceAccount:myserviceaccount@myproject.iam.gserviceaccount.com --role='roles/mycustomrole' ERROR: Policy modification failed. For a binding with condition, run "gcloud alpha iam policies lint-condition" to identify issues in condition. ERROR: (gcloud.projects.add-iam-policy-binding) INVALID_ARGUMENT: Role roles/mycustomrole is not supported for this resource. --role の指定を roles/mycustomrole ではなく projects/myproject/roles/mycustomroleにすればOK 1 2 3 $ gcloud projects add-iam-policy-binding myproject --member=serviceAccount:myserviceaccuont@myproject.iam.gserviceaccount.com --role='projects/myproject/roles/mycustomrole' Updated IAM policy for project [myproject].

March 3, 2020

BigQueryで重複レコードを削除するSQL

オペミスやat-least-onceセマンティクスによってINSERTされてしまった重複レコードを消すSQLです。 完全に同一な重複レコードを消す やる事は 重複レコードのうち最古のものを一時テーブルに退避 重複レコードを全て削除 一時テーブルから再度INSERT です。 Schema 1 2 3 4 5 6 7 8 9 10 11 12 [ { "mode": "REQUIRED", "name": "id", "type": "INTEGER" }, { "mode": "NULLABLE", "name": "value", "type": "STRING" } ] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 CREATE TABLE project_name....

February 5, 2020

CircleCIでDeploy Keyを用いて別のprivate repoをcloneする

ssh-keygenコマンドで公開鍵/秘密鍵を生成する 公開鍵(id_rsa.pub)をGitHubのDeploy keyに登録する 秘密鍵(id_rsa)をCircleCIに登録する 3.のfingerprintを↓にコピー 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 version: 2.1 jobs: do-something-with-another-repository: docker: - image: circleci/golang:1.11-stretch steps: - add_ssh_keys: fingerprints: - "aa:bb:cc:dd:ee:ff:gg:hh:ii:jj:kk:ll:mm:nn:oo:pp" - run: GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no" git clone git@github.com:aaaanwz/another-repository.git - run: echo 'Do something' workflows: test: jobs: - do-something-with-another-repository

November 28, 2019