2020年1月29日水曜日

pandas

1日 pandas を触っていました。

データラングリング。近年こう呼ばれているそうです。
今回は機械学習ではなくデータ分析です。以前は EXCEL+VBA で行っていましたが、最近は Python。EXCEL には大きすぎるデータも pandas 一文で読めます。強力ですね。

pandas では EXCELよりも時系列データを扱いやすいと感じています。四半期や曜日で集計したり、移動平均のように起点日を動かしながら過去数日で集計といった処理も可能。多くの機能があり、チートシートも出されています。https://pandas.pydata.org/Pandas_Cheat_Sheet.pdf

できたデータを csv や EXCEL のブックにまとめて保存できるので、Python を利用されていない他の方ともデータを共有できます。重宝しています。

他のライブラリも触っていますので、その「作法」に戸惑うこともあります。が、手放せないツールとなりました。
これからもお世話になりましょう。

*****************************************
20200215
基本操作をまとめ直しました。
https://phreeqc.blogspot.com/2020/02/python3-pandas.html

2020年1月27日月曜日

流出量の扱い

以前、砂防分野の方と話していて、流出量にかかわる時空間の考え方に(面白い)違和感を覚えたことがありました。

彼らはタンクモデル等で洪水流出を計算しています。そのため、物理モデルとしての時間を取り扱う必要性は低いようです。いえ、時間を扱ってはいるのですが、数時間といったオーダーであり、地下水が浸透し数日、数か月、数年かけて流出するといった循環の一部を概念モデルとして取り扱っていません。基本的に対象は洪水時であり、年間を通じた流出量ではありません。

それに起因してか、地下水に年代があることを御存知なかったり、流域貯留量が表流水と地下水に分かれることをあえて意識されないようです。地下水は水頭に比例し即時流出するといったような簡略化したイメージをお持ちのの方もいらっしゃるようでした。

また、場所も「ある地点」のみを対象としているため、FEM のメッシュのようにタンクモデルが水平にいくつも並ぶような概念モデルではありません。空間的にも非常に簡略化されているため、物理モデルとのリンクが切れています。時間的・空間的に非定常な流出という概念までは持ち込まないようです。

簡易モデルで問題を解決できるのですから、それで良いと思います。
が、それに慣れきっている状態はダメ。他の問題に対処できないか、誤って解釈してしまいます。
それは私も同じこと。いろいろな分野の方と話をすると、異なる考え方に触れることができます。面白いだけでなく、気を付けておくべき事項でしょう。


2020年1月26日日曜日

Ipyvolume & plotly

3次元可視化を Python でできないか?

計算の流れの中で、データ分布を可視化・確認したいタイミングは多々あります。
数値計算などでは、可視化を専用ソフト(EVSなど)に頼ることがあります。が、計算を python でするなら可視化部分も python でこなしているユーザーも多いだろう、というかデータを保存して他のソフトに投げなくても Jupyter 内の流れで(メモリ上で)インタラクティブに確認するのが自然な流れだろうという推測・期待です。

3次元可視化自体は matplotlib でも可能ですが、グリグリ回すと反応が鈍い。できれば、ストレスなくグリグリ回せる、XYZVの4次元目を3次元空間でクリギング補間できるなどの機能が欲しいところです。

で、探してみました。
現時点では、Ipyvolume 0.6.0 と plotly 4.5.0 がスムーズなグリグリに該当。 残念ながら両方とも補間機能はナシでした(以下、Scipy で線形補間しグリッドデータ化したものを読みました)。
https://ipyvolume.readthedocs.io/en/latest/
https://plot.ly/python/

Ipyvolume はVolume の並び、表現が独特。慣れれば使えそうです。
plotly は 散布図、Volume 共に xyzv で指定できるため使いやすい。が、現時点で両者の重ね合わせ方が不明。



結局、plotly+matplotlib の併用で落ち着きました。必要に応じ他のソフトに投げるとしても、途中の確認では手間を省けそうです。
1年たてば、期待する機能がすべて実装されるかな。されたらいいな。

