CourseraのMachine Learning修了

8月頃から受講していたCourseraのMachine Learningを修了しました。久しぶりに知的好奇心を刺激され、毎週楽しく機械学習を学ぶことができました。

受講することになったきっかけ

機械学習に興味があるものの書籍は数式が多くて、なかなか読みきれません。数式の導出過程が多いため、実際の応用までなかなかたどりつけません。また、意味をつかむのも難しいように思います。そのため、なにから手を付けたらもうちょっと理解できるかなーと考えていました。そんなときに会社の機械学習勉強会が始まり、経験者がCourseraのMachine Learningから始めるといいよという話を聞いたので、受講してみました。

コースの内容

コースの内容は、ビデオ1.5時間、復習の選択式小テスト5問、プログラミング課題3時間といった構成を11週間続けます。正直なところ、社会人には結構厳しいです。

プログラミング課題はoctaveですが、すぐに慣れると思います。

事前知識

数学に関しては、行列の計算と簡単な微分程度の知識がないと厳しいと思います。数式アレルギーがあると、演習は正直無理なんじゃないかと思います。

octaveは演習を通じてなんとかなります。事前知識はいりません。

英語に関しては、ビデオは字幕があるので、ビデオを見るだけならなんとかなります。プログラミング課題は、毎週15ページ程度の英文を読むことになるので、英語に慣れてないと苦労するかもしれません。

感想

Andrew Ng先生は、数式を直感的に理解することを重視して説明するため、説明が非常にわかりやすいです。数式の導出をはしょっても、数式の意味を説明してもらえるのが非常によかったです。この点は本より良い点だと思います。また、ビデオなので何度でも見れるので、一度見て理解できなかったものは、通勤時間中に再度見ていました。理解するためにざっくりでもいいので、メモを取ることをおすすめします。
衝撃を受けたのが、neural networkのビデオです。実車で自動運転する映像が流れるのですが、こんな簡単に道路をトレースできるのか!と驚きました。

プログラミング課題が重いという意見もあるようですが、個人的には非常に楽しめました。特に、数式から実装への変換が具体的にわかり、動作するというのが非常に素晴らしいです。この課題を用意するのは、かなり時間がかかったと思います。

最後にAndrew Ng先生よりメッセージがあるのですが、ちょっと感動しました。

修了証

無料でもすべてのコースを受講することができるのですが、このコース作成に対する対価として修了証を取得しました。

僕は4週ぐらいまで進んでから取得することにしたため、毎週の小テストのやり直しをすることになってしまいました。修了証を取りたい方は、なるべく最初から取ったほうがいいです。後、課題が締め切りまでに提出できそうにないときには、コースの修了時期をswitchingすることも可能なようです。

今後

修了してみて、やっと機械学習のスタートポジションに立てた感じです。今後はpythonを学びつつ、何かアプリケーションを作ってみたいなーと思っています。

[book] オライリーのmobiを買ってみた(MongoDB & PHP)


いよいよ明日(2012/11/19)、Kindle PaperWhiteが発売されます。楽しみですね。一応予約済みなのですが、発送は12/2前後ということなのでまだしばらくはお預けです。

ところで、2012年初頭からオライリーさんでDRMフリーのebookが販売されていたのですが、PDF形式とepub形式しかありませんでした。
久しぶりにチェックしてみると、いつの間にかKindleでも読めるmobi形式が増えてる・・・。ということで、早速一冊購入してみました。

今回購入したのは、MongoDB & PHP。MongoDBは、ちょっと前に話題になったNO SQL形式のデータベースです。まだ2、3章読み始めたばかりですが、この本はMongoDBの入門書として手頃でいいですね。

今回もKindle3で読んでいます。

いいなと思ったのは、非常に紙にスタイルが似ていること。電子書籍だけど、オライリーの本を買ったなあという気分になるのがとてもいいです。もちろん持ち運びも楽です。その一方、Kindle3はディスプレイサイズが600x800と若干小さいので、コード部分で折り返しがあると、若干読みにくいです。PaperWhiteは若干幅が広くなっているので、折り返しも減っているかもしれません。


今回購入したMongoDB & PHPでは2点ほど、気になるところがありました。

  1. Kindleではmobi形式の場合、文章を選択してアンダーラインを引くことができるのですが、今回のフォーマットではなぜかアンダーラインが引けませんでした。
  2. 図が入っていない(読めないフォーマット?)部分がある。

図の件は、オライリーさんに問い合わせる予定です。

最近ではプログラミング書籍がebook形式で出版されるようになってきました。今後は技術系読み物も増やしていって欲しいですね。

(2012/11/20追記)オライリーさんに問い合わせたところ、早速修正版がアップされました。電子書籍は修正ができるのがいいですね。

[book] Gene Mapper


