ぴよねろ@機械学習

機械学習、他LalavelやらPythonやら

決定木の結果を可視化する際にgraphvizがうまくいかない件

東京大学のデータサイエンティスト育成講座」

という本で機械学習について学習中ですが詰まった個所を忘備録として残します。

結論

結論から言うとpipでインストールされるgraphvizはラッパー

ハマリポイント①

import pydotplus
from sklearn import tree
from sklearn.externals.six import StringIO
from IPython.display import Image

dot_data = StringIO()
tree.export_graphviz(model, out_file=dot_data)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
Image(graph.create_png())


以下のエラーが出る

    ModuleNotFoundErrorTraceback (most recent call last)
    
    <ipython-input-27-6ce788850e43> in <module>
          1 import pydotplus
          2 from sklearn import tree
    ----> 3 from sklearn.externals.six import StringIO
          4 from IPython.display import Image
          5 


    ModuleNotFoundError: No module named 'sklearn.externals.six'

対応

sklearn.externals.sixはversion0.23から削除されているらしい。
代わりに以下でいけるようだ。

import pydotplus
from sklearn import tree
from six import StringIO
from IPython.display import Image

dot_data = StringIO()
tree.export_graphviz(model, out_file=dot_data)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
Image(graph.create_png())

ハマリポイント②

次は

pydotplus.graphviz.InvocationException: GraphViz's executables not found

と怒られる。
事前に

pip install graphviz

は済ませておいたのだが、pipでインストールされるのはラッパーに過ぎないらしい。

対応

graphviz本体をインストールしておく必要があるらしい。

apt-get update
apt-get install graphviz

結果

これでグラフが出力される

f:id:parusuteng:20210228214315p:plain
決定木

Vagrant2.2.6ではVirtualBox6.1以降は利用できない問題

Vagrant2.2.6ではVirtualBoxを6.1以降にするとvagrant upコマンドが通らなくなる。

以下のサイトを参考に対応した。

github.com

変更箇所は以下の三つ

module Driver
  autoload :Meta, File.expand_path("../driver/meta", __FILE__)
  autoload :Version_4_0, File.expand_path("../driver/version_4_0", __FILE__)
  autoload :Version_4_1, File.expand_path("../driver/version_4_1", __FILE__)
  autoload :Version_4_2, File.expand_path("../driver/version_4_2", __FILE__)
  autoload :Version_4_3, File.expand_path("../driver/version_4_3", __FILE__)
  autoload :Version_5_0, File.expand_path("../driver/version_5_0", __FILE__)
  autoload :Version_5_1, File.expand_path("../driver/version_5_1", __FILE__)
  autoload :Version_5_2, File.expand_path("../driver/version_5_2", __FILE__)
  autoload :Version_6_0, File.expand_path("../driver/version_6_0", __FILE__)
  autoload :Version_6_1, File.expand_path("../driver/version_6_1", __FILE__)
end 
driver_map   = {
  "4.0" => Version_4_0,
  "4.1" => Version_4_1,
  "4.2" => Version_4_2,
  "4.3" => Version_4_3,
  "5.0" => Version_5_0,
  "5.1" => Version_5_1,
  "5.2" => Version_5_2,
  "6.0" => Version_6_0,
  "6.1" => Version_6_1,
}

ここの6.0のファイルをコピーして6.1のものを作成。ファイル内の記載も6_0を6_1に置換する

以上でvagrant upコマンドが通る

仮想環境構築メモ

あくまでメモ
vagrantでWindows10上にcentosを立ち上げる。

まずvagrantvirtualboxをインストール。
boxファイルはcentos7のものを使用。

ローカルのリポジトリと同期させたかったが以下のエラーが出たのでGuest Additionsをインストールをインストール。

mount: unknown filesystem type 'vboxsf'

centosが立ち上がりsshでつながることを確認。
リポジトリの内容が同期できていることも確認。

次にhttpdをインストール。
vagrantfileに起動時にhttpdをリスタートするよう設定。

mariadbを削除してからmysqlをインストール。
ログイン後rootのパスワードを変更し新たにユーザーを作成する。

httpd.confの設定をして無事接続完了。

Chart.jsでnullデータがある時の挙動の制御

結論:公式を読みましょう。。。

結構時間かけて調べて結局公式読み直したらオプションの中にあったという。。。

spanGaps

trueの場合、データがない点またはヌルの点との間に線が描画されます。falseの場合、NaNデータ点では線が途切れます。

spanGaps:trueとしておけばよいようです。。。

コーディング中に上司が視界から消えた話

上司というかチームリーダーが仕事中に亡くなった。

 

新卒で入った会社はそこそこ規模の大きなSIerで自社ビルもあり受託での開発もあった。

人売り派遣SESのみを生業としている会社ではなかった。

 

ではなかったのだけど、業務の半分はSESだった。

専門卒だった自分はJAVAを使った開発を志望していたのだけど、コミュニケーション能力に欠ける同期が社内の受託案件に配属され、変にコミュニケーション能力のあった自分は嫌われていたのかなんなのか知らないが先輩の1人もいない二次受けCOBOL案件に放り込まれた。

もちろんCOBOLなどやったことなどない。(結果的にCOBOLの実装能力などいらなかったのだけど)

 

そのプロジェクトに参画してからはハードワーク続きだった。

