読者です 読者をやめる 読者になる 読者になる

チラシの裏の設計書

プログラム開発、データ分析からロボット作りまでものづくり全般を思うがままに書き連ねたブログ。

Coursera Machine Learning 4,5週目日記

引き続き頑張り中のCoursera Machine Learning。4,5週目はニューラルネットワークの話です。

www.coursera.org

入力から結果を計算するフォワードプロパゲーションと、結果から重みを更新するバックプロパゲーションの解説。

プログラム課題の難易度が前回より随分上がった気がしました。いろいろと調べまわってなんとか。。。

 

とりあえず全体的な復習も兼ねて、ロジスティック回帰のR言語自力実装を開始したので、完成したらここかQiitaにまとめようと思います。

いやはや、まだNNは自力実装できる気がしないのでがんばる。

 

まだMachine Learningコースはドロップアウトせずにぎりぎり続いてますよ、という報告でした。

 

 

分析コンテスト、スタートでつまずいた教訓

さてさて、新年度ということで以下の分析コンテストに参加して、一回目の解析結果投稿をしてみました。

deepanalytics.jp

そして投稿してみてびっくり。一発目の投稿はbenchmarkよりちょっと良いぐらいで、ほぼ最下位グループではありませんか。

ここのベンチマークは乱数というか値固定というか、いわば「解析せずにえいやで数値だすとこのぐらいのスコアだよ」っていう感じ基準(過去の傾向を見た感じの憶測です)なので、自分の結果もその程度だということです。

それにランキング全体をみると、どうも上位と下位で明確にスコア差があります。0.4以下グループと0.8以上グループみたいな。

あ、これは分析精度うんぬんの前に、そもそも答えのフォーマットというか求められている数値になってないなと。特に今回のコンペの場合、学習データは故障の有無なのに対して、出すべき答えは故障確率なので、そのへんで誤ってそうです。

 

ということで、問題定義や結果の出し方でいきなり間違ったので戒めがてら記録しておきました。さて、どこまでスコア伸ばせるかなぁ。。。

 

ーーー

 

csvをsqliteにポイっと入れるスクリプト

Gistから貼り付ける実験を兼ねて。。。

Gistに2ファイル投稿したものを貼り付けたらどうなるのっと。

 

データ分析コンペなどで、たくさんのcsvを受け取ってまずは結合したり抽出したりコネコネしたいときにDB(というかSQLでの処理)が使いたくなります。

ということでワンクリックでcsvからsqliteにデータを流し込むツールがほしかったんですが、案外見当たらなかったので作りました。

非常に用途は限られていると思いますが。。。

 

ああ、、、今見るともうちょっといろいろ関数化しておくべきだったなぁとか、「ワンクリックで」と書いたのにクリックじゃなくて「ワン"カタカタ、ターン"」だなぁとか思ってしまいました。

 

 

Coursera Machine Learning 3週目日記

忘れないうちに。Coursera MLの3週目終わりました。

感想の概要:完全に理解するには自分でプログラム組んでみないとだめかも。

 

3週目はロジスティック回帰についてでした。

ロジスティック回帰の損失関数がどんなことを意味しているか、という解説がわかりやすく、ロジスティック回帰もわかっていたようでまだまだ奥が深いなぁと痛感。

 

そして、正則化の話も出てきました。

 

余談ですが、字幕でところどころ"正則化"でないといけないところが"正規化"になっていました。もしこのコースを受けてみようと思っている方はご注意を。

 

正則化項を置くことで係数が大きくなることに対してペナルティを与える、という考え方がとてもわかりやすかった、、、ですが、これもまだイメージでなんとなくわかったというぐらいなので、深く理解するには自分で1からプログラム組んでみないとだめかなぁと思いました。

 

ちょっといろいろと書きたい内容が貯まってきたので短めで。

データ分析関連のお勉強コンテンツ

courseraの機械学習講義についての日記を何度か書いていますが、courseraのようなMOOCと呼ばれるものをはじめ、社会人や学生が新たなスキルを身につけることを支援するサービスが最近どんどん出てきています。

自分もいくつか受講したり、どんなものがあるか調べたりしたのでまとめておきます。

主にデータ分析/PG系。

(MOOC/MOOCsはMassive Open Online Course(大規模オンライン講義)の略。らしい。)

  • gacco

gaccoは日本発のMOOCです。