藤井太洋さんのGene Mapper読了。

Google量子コンピュータ、拡張現実といったプログラマなら聞いたことのある単語がちらほら出てくるので、ニヤリとしながら一気に読み終えてしまいました。

なんかいろいろ感想を書いていたのだけれど、編集中に消えてしまったので感想はここまで。

この小説はDRMフリーな上に、各種電子書籍のフォーマットに対応している点が素晴らしいです。今回はKindle3の横書きmobi版で読みましたが、とても快適に読めました。フォーマットのせいか若干字間が広いところもありますが、すぐに慣れました。Kindle PaperWhite入手後は縦書き版で再読したいと思います。

11/30まで、Kindleキャンペーンで通常500円がなんと300円で購入できるので、読もうかなと思っている方はお早めに。

http://genemapper.info//

[Evernote] 家電のマニュアルを集めてみた

あけましておめでとうございます。今年も情報整理ネタをぼちぼち書いていく予定です。

今や自炊というと、電子書籍を自分で作成することをさすようになったようですね。お正月にはコツコツいろんな書籍を電子化した人も多かったのではないでしょうか。そういう僕も電子書籍を体験するべく自炊してみようかと思ったのですが、うちにはScanSnapや裁断機がないので、お金も手間もかかるようでなかなか踏み出せずにいました。まあ正直なことをいえば、メンドクサイ。

そういうわけで、自炊せずとも我が家ならではの電子書籍を体験できるいい題材はないかなーと考えていましたが、手頃な題材がありました。それは「家電製品のマニュアル」です。

最近の家電製品のマニュアルって製品の機能が多いせいか、かなりの分量があります。BDレコーダーやテレビなどは、2分冊化されていたりして、なかなか読む気になれません。また、紙のままでは検索ができないので、マニュアルから問題を解決するのも面倒です。

そこで、家電製品のマニュアルを電子化しましょう。とはいっても、最近の家電製品のマニュアルのほとんどはPDFで提供されているので、サポートサイトからダウンロードするだけです。

さらにEvernoteに放り込んでおけば管理もラクチン。デバイスごとにデータを用意する必要がないので、どこでもいつでも家電について調べることができます。

うちでは「家電」タグと「マニュアル」タグ、そして「置き場所」タグを付けておき、タイトルには「メーカ名 + 製品の型番」を付けています。「置き場所」タグは重要です。置き場所タグには「寝室」とか「2Fリビング」とか具体的な置き場所を書いておくことで、同一種類の家電製品があった場合でも一撃で検索することができます。置き場所タグを入れたのは、家電は一度設置するとその場所を変更することが少なく、会話でも場所をすることが多いからです。ほら、弟の部屋のテレビの調子が悪いとか、居間のエアコンのフィルターを交換したいんだけどっていう会話をしませんか?これに倣って、タグをつけています。

Evernoteにマニュアルを登録して使ってみるとわかりますが、マニュアルに簡単にアクセスできると意外と便利です。いまいち使い方がわからないなというときに、マニュアルを見ようという気が起き、すこしずつ製品について詳しくなれます。付属品や消耗品を購入するときにも、すぐにマニュアルにアクセスできるので、正確な情報を得てから購入することができ、時間にも財布にも優しかったりします。

注意点としては、EvernoteにPDFを登録すると、あっという間にFree版のデータ転送量の上限に到達することです。たとえば、うちのウォッシュレットのマニュアルのファイルサイズは10Mbyteもあります。このウォッシュレット、たいした機能はない気がするのですが、とてもファイルサイズが大きいのです・・・。

そうそう、紙のマニュアルはまだ捨てていません。なぜかというと、相方がEvernoteを使ってないから・・・。相方が使えば共有ノートで十分なので紙のマニュアルは捨てるんだけどなあ。

OSX版Evernoteの日本語化 その4

Evernoteの日本語化が着々と進んでいるようですが、まだ僕らユーザへリリースされるまでには時間がかかるようです。

というわけで、待ちきれないユーザのために1.5.2版用の日本語化リソースを用意しました。
1.5.1版は、ノートが見えなくなるという不具合がありましたので、日本語化しませんでした。もし、1.5.1ユーザでしたら、1.5.2へのアップデートをお勧めします。
インストール方法は、関連する記事を参照してください。

関連する記事

日本語化の方法は関連する記事を参照してください。

感想、誤訳の指摘指摘などはコメント、もしくはtwitterでいつでもご連絡ださい。

Let's enjoy!

Evernote活用法

Evernoteって何?日本語化より先に使い方を紹介してよ」という某氏のリクエストに答えて、僕の活用方法を紹介します。

