強弱と高低

Python3をメインに

matplotlibでROC曲線を描画する(3. ROC描画編)

ROC曲線をpython3で描画したいと思ったときに,用意すればいいもの,コード,を説明する.今回は何をimport し, これの入力はなにか,を説明する.

1つの記事を大きくするするのは可読性が低くなるので分割する.

全体の流れ(今回は1)

  1. ROCやAUCを描画・計算するためのライブラリをimport する
  2. ROCを描画できるようにデータを用意する
  3. matplotlibでROC曲線を描画する

1,2,3のサンプルコードは次の通り

github.com

イメージは次の通り

from sklearn.metrics import roc_curve <--(1で説明済)
from sklearn.metrics import auc <--(1で説明済)

y_true = [用意してあげる]  <--(2で説明済)
y_score = [用意してあげる] <--(2で説明済)

fpr, tpr, th = roc_curve(y_true, y_score) <--(1で説明済)
auc_value = auc(fpr, tpr) <--(1で説明済)

描画()<--(今回はここを説明する)

コード

github.com

詳細はコードの中に書きました

こういう共有方法の方がコピーしやすいし, こちらも作成しやすいし, Win-winってやつではないでしょうか?


なぜこのエントリを書いたかというと, 自分が欲しいと思うエントリがなかったからです.

ROC Pythonで検索したときにmatplotlibによるplotの部分は記述されているものの, 何を引数として与えたらいいのか, roc_curveに入力するarrayを作るところが一番むずかしい,,,,という問題点を解決するのが最も役に立つROC曲線を描くエントリだと思うわけです.

matplotlibでROC曲線を描画する(2. データ準備編)

ROC曲線をpython3で描画したいと思ったときに,用意すればいいもの,コード,を説明する.今回は何をimport し, これの入力はなにか,を説明する.

1つの記事を大きくするするのは可読性が低くなるので分割する.

全体の流れ(今回は1)

  1. ROCやAUCを描画・計算するためのライブラリをimport する
  2. ROCを描画できるようにデータを用意する
  3. matplotlibでROC曲線を描画する

1,2のサンプルコードは次の通り

github.com

イメージは次の通り

from sklearn.metrics import roc_curve <--(1で説明済)
from sklearn.metrics import auc <--(1で説明済)

y_true = [用意してあげる]  <--(今回はここを説明する)
y_score = [用意してあげる] <--(今回はここを説明する)

fpr, tpr, th = roc_curve(y_true, y_score) <--(1で説明済)
auc_value = auc(fpr, tpr) <--(1で説明済)

(描画:3で説明する)

用意するデータとは

y_trueとy_scoreはそれぞれ,次に例を挙げる.

y_true y_score
0 1.0
0 1.5
0 1.3
.. ...
1 1.6
1 1.9
1 2.2
1 0.3

これを見てわかるように, y_trueはラベルであり, y_score は何らかのスコアを表している. y_scoreは対数尤度であったり, 再構成誤差であったり,確率であったりと様々だ.

用意するデータの形

y_true, y_scoreはそれぞれドキュメントで

array, shape = [n_samples]

と型と大きさを教えてくれている.ここでは, array型であり, 大きさは[サンプル数]分用意してくれ,とのこと.

前の例だと,行数を長さn_sampleをすると,

y_true y_score
0 1.0
0 1.5
0 1.3
.. ...
1 1.6
1 1.9
1 2.2
1 0.3

y_true.shape  = (n_sample, )   
y_score.shape = (n_sample, )

となる. ゴールとなるのは,