統計に関する講義が多くあります。印象として丁寧な講義が多く、0から学習する人でも挫折しにくいレベルかなと思います。コースを修了するためにはテストを受講する必要がありますが、そこまで難しいという感じでもないです。(簡単に満点とれるわけでもないですが。)

受講したことある講義

・社会人のためのデータサイエンス入門

・社会人のためのデータサイエンス演習

・新規事業開発スキル

統計学Ⅱ:推測統計の方法

2017/4から「統計学Ⅰ」、7月からは「統計学Ⅲ」が開講されるようです。

 

  • Schoo

schoo.jp

こちらは有料の動画学習サービスです。無料でも一部の動画が見れたり、生放送を見ることができます。内容も多岐にわたっていて面白そうなものがたくさんあります

  • coursera

代表的なMOOC

www.coursera.org

・Machine Learning 受講中

日本語字幕あり。

 

ほかにも海外のものでは

  • edX
  • Udacity

www.edx.org

www.udacity.com

 

が有名だそうです。

例えば、グーグルがディープラーニングの講義動画をUdacityで配信していたりします。

blog.udacity.com

英語苦手すぎて全部見れてないのは秘密。

 

ほかにも、高専や技科大が中心となっているFisdomや

www.fisdom.org

CtoCの学習プラットフォームUdemy

www.udemy.com

 など、おもしろそうなところがありました。

 

プログラム系の学習サービスはさらに盛りだくさんです。

私は

のように動画で学んだり、実際に問題を解くコードをごりごり書いたりするところをたまに利用しています。が、習うより慣れろ派(非効率)なので気づいたら問題ばっかり解いてます。paizaは(いい意味で)ぶっとんだプログラムゲームがあるのでたまに遊んでいます。

ついでに実際にはまだ使っていませんが、調べていて面白そうだったところをいくつか。

prog-8.com

 

codeprep.jp

 

code.9leap.net

 

こういった学習サービスはビジネスモデルがどのようになっていくのかも含め、現在注目の分野です。

Coursera Machine Learning 2週目を終えて

自分用メモ書きです。引き続きMLコースを頑張っています。

当初は半分ぐらいまで進んだら日記を書こうと思っていたのですが、思った以上に濃い内容だったため自分の復習がてら内容と感想をできるだけ1週ごとに書いていこうかなと思います。

www.coursera.org

まず、2週目の率直な感想は「あ、これ大学の授業だ」でした。

もちろん無料の動画とはいえ、有名な大学教授の方がしっかりカリキュラムを組んでいるので当然といえば当然です。ただ、「手とり足とり教えてくれるセミナー」ではなく、「勉強してくること前提」「授業では60%しかわからなくても、資料あげるから40%は自分で埋めてこい」というぐらいのノリな印象です。いろいろと学生の頃の記憶がフラッシュバックしました。ほんとに。

 

ということで内容ですが、2週目は1週目に続いて重回帰の話です。

ただし、よくある「回帰ってこういう分布になんとなく線ひくんだよー」というような説明ではなく、大学の講義らしくしっかりと理論立てて説明してくれるので非常に勉強になります。

数値解析的な解き方(行列計算)と最適化的な解き方(最急降下法)を実際に数式やOctaveを使って解説してくれます。特に(機械学習コースなので)最急降下法を中心に学んでいくわけですが、コスト関数のグラフ化を見ながらどういう風にパラメータが最適化されていくのかというのを見てみたり、学習係数の大小による違いを見たりと、重回帰の中身の原理をしっかりと理解できる内容となっている印象です。

 

~~

あと個人的に納得したのが多変数で回帰するときに、各変数のスケールが違いすぎる場合(変数Aは-5~+5、変数Bは0~1000みたいな場合)収束が著しく遅くなるということと、その場合にスケールが大体合うように標準化するのがよいということでした。

これは以前自分でパーセプトロンを組んだ時になんとなく感覚ではわかっていたことですがしっかりと現象と対策を理解できました。

~~

 

そしてOctaveの基礎的な使い方をレクチャーされたあと課題となりました。

(と、ここで「基礎的な使い方をレクチャー」とは書いたものの、これも覚えきれないぐらいの機能をレクチャーされたわけですが。。。)

課題は最急降下法で回帰をするプログラムの作成(穴埋め)です。

記述量自体は少ないですが、コスト関数や更新式周りをきちんと理解しないとできない内容です。

 

まだ序盤だと思って舐めていたら結構苦労しました。