Evernoteを一言で表すと、オンラインメモ帳です。Webクリップ、自分のアイディアを残す、ボイスメモを取るといった様々な種類のメモを残すことができます。これだけだと、他のオンラインメモツールと変わらないかもしれませんね。
Evernoteの本当に素晴らしいところは、さまざまな環境ごとに専用クライアントが用意されており、どこからでもメモを同期し、追加・更新・削除・検索・参照することができるのです。つまり、どこでもいつでも自分のメモにアクセスできるのです。
僕がEvernoteで気に入っているのは、iPhoneでのメモの作成、持ち出しです。

イベント会場の地図として

飲み会やイベントがあると、最近は必ずと言っていいほど、ホームページで場所を確認して、地図を印刷して持っていきますよね?そういうときはEvernoteを活用してます。

ホームページで場所を調べたら、Evernoteへクリップ。後は、iPhoneEvernoteを起動すれば、地図がいつでもみれるというわけ。iPhoneで確認したらfavoriteをつけておき、iPhone本体に保存しておきます。こうすることで、オフラインでも参照できます。

読書メモとして

レバレッジ読書法を読んでから、本を読んだら読書メモを作っているのですが、この読書メモをEvernoteに蓄えています。読書メモの作り方は単純で、本を読んでいる最中に気に入った文章や心に残る文章があったら、ページの角をおります。一冊読み終えた後、角を折ったページを見直して、残したいものを引用して、Evernoteへ登録します。基本的に一冊に対し、1つのノートにしています。この読書メモを電車や家で見直しています。

アイディアメモとして

「アイディア」タグで、時々もやっと思いついた思いついたアイディアをメモっています。このアイディアメモは、思いついた瞬間にiPhoneなどで残しています。まだ、しょーもないものが多いのでなかなかアイディアを実現できていませんが・・・。

Webクリップとして

気になるページや言葉をWebクリップとして残しています。全て残したい場合は、基本的にdeliciousを使ってブックマークしています。部分的に興味があったところだけクリップして、後で自分のコメントをつけて整理しています。

Todoリストとして

Evernoteでは、チェックボックス付きのリストは、Todoリストとみなされます。MaciPhoneで思いついたら、Todoを追加して買い物リストやTodoリストに追加しています。

外食ログとして

外食したら、iPhoneでノートを作成しておいて、後で感想とか、お店の情報などをまとめています。また使いたいお店は、「またいきたい」タグで整理しています。

比較リストとして

欲しい家具や興味のある電化製品なんかをWebクリップしておいて、比較リストに使っています。


日本語のテキスト認識がまだできないので、名刺管理とか、PDFを登録しておくといった使い方はしていませんが、いずれやってみたいですね。ボイスメモは自分の声を聞くのが恥ずかしくて、ほとんど使っていません。
アイディア次第でさまざまな活用ができるEvernote。僕の活用法は参考になったでしょうか?

配列をユニークにしてその個数を返せ

ちょっと古い記事だけど、ζ*’ワ’)ζ<うっうー遅レス。より

配列をユニークにしてその個数とともに返せ。

具体的には、["foo", "bar", "foo", "baz", "bar", "foo"] を、[ ["foo", 3], ["bar", 2], ["baz", 1] ] にする。

面白いので勉強がてら考えてみます。例はRubyなので、配列を返しているけど、pythonなんでタプルで返すが良さそうですね。

戦略としては、まずリストをユニークな文字列の配列に変換し、ユニークな文字列ごとに数を数えるのが簡単そうです。
ユニークな文字の配列に変換するのは、setを使います。で、リスト内包を使って、タプルを生成してみます。

list=["foo", "bar", "foo", "baz", "bar", "foo"]
[(x, list.count(x)) for x in set(list)]

こんな結果になりました。

[('baz', 1), ('foo', 3), ('bar', 2)]

あれ?ちょっと結果が期待するものと違いますね。結果をソートしてないからですね。

list=["foo", "bar", "foo", "baz", "bar", "foo"]
sorted([(x, list.count(x)) for x in set(list)], cmp=lambda x,y:cmp(x[1],y[1]),reverse=True)

[('foo', 3), ('bar', 2), ('baz', 1)]

できた!
だけどちょっとコードが長いなあ。

listを何度もカウントしているところが、微妙にコストが高い気がしますが、まあオンメモリなんでたいしてコストはかからんでしょう。1行にまとめられると綺麗なんだけど、やりかたがよくわかりませんでした。まだまだ修行が足りないなあ。

ソートをリスト内包の直後に実行しようと、Noneが返ってくるのも謎。演算子の順番なのかしら?

[(x, list.count(x)) for x in set(list)].sort(cmp=lambda x,y:cmp(x[1],y[1]),reverse=True)

実行結果

None

なぜ?

pythonはリスト内包が強力ですね。最初は全然わからなかったけど、慣れてくるとリスト内包も楽しいな。