y_true = np.array([ ...., ..., ...., ])
y_score = np.array([..., ..., ...,   )

サンプルコードをみていただけるとわかると思うが,

ROCで評価しようとするときに, 最初からy_trueの形で得られるわけではない. ラベルごとに分けて計算しているケースが多いだろう.

zero_samples = np.array((.......))
one_samples = np.array((.......))

def calc_score(i_data);
    return hoge_scoring(data)

_y_zero_score = np.asarray([calc_score(i) for i in zero_samples])
_y_one_score = np.asarray([calc_score(i) for i in one_samples])

こんな感じでラベル毎にスコアを計算することになると思う. これを連結しなければy_scoreになりえないので, 連結作業を行う. ここが一番こけやすい.

np.concatenate([_y_zero_score, _y_one_score], axis=0)

np.concatenate()を使って,連結する.

np.concatenate([連結したいもの, 連結したいもの, 連結したいもの, ....], axis=[0か1]) のように使う. これを使って,y_scoreを用意しよう.

次はy_trueはラベルの情報で, 最初に用意していない場合はある. そのときは,

_zero = np.zeros(_y_zero_score.shape[0])
_one = np.ones(_y_one_score.shape[0])

を使ってあげる.これを,np.concatenateを使って連結する.結合するラベルの順番(ゼロ,イチの順番で結合するのか, イチ,ゼロの順番で結合するのか)に注意する.

以上により, データ準備が終わった.


はてぶにコードをベタ打ちして書くより,jupyter notebookにたくさん書くほうがよさそうに思えてきた.実行結果が見える形のほうがわかりやすいだろうし.

matplotlibでROC曲線を描画する(1. import編)

ROC曲線をpython3で描画したいと思ったときに,用意すればいいもの,コード,を説明する.今回は何をimport し, これの入力はなにか,を説明する.

1つの記事を大きくするするのは可読性が低くなるので分割する.

全体の流れ(今回は1)

  1. ROCやAUCを描画・計算するためのライブラリをimport する
  2. ROCを描画できるようにデータを用意する
  3. matplotlibでROC曲線を描画する

コードサンプルは次の通り

github.com

処理のイメージは次の通り

from sklearn.metrics import roc_curve
from sklearn.metrics import auc

y_true = [用意してあげる] (ここは2で説明する)
y_score = [用意してあげる] (ここは2で説明する)

fpr, tpr, th = roc_curve(y_true, y_score)
auc_value = auc(fpr, tpr)

(描画:3で説明する)

ROC曲線描画・AUC計算に必要なライブラリをimport する

2つのライブラリをimport する

from sklearn.metrics import roc_curve
from sklearn.metrics import auc

ROC曲線を描画するライブラリのページを見ると,

sklearn.metrics.roc_curve(y_true, y_score, pos_label=None, sample_weight=None, drop_intermediate=True)

とある.重要なのは, y_truey_score の2つで, ドキュメントには次のような説明がある.

y_true : array, shape = [n_samples]

  True binary labels in range {0, 1} or {-1, 1}. If labels are not binary, pos_label should be explicitly given.

y_score : array, shape = [n_samples]

  Target scores, can either be probability estimates of the positive class, confidence values, or non-thresholded measure of decisions (as returned by “decision_function” on some classifiers).

つまり, y_true は(0,1)の二値ラベル, もしくは(-1, 1)のarrayである.
y_scorey_true に対応した何らかのスコア.これは連続値でOK.

データ準備編で詳細は述べるが, イメージとしては

y_true y_score
0 1.0
0 1.5
0 1.3
.. ...
1 1.6
1 1.9
1 2.2
1 0.3

この関数の返り値は

fpr : array, shape = [>2] <-- False Positive Rate

tpr : array, shape = [>2] <-- True Positive Rate

thresholds : array, shape = [n_thresholds] <-- 閾値

次のauc計算は, ドキュメントのページによると

sklearn.metrics.auc(x, y, reorder=False)

とあり, x,yはそれぞれ

x : array, shape = [n]

    x coordinates.

y : array, shape = [n]

    y coordinates.

これは難しくなく, 何らかの2つの行列をいれればいいんだな~ということがわかる.ROC曲線を描画するときは, 上で説明したroc_curve の返り値をそれぞれxに False positive rate fprを, yにTrue positive rate tprを入力とする.

この関数の返り値は,

Returns: 
auc : float <-- float型のAUC値が1つだけ

float型のAUC値が1つだけ返ってくる. 1つのROC曲線に対して1つのAUC値が返ってくる.

今回のことからわかること

y_true, y_score を用意してあげて,import した roc_curve の入力とする. すると, fpr, tprが返ってくる.

このfpr, tprを入力として, import したauc()にいれてやるとauc値が出てくる.

流れを再掲する.

from sklearn.metrics import roc_curve
from sklearn.metrics import auc

y_true = [用意してあげる]
y_score = [用意してあげる]

fpr, tpr, th = roc_curve(y_true, y_score)
auc_value = auc(fpr, tpr)

必要なデータを用意すれば,ROC曲線を描画するための素となるfpr, tpr, aucを計算することは容易だ.

銀行振り込み先を間違ってしまったときの組戻し 体験

発端

学会費納入をしようと銀行からゆうちょ銀行にネットバンク経由で振り込もうとしたら,口座番号が間違っていた.当座とか店番号は合っていたが,肝心の口座番号のうち1つの数字が異なっていた.間違った口座番号が誰かの口座番号だったことに驚いた.

間違いから1日経過

振込先を間違えたときに取り消すことを,組戻しと呼ぶというのをGoogle検索により知った.そしてネットバンクの「組戻し」はこちら,という電話にかけた.

電話では, - いつの振込か - 誰にあてた振込か - それは間違いなのか を聞かれた.そして,最後に組戻し手数料として,864円とられるが同意するか?と聞かれ承諾した.

その後,組戻しを行うには双方での合意がなければいけないということを説明される.つまり,間違って振り込まれた側がお金を返します,と同意する必要がある.いや,返さないと言われた民事訴訟で解決してくださいと.そのため,今回手数料を口座から引き落としますが,これは返金を確約するものではない,と口酸っぱく言われた.

承諾して電話は終わった.

間違いから21日経過

突然電話がかかってくる.組戻しを依頼する先の金融機関から,特例として双方の合意が無くても,組戻しができるかもしれないと上司にかけあってみますと連絡がくる.感謝の気持ちでいっぱいだ.

それに伴い,証明とする書類を用意してほしいと言われる.郵送するから,記入して返送してくれとのこと.

用意するした書類

  • 正しい振込先が記載されている文書(請求書)
  • 組戻し申請書(間違った振込先や正しい振込先,日時)
  • 正しい振込先に振り込んだ証明書(こちらはできれば欲しいと言われたので,ちゃんと振り込んだ)
  • 身分証明書(保険証の写し)

これらを用意し, 封筒に入っていた返信用封筒に入れて投函.

間違いから60日経過

未だ返答は無い.なにかあったらまたアップデートしたいと思う.

オンライン英会話を始めた

国際会議での辛酸を忘れないうちに,ということでオンライン英会話を始めました.

なぜオンライン

マンツーマンの英会話スクールは目が飛び出るくらいに高額だった.効果もあるのだろうが,次の比較項目と私情(こちらが大きい?)によりオンラインを選択.

比較項目 オンライン マンツーマン
価格 安い 高い
扱うレベル 子供からビジネスマンまで 子供からビジネスマンまで
通学時間 かからない スクールまで
教材 安っぽい 充実

先に述べた私情は,なるべく毎日話す時間が欲しい・朝早く(7時過ぎに出て)から夜遅く(はやくても22時過ぎ帰宅)まで平日は時間がかかる. であったので,通学時間がかかるのは致命的だし,英会話するなら出勤前か帰宅後なのでスクールに通うのが億劫だった.

良さを述べる

実際に始めてみて,講師の良さを実感した.講師は主にフィリピンの人で,英語はやはり上手だった.問題点は,講師の質の幅が大きいことだろうか.

でも,いくつかレッスンを繰り返していけば,自分のよく予約する時間帯にレッスンを開講していて且つ教えるのが上手い先生を見つけることができるだろう.そのため,始めのうちは毎回講師が違ってもよいと思う.そこから教え方が合う人や話し方が合う人・声が好きな人を探していけば良い.

英語早口言葉

発音の練習として,いくつか紹介してもらい,毎日1つやってくること,と言われている.できが悪いと,もう一度やってきて,と言われるのでちゃんとやらなきゃと思わされる.例えば,次のようなもの.

https://i1.wp.com/appnaadda.com/wp-content/uploads/2016/01/appnaadda.jpg

https://image.slidesharecdn.com/tonguetwisterswithsounds-150419204116-conversion-gate01/95/tongue-twisters-with-sounds-19-638.jpg?cb=1430066069

迷っているなら今すぐ英会話を始めよう

後々で必要になるのが分かっているひと,できるようになりたいなとちょっとでも思っている人は今すぐにでもオンライン英会話を始めることを勧めます.スクールより確実にハードルは低いですし,合わない講師はもう受講しなければよいし,そんなに高額でもない(6000円弱)ので.

国際会議で口頭発表をする人のために

確認すべきこと

  1. 発表する国際会議の現地時間
  2. 発表時間と質問時間
  3. セッション名

何時から口頭発表するのかや,発表していいのは何分間か? という情報が無いことにはスライドは作りようがありません. あとは質問時間.大体の国際会議は発表+Q&Aで25分とかで指定されていますが, 中にはQAは最低5分取れと指示があったりもします.

あとはセッション名も確認しておきましょう. セッション名と自分の発表タイトルがどこで繋がっているかにより, 聴衆は変わってきます.QAが出ず座長から質問されることの無いよう聴衆が聞きたいものを想定します.

スライドやスクリプトは何を参考にするか

スライド

スライドは好みの問題が大きいため,イキリサイトみたいにあーだーこーだーとは言いません. スライド作成術みたいな書籍でも参考にすれば良いと思います. ただし,1つ言うとしたら,割と字は入れて良いと思います. 字を少なくするのが時流ですが,我々は英語が母国語ではないので 思ったことを口にしたときに英語がとっさに出てきにくいと思います. スクリプトを読み上げる発表だけは避けるべきですから,スライドを見てポインターで指示しながら 自然とスライドを見てスクリプトが思い出せる程度には字を入れてよいはずです. スライドに書かない部分としては,

  • 間投詞 All right,ok, well... とか
  • I'd like talk about ~,In the next slide, I'd touch on ~ とかの表現

スクリプトを全部スライドに書いていて,肝心の図が小さすぎて見えないというアジア人も 観測したことがあります.あと,分野によっては字だらけのスライドでOK!というとこもあるようですね. 慣例に習うもよし,フロンティアを拓くもよしで,最後は指導教員と相談でしょうかね.

スクリプト

スクリプトは,暗記します.発表の場で読み上げるのは推奨されていませんし, 日本人以外やっているのを見たことないレベルとも言われます.上述した通りですが,一部矛盾に思われるかもしれません.暗記するけども,暗記しないと終わるようなスライドは作らなくて良いです.例えば,全部写真とかのああいうカッコいいやつです.覚えることがプレッシャーになってしまうので,スライドの中にキーワードやセンテンスを入れ込んでしまえば良いと安心しましょう. 最もプレゼンテーションの中で言いたいところは確実に滑らかに言えるようにしましょう.

肝心のスクリプトは,書籍とネイティブスピーカーに頼るのが一番だと思います. Web記事もあるにはありますが,ネイティブチェックが入っているちゃんとしたとこ以外は, 英語表現の参考には到底なりえないと思います. 自分が使った書籍は,「国際学会 English スピーキング・エクササイズ 口演・発表・応答」(ISBN-13: 978-4263433393) というものです. Amazon CAPTCHA 使える表現が結構掲載されているので使えました.CDも使ってリスニングの助けにもなりました. 他にも何冊が読みましたが,一番良かったこの書籍を紹介しておきます.


初めて海外に行く人向けには,

  1. パスポートを取得すること
  2. 往復の飛行機を予約すること

のここまでを出発の1ヶ月前までに終えられるような時間感覚でいたほうがいいですよ,と言っておきます.

ハゲタカ出版社チェックはしておきましょう

ハゲタカ出版社

金を出してくれたら,論文誌に掲載してやるよという出版社. 論文誌や国際会議に優劣を付けてはいけないという善意に漬け込んだ悪い商売をしているようで, 何も知らない人からみたら,論文誌1件は1件なのだ. 研究者界隈から見たら,嘲笑の的ではあるのだが.

どうやってチェックするか

現在はここでチェックするのが一番.2011年くらいからリストを更新し続けている.

beallslist.weebly.com

少しサンプルを見てみる

WASET (リンクは貼らない)

有名なハゲタカ出版社のWASETです. 見てください,この分野の網羅率. ありとあらゆる国際会議を開催(笑)しています. 分野を絞ってしまっては,稼ぎが落ちてしまうことからこうせざるを得ないのでしょう. 見るからに怪しい... f:id:Accent:20180522125728p:plain

iaster (リンクは貼らない)

これもまたすごいです.分野という分野を網羅しているのではないでしょうか. それになんだか古めかしいUIも香ばしいですね.どんな分野でもOK,みたいなのは怪しいですね. しかし,ここは Impact Factor(IF)が4.0を超えた雑誌として掲載されています. IFが偽装されたらそれこそ何が悪いのか決めようがないです. f:id:Accent:20180522134452p:plain

試しにwaset 賞 -wasteで検索してみる

-wasteは検索の都合上の問題で,Googleがスペルミスかな?と気を利かせてくれていたので.

学生の頃から情報系で論文誌3ヶ月に1本とかやってのけていた人. WASETは箔付けに駆け込み的に通したんじゃないでしょうかね. 服部 峻(室蘭工業大学)

国際会議をWASETで稼ぐ. 藤田 素弘 - 研究者 - researchmap

WASETで座長とか色々と ICCSP 2011 in Phuket

科研費の成果としてWASET https://kaken.nii.ac.jp/file/KAKENHI-PROJECT-23593135/23593135seika.pdf

自信満々のWASET http://home.hiroshima-u.ac.jp/aerosol/event.html

かっこいい www.yamanashi.ac.jp

WASETの賞も1件に数えられるんだよな

https://www.hosei.ac.jp/documents/gaiyo/johokokai/kyoiku/kenkyu/2_97.pdf

福岡工業大学|研究者情報|

文献を列挙しているところにWASETがあったら拾ってきたが,他に挙げた文献がハゲタカ出版かは確認していない.

科学をダメにするハゲタカ出版社

件数稼ぎが,常勤職を手に入れるためにあまりにも必要になってしまった今,不当に稼いだ方が 真剣にやって研究成果が少ないよりもバカを見ない....のか?

ちゃんと研究やってきた人が報われない世界になるのだけは避けなければいけないでしょう.

学生でもハゲタカ出版社に出して賞もらった方が,奨学金免除になりやすい,なんてなったらもうお終いです. ただでさえ,情処全国大会とかEIC全国大会は賞のバラマキだというのに.