2020年1月25日土曜日

Windows コマンド

大量のファイルを扱うようになってから、それらの整理に迫られる場面が度々出てきました。

例えば、40万ファイルの中から、リストに該当する数千データのみ削除したい、数千ファイルをリネームしたい、フォルダ内のファイルをリストとして出力したいなど。

これ、過去に逆戻りするようですが、DOS Windows コマンドやバッチファイルが有効です。コピペ用に3つ記載しておきましょう。


1. フォルダ内のファイルをリストとしてクリップボードにコピー(Power Shell 不可)。

dir /B フォルダパス | clip

2. リネーム→EXCEL等で整理してバッチファイル化

copy 変更前ファイル名 変更後ファイル名

3.削除→〃

del ファイル名


2020年1月24日金曜日

高次元の表示 その2

機械学習での高次元境界を、2次元で見たい希望は多くあるようです。

例えば、コチラとか、
https://stackoverflow.com/questions/37718347/plotting-decision-boundary-for-high-dimension-data
コチラ。
https://urusulambda.wordpress.com/2018/05/19/sklearn%

下の方の考え方は容易なのですが、PCA など高次元を投げつけた機械学習モデルとは異なる手法で縮約するため、学習で重視した特徴量と異なる特徴量を主成分に近いとみなす可能性があります。結果、使えない図になる可能性があります(実際、手持ちのデータではダメでした)。同じバイアスがかかるなら最初から圧縮し、2次元データに対して機械学習をかける方が素直でしょうか。

両方で紹介されているのはコレ。
https://github.com/tmadl/highdimensional-decision-boundary-plot
実質は下の方と同じようなことなのですが複雑。超球面上で確率0.5を探すことも使われているようですが、このような発想はなかったですね。ま、高次元ですから超球面に行きついたのでしょう。
試したところ実装自体は容易で、計算時間もそれほどかかりませんでした。が、結果があまりきれいではありません。いえ、綺麗な境界線になると思う方が誤りなのでしょう。元が高次元なのですから。

3次元になると一気に頭がついて行かなくなり、4次元になると想像すら難しい。ですが、数字での表示や計算は可能。何とかついて行けば、そのうち「見える」ようになるかしら?期待しながらついて行きましょう。

2020年1月20日月曜日

高次元の表示

高次元ベクトルを2次元に可視化する方法を思案していました。

通常なら PCA や t-SNE で次元圧縮からの 2D 表示となります。が、圧縮せずに射影し、かつ区別がつくような手法がないかと。

探しましたが、ないですね。
いえ、プロットするだけならあるのですが 、簡易な超立方体すら認識し難い。高次元かつ数十万のデータになると、2Dでは為す術もないでしょう。
https://www.youtube.com/watch?v=ccws454YiVM
https://www.youtube.com/watch?v=Q_B5GpsbSQw

1次元か2次元で順番に分布を図示するしかなさそうです。人の認識能力優先であれば、その程度に抑えておくのが妥当なのでしょう。

2020年1月19日日曜日

Hydrochemical Evolution in Gabbro

結晶質岩における Hydrochemical evolution を扱った報告が目に留まりました。
斑レイ岩はレアな題材。惹かれて読み始めました。

Christos Christofi et al.
Hydrochemical evolution of groundwater in gabbro of the Troodos Fractured Aquifer.

残念ながら浸透流を考慮した非平衡計算ではなく反応の平衡のみでした。が、このような簡易な仮定・モデル化で地下水の進展を扱った例として参考になりました。

雨+gas(ssolution1)

不飽和帯で鉱物と反応(過飽和:solution2)
      
沈殿(solution3)あるいは沈殿する暇もなく飽和帯へ(closed:solution4)

closed system で鉱物に飽和・沈殿(solution5)