汎用機を使った開発で、コーディングしてコンパイルした結果は翌日冊子となって届けられる。

新人の自分の仕事は朝届けられたコンパイル結果を自分のチーム分をコンパイル結果の山から見つけ出しメンバーに届けることだ。

10人程度のチームが20近くある巨大なプロジェクトだったから冊子も膨大な数がある。

そこから自分のチームのものを見つけ出すだけで一苦労だ。

 

それが終わればようやく自分の実装の時間だ。しかし、実装能力などいらない。

先輩(他社の)がアクセル上で書いたコードを一字一句間違えないように汎用機に入力していくお仕事だ。

コーダーですらない、パンチャーだ。

 

 

朝は郵便局員、昼はパンチャー。

 

 

パンチャーの仕事は長くは続かない。

そりゃあ、アクセルにコードを書くスピードとそれを書き起こすだけのスピードだと後者の方が早い。

だから基本的に夕方くらいからやることがなくなる。

なくなるので、とりあえず自分がやった実装を見直してみる。

するとそもそもの実装がおかしいところが見えてきたりもする。

それはそれで相談して修正するのだが、1時間もすればそれも終わる。

 

 

しかし、大変な炎上案件のため9時だろうが10時だろうが誰も帰らない。 なので俺はひたすらパソコンのフォルダ整理をして夜を過ごした。

もちろん土曜日も出社する。社会人になって初めてのお仕事なのでそれは当たり前なんだなと思っていた。

チームリーダーに至っては日曜日も出勤しており、日曜出勤しない自分はなんて不真面目なのだろうと常に罪悪感でいっぱいだった。出ましょうかといっても断られる。能力が足りないからだと思った。

 

残業代は全て出る会社だったので専門卒の一年目とは思えないような給料をもらった。月あたり300時間を超えて労働していたのだから当たり前だ。

 

 

そんな生活が半年くらい続いたある日チームリーダーが視界から消えた。

リーダーは俺からみて斜め右奥にいたので常に視界に顔があった。

それが夕方ごろ突然消え、ドシンというとても大きな音がフロアに響いた。

なにが起きたのかわからなかった。

隣の先輩が『大丈夫ですか!??』と駆け寄った。

『うう、、、』とうめき声が聞こえた気がした。

その後誰かが呼んだ救急車がきて搬送されていき、そのまますぐ亡くなった連絡が入った。

 

これが新卒一年目の話。

炎上していたプロジェクトは、そのリーダーが丸抱えしてなんとか持っていたので、リーダーがいなくなりさらに炎上し、さらに過酷になり、たいした作業もしていないのに2年目の後半に俺が体調を崩した。

会社に行けなくなってしまった。

 

これが2年目の話。

残業なんてバカらしい。

 

【読書記録】虐待が脳を変える


しかし、「良い親」像にとらわれないでほしい。良い親であることより、親自身が笑っていられること、それが子どもの脳の発育にもっとも良いのだ。

読みやすい本ではなかったけれど、とても良い本でした。
これから子育てをする人、今子育ての最中の人には是非読んでほしい本です。
これから悩むであろうこと、今悩んでいることについて、きっと肯定してくれます。
読むことで気持ちが楽になることもあるだろうと思います。

読みやすい本ではないと言ったのは、特に本書の中盤です。
中盤には本当に脳についての研究について書かれています。
とてもアカデミックな内容で実生活に生かすのはやや難しい話になるので
興味がある人以外は読み飛ばしてもいいかともいます。

序盤中盤には子育てについて大切なことが書かれているので是非読んでほしい内容です。
虐待について考え直す内容にもなっています。
実際に虐待をしているほとんどの親は子どもを愛しているそうです。
愛しているのに虐待をしてしまう。
虐待の自覚もないそうです。
親にとってはしつけであっても、こどもの心には深い傷を残してしまう。
とても悲しいことだと思います。

知らないことは仕方がない。
だからこの本を読んで知識を深めてほしいと思います。

【読書記録】バカと付き合うな

f:id:parusuteng:20181217214103j:plain
バカと付き合うな
堀江貴文西野亮廣 共著

読了です。

基本的にホリエモンの本は、いい意味で主張が一貫している、悪く言えば結論はいつも同じという印象を持っています。
その結論自体はとてもよいものなので、まだホリエモンの本を未読の方は是非読まれてはと思います。
ただホリエモンの本を未読の人は、「ゼロ」から読まれるのがいいと思います。とても読みやすくできています。

その結論というのはどう考えてどう生きていくかというところなんですが、そこのところは本を読んでください、というしかないです。私の言葉ではきっと何も響かない。

新鮮に感じたのは西野さんからのホリエモンの評価のところ。
堀江貴文ホリエモンは違う。
・酔っぱらうとダメダメで世話好き
これが今までのホリエモンの本ではなかったのでとても新鮮でした。

堀江貴文は普段のメディアの前ではホリエモンを演じているという話。
これ、「ほんとかな~?」ってなったんですが、お酒の席での話を読んでしまうと信じざるを得ませんw
ベロンベロンに酔っぱらってダメダメでブレブレ。
急に優しくなったり、急に感激屋になったり、世話好きだったり。

ここが読めただけで価値ありって感じですね。

良書でした。
本書のテーマについては言うまでもなくという感じです。