特に自分の場合、つい先日ハトでもわかる単純パーセプトロン - チラシの裏の設計書というような内容がかなり近いものを勉強していて、Octaveも昔使ったことがあるというアドバンテージがあるにも関わらず課題でミス連発したりとなかなかボロボロでした。

2週目でこれって大丈夫かなぁと思いながらさぁ3週目いってみようー。

 

ということで、もしこの講義を受けようかと思って情報を探している方、

わりと気合を入れる必要がありますが、間違いなく「機械学習の基礎」が身に付きます。「機械学習のなんとなくのイメージ」ではなく学問としての基礎が身につく非常にいい講義ですので頑張ってみましょう。

 

CentOSにHadoopメモ

いろんなところにメモブログやメモwikiを作りすぎてアウトプット先が分散してしまっているので徐々にここのブログに集めていきます。

過去にCentOS7にHadoop(1系)をセットアップしたときの個人用メモなので、古かったり間違ってたりするかもしれませんが、記録として載せておきます。

 

javaインストール

rpm -ivh jdk-8u25-linux-x64.rpm
 
java -version
#うごくね
 
sudo rpm -ivh hadoop-1.2.1-1.x86_64.rpm --force
#依存性無視インストール、いいのかどうか。
 
#ファイルをなんか用意して
hadoop jar /usr/share/hadoop/hadoop-examples-1.0.4.jar wordcount input output
#ワードカウントを実行
 
/etc/hadoop/mapred-site.xml
#へ
<property>
<name>io.sort.mb</name>
<value>10</value>
</property>
 
#を追加。
 
#これで動いた。スタンドアロンモードだけど。
 
 
ここから擬似分散モードへ拡張
 
/etc/ssh/sshd_config
#の48付近
PermitRootLogin no
#へ
 
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
 
#> 追記:
#> RSAにしようね
#> ssh-keygen -t rsa
 
#パスワードなしでログインできるように
 
#再起動して有効に
systemctl restart sshd
 
 
hadoop設定再び
 
/etc/hadoop/core-site.xml
#にhdfs領域のパス書く
 
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/hadoop</value>
  </property>
 <property>
  <name>fs.default.name</name>
  <value>hdfs://localhost:9000</value>
 </property>
 
#/hadoopにした chmod 777 にしとく
 
hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
 
mapred-site.xml
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
 
#そしたらhadoopデーモン起動(か再起動)
#初回は
/etc/init.d/hadoop-namenode format
#次回以降はフォーマットなし
 
#再起動用スクリプト作っとく
/etc/init.d/hadoop-tasktracker stop
/etc/init.d/hadoop-jobtracker stop
/etc/init.d/hadoop-datanode stop
/etc/init.d/hadoop-namenode stop
/etc/init.d/hadoop-namenode start
/etc/init.d/hadoop-datanode start
/etc/init.d/hadoop-jobtracker start
/etc/init.d/hadoop-tasktracker start
 
hadoop fs -ls #でエラーでないか
hadoop fs -put /var/log/dmesg input #でエラーでないか 追加されたか
#あ、だめかも
 
#hdfsユーザが作られてるのでまずパスワード設定
sudo passwd hdfs
 
hadoop fs -chmod 777 /  
#でだれでも書き込めるようにしておく
 
#(hdfsユーザじゃないとできないかも)
 
#ワードカウント実験用
hadoop fs -rmr output
hadoop jar /usr/share/hadoop/hadoop-examples-1.2.1.jar wordcount input output
hadoop fs -cat output/part-r-00* | sort -t $'\t' -n -k2,2 -r > out.csv
 
#単語出現数順に並べてローカルにもってきた。
at      10
not     9
root    7
Host    4
 
#こんな感じになってれば成功。
 
追加
mapとreduceの数を調整
mapred-site.xml
 
  <property>
    <name>mapred.map.tasks</name>
    <value>3</value>
  </property>
  <property>
    <name>mapred.reduce.tasks</name>
    <value>3</value>
  </property>
  <property>
    <name>mapred.tasktracker.map.tasks.maximum</name>
    <value>3</value>
  </property>
  <property>
    <name>mapred.tasktracker.reduce.tasks.maximum</name>
    <value>3</value>
  </property>
追記
 
R
#依存性やらなんやらでrpmいれれなかったのでtar.gzから入れてみる
#R-3.1.1.tar.gz を解凍して
/opt/R 
#で
./configure #実行してエラーになるので
./configure --with-x=no --with-readline=no
#して
make
#して
make install
 
#ふぅ。
 
 
        yum -y install vim-enhanced