環境システム株式会社公式HP

〒660-0083 兵庫県尼崎市道意町7-1-3
尼崎リサーチ・インキュベーションセンター512

アイコン06-6657-5130

アイコンsales@hydrolab.co.jp

お問い合わせ

アイコン06-6657-5130

アイコンsales@hydrolab.co.jp

お問い合わせ

蛇使いな彼女BLOG

【第88回】 Contour境界値描画におけるプーリング操作の応用について~#1.概要説明

2023.07.07

皆さんこんにちは。早いもので2023年も折り返し地点ですね!
今日はPythonで高等線描画を行う際のコツをご紹介しようと思います。

前回ブログ本文に「機械学習ライブラリを使用しなくても、この確率分布を応用して非線形なデータを分類出来るか試してみたくてコードを書いてみましたが、モトハシの計算定義が間違っているのか、センサーデータでは上手く境界線が引けないという結果でした。」と書いていたと思いますがこの内容について詳しくお話ししていこうと思います。
まずは具体的な例をあげてみましょう。

テンソルフローではレイヤーの一部のような扱いになっているプーリングですが、線形分離や確率値がうまく機能しないコンタープロットに関して有効な方法では?と思い、今回メソッドを自作してみました。
元の配列⇒プーリング値への変換工程は次回説明します。
今回はこれら二つの配列をmatplotlib のContourで「1」を境界値に設定します。
すると以下のように境界が描画されます。
(配列数と軸目盛りの数が合っていないので下側に余白が出来ています。)

次に、配列の0の部分を別の数字に置き換えてみます。

期待する境界範囲は≦1なので、先ほどとは境界範囲が異なるはずです。
また最大値プーリング処理を行った配列は1を含まないので境界線無しかと思いきや、どうでしょう。

右の図でお分かりのようにContourは厳密にターゲット「1」の箇所に高等線を引いているのでは無く、制約の緩和機能によって、与えられた配列の最小値~最大の範囲で最適な座標に線を引くようです。
ここでは「2」に置き変わってますね。
つまり、配列にターゲットとなるレベル値以上の値のみ分布がしているときは、境界が上手く動作しないと言うことになります。
この点に関してはあらかじめ使用するデータの範囲を確認しておく事が必要です。
一方、左の図ではブロックが積み上がったような不規則な範囲について、斜めに空間補間がされています。
2次元データのマッピングに関しては末尾の出典で掲載してる見延先生のwebページが参考になったので、詳しくはそちらを確認して頂けたらと思います。

さて、Contourの挙動に着目して頂きましたが、実際の水質解析で高等線を引くとどのように可視化できるのでしょうか?
まず、とある気泡循環稼働地点の7月の水質鉛直データから水温項目25℃地点を境界としてマッピングした物です。
X軸は水深(m)、Y軸は時系列とし、ピンクの線は25℃の境界を表します。

物理的な力を加えていない、平常時の安定成層状態では、躍層の影響から深度方向へ向かうに従って水温が段階的に変化しますが、使用データは気泡循環稼働時の鉛直混合状態にあるため、当然外気温や流入の影響によってその境界範囲は日ごとに変動します。
境界分離に関しては視覚的に上手く作動していると言えます。

次に、同じ7月のデータから勾配を取って0.02(黒),0.2(緑),0.5(ピンク)℃の境界を描画してみます。
ラベルの表記が分からない程、点や線が無数に散らばっており、どこが正確な境界なのか分かりません。

このような輪郭がぼんやりしているデータを対象に、初めは確率分布を使って、各深度層で0.02~0.5℃が発生する確率の最も高い層を境界として分離が出来るか試してみましたが、これに関しては上手くいきませんでした。
次の手段として、プーリングを利用した境界分離を行いました。
これについてはなかなか上手くいったので、次回詳しくご紹介したいと思います。


【出典 (参考文献)】

見延 庄士郎. “pcolor、pcolorfast、pcolormesh “. “北海道大学海洋物理・気候研究室による Python のヒントとメモ“. 2018/09/19 19:49,
https://sites.google.com/site/pythontipsmemo/kuo-zhangmojuru/matplotlib/pyplot/pcolor-pcolorfast-pcolormesh ,(参照2023.06.06閲覧)

pagetop