というよりも、感心したのは反応計算以外の点。
基本なのですが、国内の地下水を扱う文献ではあまり書かれていません。
For the purpose of this study, additional quality assurance in groundwater was addressed by utilizing only full ionic samples with equal to or better than 5% ionic balance.
知らなかった知識も。数100mといった深部の結晶質岩を最近扱っていません。
 Porosity and permeability are known to decrease with depth and the so called depth factor has been estimated by a number of researchers. Achtziger-Zupancic et al. (2017) found specific storage, which is directly related to porosity, to decrease in crystalline rocks by a slope of -1.0, at the first 1000 m below surface.
海外では継続的に PHREEQC を利用した文献を見ます。残念ながらなんとか理解できるレベルです。一方、国内では20年前と何も変化しておらず、本当に残念なままのレベル。
海外でも国内でも良いのですが、ついていけない速度で進化した文献が出始めたら面白いと思うでしょうね。

2020年1月12日日曜日

Optuna

図書を読んでいると「ベイズ最適化によるパラメータ探索」に遭遇。

コンペでもパラメータ調整に使われているようです。ま、grid search による総当たりよりは効率的であって欲しいと期待し使いたくなりますよね。

で、試行。
モデルはSVC, LightGBM の2種。フレームワークは Optuna。
https://preferred.jp/ja/projects/optuna/

非力なマシンで動かしていたからか、SVC は完走せず。時間のかかるモデルでも少ない計算回数で収束することに期待していたのですが。残念。

LightGBM は問題なく完走。結果はそれなり。うーん。
grid search で扱っていた探索範囲よりも広げて始めたのですが、それよりも結果が良くなりません。局所解にはまるのでしょうか。探索回数を200回から300回に上げても変化なし。うーん。

最終的にはgrid search と同程度の範囲にしないとスコアは上がりませんでした。不均衡データを重みだけで区分しようとしていましたので、評価指標の変動を掴みづらかったのかもしれません。やはり、前処理・特徴量選択が不十分なデータでは、良いツールでも効果を発揮し難いのでしょう。基本が大事ということを、あらためて認識させられました。

今回は grid search より格段に良いという結果には至りませんでした。
次回、別のデータで試してみましょう。

********************************
20200119追記
SVC の打ち切り回数を入れて時間制限をかけました。
が、Oputuna での再現性を担保するため、パラレルを中止。うーん。
How can I obtain reproducible optimization results?
https://optuna.readthedocs.io/en/stable/faq.html#how-can-i-obtain-reproducible-optimization-results

2020年1月10日金曜日

KDE plot >1 ?

Q: カーネル密度推定で正規化したのに、なぜ 確率密度(Y軸)が1を超えるのか?

A: X軸の幅が非常に小さいからです。
(例えば、Y軸10*X軸の範囲0.1=面積1)

納得。

2020年1月4日土曜日

機械学習 メモ

技術評論社「Kaggleで勝つデータ分析の技術」を読みました。

一通り押さえていた内容でしたが、知識止まり。Kaggle に参加して勝てるほどの実力や経験はありません。説明されているテクニック等が既に血肉となっている方々に傍にいてほしいものです。

以下、気になった箇所のメモです。
*****************************************
特徴量作成(時系列データ)
・ラグ特徴量
・曜日
・時間帯
・期間:注文間隔最大-最後の注文からの経過時間(kaggle Instacart Market Basket Analysis)

・緯度経度→binning→文字列として連結→target encording
・GBDT:特徴量の加減はモデルが扱える, 乗除は追加する必要あり

対数
・log(x+1):np.log1p(x):0の取り扱い
・Box-Cox, Yeo-Johnson:負値の取り扱い

次元削減
・UMAP

モデル
・初手:GBDT
・次に検討:NN、線形モデル(アンサンブルの一つや、スタッキングの最終層)
・多様性:K-Neighbor、決定木ベース
 (SVMなし)

モデル評価
・時系列データのバリデーション手法
・学習データとテストデータの分布が異なる:adversarial validation

モデルチューニング
・パラメータチューニング(xgboost の具体的なチューニング方法)
・特徴量選択と重要度