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
こちらは有料の動画学習サービスです。無料でも一部の動画が見れたり、生放送を見ることができます。内容も多岐にわたっていて面白そうなものがたくさんあります
- coursera
代表的なMOOC
・Machine Learning 受講中
日本語字幕あり。
ほかにも海外のものでは
- edX
- Udacity
が有名だそうです。
例えば、グーグルがディープラーニングの講義動画をUdacityで配信していたりします。
英語苦手すぎて全部見れてないのは秘密。
ほかにも、高専や技科大が中心となっているFisdomや
CtoCの学習プラットフォームUdemy
など、おもしろそうなところがありました。
プログラム系の学習サービスはさらに盛りだくさんです。
私は
のように動画で学んだり、実際に問題を解くコードをごりごり書いたりするところをたまに利用しています。が、習うより慣れろ派(非効率)なので気づいたら問題ばっかり解いてます。paizaは(いい意味で)ぶっとんだプログラムゲームがあるのでたまに遊んでいます。
ついでに実際にはまだ使っていませんが、調べていて面白そうだったところをいくつか。
こういった学習サービスはビジネスモデルがどのようになっていくのかも含め、現在注目の分野です。
Coursera Machine Learning 2週目を終えて
自分用メモ書きです。引き続きMLコースを頑張っています。
当初は半分ぐらいまで進んだら日記を書こうと思っていたのですが、思った以上に濃い内容だったため自分の復習がてら内容と感想をできるだけ1週ごとに書いていこうかなと思います。
まず、2週目の率直な感想は「あ、これ大学の授業だ」でした。
もちろん無料の動画とはいえ、有名な大学教授の方がしっかりカリキュラムを組んでいるので当然といえば当然です。ただ、「手とり足とり教えてくれるセミナー」ではなく、「勉強してくること前提」「授業では60%しかわからなくても、資料あげるから40%は自分で埋めてこい」というぐらいのノリな印象です。いろいろと学生の頃の記憶がフラッシュバックしました。ほんとに。
ということで内容ですが、2週目は1週目に続いて重回帰の話です。
ただし、よくある「回帰ってこういう分布になんとなく線ひくんだよー」というような説明ではなく、大学の講義らしくしっかりと理論立てて説明してくれるので非常に勉強になります。
数値解析的な解き方(行列計算)と最適化的な解き方(最急降下法)を実際に数式やOctaveを使って解説してくれます。特に(機械学習コースなので)最急降下法を中心に学んでいくわけですが、コスト関数のグラフ化を見ながらどういう風にパラメータが最適化されていくのかというのを見てみたり、学習係数の大小による違いを見たりと、重回帰の中身の原理をしっかりと理解できる内容となっている印象です。
~~
あと個人的に納得したのが多変数で回帰するときに、各変数のスケールが違いすぎる場合(変数Aは-5~+5、変数Bは0~1000みたいな場合)収束が著しく遅くなるということと、その場合にスケールが大体合うように標準化するのがよいということでした。
これは以前自分でパーセプトロンを組んだ時になんとなく感覚ではわかっていたことですがしっかりと現象と対策を理解できました。
~~
そしてOctaveの基礎的な使い方をレクチャーされたあと課題となりました。
(と、ここで「基礎的な使い方をレクチャー」とは書いたものの、これも覚えきれないぐらいの機能をレクチャーされたわけですが。。。)
課題は最急降下法で回帰をするプログラムの作成(穴埋め)です。
記述量自体は少ないですが、コスト関数や更新式周りをきちんと理解しないとできない内容です。
まだ序盤だと思って舐めていたら結構苦労しました。
特に自分の場合、つい先日ハトでもわかる単純パーセプトロン - チラシの裏の設計書というような内容がかなり近いものを勉強していて、Octaveも昔使ったことがあるというアドバンテージがあるにも関わらず課題でミス連発したりとなかなかボロボロでした。
2週目でこれって大丈夫かなぁと思いながらさぁ3週目いってみようー。
ということで、もしこの講義を受けようかと思って情報を探している方、
わりと気合を入れる必要がありますが、間違いなく「機械学習の基礎」が身に付きます。「機械学習のなんとなくのイメージ」ではなく学問としての基礎が身につく非常にいい講義ですので頑張ってみましょう。
CentOSにHadoopメモ
いろんなところにメモブログやメモwikiを作りすぎてアウトプット先が分散してしまっているので徐々にここのブログに集めていきます。
過去にCentOS7にHadoop(1系)をセットアップしたときの個人用メモなので、古かったり間違ってたりするかもしれませんが、記録として載せておきます。
java -version#うごくね
#依存性無視インストール、いいのかどうか。#ファイルをなんか用意して#ワードカウントを実行#へ<property><name>io.sort.mb</name><value>10</value></property>#を追加。#これで動いた。スタンドアロンモードだけど。
#の48付近PermitRootLogin no#へ#> 追記:#> RSAにしようね#パスワードなしでログインできるように
#再起動して有効に
systemctl restart sshd
#にhdfs領域のパス書く<property><name>hadoop.tmp.dir</name><value>/hadoop</value></property><property><name>fs.default.name</name></property>#/hadoopにした chmod 777 にしとくに<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 hdfshadoop fs -chmod 777 /#でだれでも書き込めるようにしておく#(hdfsユーザじゃないとできないかも)#ワードカウント実験用hadoop fs -rmr output#単語出現数順に並べてローカルにもってきた。at 10not 9root 7Host 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>追記
#依存性やらなんやらでrpmいれれなかったのでtar.gzから入れてみる#R-3.1.1.tar.gz を解凍して/opt/R#で./configure #実行してエラーになるので./configure --with-x=no --with-readline=no#してmake#してmake install#ふぅ。
CourseraのMachine Learningコースをがんばる
Qiitaを眺めているとCourseraというところで開講されているMachineLearingの講義が素晴らしいという記事が注目されていたので、その講義について調べてみました。
これはいわゆるMOOCとも呼ばれる大規模公開オンライン講義形式で行われているものです。
なかでもこの講義はスタンフォード大学の先生が機械学習の基礎から教えてくれ、機械学習を学びたい人には最適と言われているようです。
これは受けねば!と思いざっとカリキュラムを眺めてみましたが、一昔前にこれだけの内容を勉強しようと思うと独力ではなかなか難しく、大学なりで教わる必要がありました。それが今や超有名大学の講義がインターネットで見られる時代です。いいなぁ。。。いやいや、いいなぁじゃなくてその恩恵を受けねば。
ということで1週目から受け始めました。
(とりあえずブログで宣言しておけばドロップアウト抑止力になるかなと思い投稿)
まだ始めたばかりですが、現在の感想。
(かなり個人的感想だ、という前置きをしつつ、、、)
様々なところで「機械学習入門者はぜひ!」という感じで言われていますが
あくまで「前提としてある程度の数学知識や機械学習自体への興味があって」機械学習の基礎理論から学びたい、という人向けという印象です。
「なんか最近"機械学習"ってよく聞くからどんなものか知りたい」という意味での入門者はたぶん1週目でそっとブラウザを閉じる結果になるのでご注意ください。
あと、英語力があるとだいぶうれしいです。動画は日本語字幕もありますが、途中途中の問題や説明文は日本語がない場合も多々あります。
私は英語力がないのでグーグル翻訳片手に奮闘してます。
レガシーな人間のCSS関連メモ "rem"と"vh"
久しぶりにWebページ作成をすると、いろいろと時代に置いていかれているところがあって刺激になります。
ほんと進歩の速い分野です。
フロント系の方々にとっては常識かもしれませんが、とりあえずメモ。
- "rem"という単位が導入されてた
ルートのfont-sizeを基準とした単位らしい。
html{font-size:10px}
と定義しておくと
p{font-size:1.5rem}
は10×1.5pxに対応するようです。
"em"のroot要素参照版なので"root em"→"rem"だそうな。
レスポンシブ対応などで効果を発揮しそうな予感です。
- "vh","vw"という単位も導入されてた
これまた単位ですが、viewportに対して大きさを指定できるようです。
pxのような絶対値指定でもなく、%のように親要素に対する割合でもなく、見えている領域に対する指定ができます。
画像の表示などで便利そうです。
参考:【CSS3】最新の単位[vw][vh][vmin][vmax]の解説。 - ONZE
- CSS直書きはもう古かった
これはなんとなくそんな気はしていましたが、直接CSSを記述するよりも変数が使えたりするメタ言語で書いてからCSSに変換するのが今や一般的なんでしょうね。
bootstrap4が使いたくて中身を除くとLESSも同封されていました。
また勉強しておかなくちゃ。。。
参考:CSSのメタ言語Sass(SCSS)、LESSの完全入門 - Qiita
ポートフォリオサイト(という名の自分の備忘録がわりのアカウントリスト)を作ろうとWebページ作成を始めたのでこういった発見がまだまだありそうです。
R言語のifelseを条件演算子的に使うときは注意
偉そうにR言語の入門記事を投稿したその日にやってしまったミスを紹介。
R言語でifelse()という関数があります。
ifelse(条件,真の時,偽の時) のような書き方をすることで条件に沿った方が戻り値として得られるというもので、ほかの言語でいう条件演算子のような使い方をしていました。
条件演算子: 条件 ? 真の時 : 偽の時 というやつ
こういう書き方をした時に思わぬ動きをしました。
model <- ifelse(条件, modelA, modelB)
やりたかったこととしては条件によりどちらのモデルを採用するかを決めるというもの。
modelA/Bの中身はlist構造でいろいろなものが詰め込まれています。
この書き方で条件がTrueの時、得られたのはmodelAの一部分になってしまいました。
これはmodelAのlistの一つ目(いわばmodelA1)だけが返ってきていたためでした。
なんだこの仕様はと思ったものの、よく考えればR言語は基本的にベクトルを扱うわけで、ifelseもこういった入力を想定しているわけです。
NewVec <- ifelse(c(T,F,F,F,T), c(1,1,1,1,1), c(2,2,2,2,2))
NewVecはc(1,2,2,2,1)となる
そう考えると、条件部分に一つしか真偽値が入ってなければ、一つだけしか返さないよというのも変な仕様とは言えないなと。
ifelse( 1==1, list(a=3, b=5), list(c=6, d=9,e=10))
↑で帰ってくるのは"3"のみ。
注意。注意。