octaveでplotをグラフ表示させるとき、フリーズしちゃう問題とどのバージョンをインスコするか問題

 

couseraのmachine learning講座のweek2からプログラミング形式の課題提出がありますが、参照する課題pdfの「2.1 Plotting the Data」項目でプロット表示させる課題があります。その際に固まる(クラッシュする)ことがあるようです。自分がそうでした。

 

問題解決方法は何種類かあるようなので、まとめておきます。グーグル先生がすぐ解決してくれましたが。

 

courseraではoctaveのインストールは3.8.xを推奨しています。その理由は、4.0.0は正常に動作せず課題提出に問題が生じるからです。これはおそらく講座のスタート時期が2年前でoctaveの最新版が当時4.0.0だったことから、さかのぼって旧バージョンのインストールを薦めていたのだと思われます。バージョンについてはdiscussionで質疑が繰り返されているから探すようにとあります。しかし2年前のスレッドが多くて参考になるかどうかわからずそのままグーグル先生に依頼しました。修正パッチ4.0.1以降はバグが発生しないようなので最新版をインストールしていれば問題は起こらないとのことです。(2017.11月現在octaveの最新バージョンは4.2.1)

f:id:aoshis:20171119081326j:plain

 

 

方法1:gnuplotをダウンロードしてoctaveフォルダに突っ込む(フォルダどこ?)

方法2:octaveコマンドプロンプトでgraphic_toolkitと入力。そこで現在使用されているプロット表示エンジン?(と言っていいのかな)が表示されるので、graphic_toolkit('xxxx')を実行。xxxxにはgnuplotやQtと入力。

方法3.バージョン4.0.1以降をインストール

 

方法2を試してみましたがうまくいかなかったので、方法3を選びました。

 

そもそもバージョン3.8.xではgnuplotが稼働していないらしく、graphic_toolkitで変更しようとしてもエラーが出ます。wikiによれば、4.0以降はgnuplotの代わりにQtが動いているらしいので、ついでに最新版を入れたほうが良さそうに思いました。

 

インストールが終わったら再度コマンドを走らせてみてください。

 

 

参考

 

stackoverflow.com

 

gnuplot homepage

GNU Octave

※ 最新版をインストールする際、OSがwin10だと動作確認は済んでいないと表示されます。

 

coursera機械学習講座を生き抜く方法

ピピ、ピピッ

生存情報:蒼志、プログラミング初心者、英語がんばれ 1名確認

 

こばわ、蒼志です。

11月13日23時にcourseraの機械学習講座を始めましたが、勉強日数計算は便宜上14日に始めたことにして、実質的に5日目です。

 

現在の進捗は、講座の動画閲覧をweek11まで終えたところです(全11週)。week6,7はほぼ素通りしたので全部閲覧したわけではありません。(教師あり学習の途中からわけわからなくなってきたのでweek8の教師なし学習を再開しました)

私の過去のMOOC経験から挫折はどうしても回避したいという想いで取り組んでいますがそのためにこのようなアプローチになっている点お気をつけください(単純に模倣していいもんじゃないよという話)。

 

数学できない、英語もあまり自信がないということは前回の記事

プログラマーでもなんでもないボクがcourseraで機械学習を始めました - IT市民によるAI社会化構想

をご覧になればわかると思います。講座学習は綱渡り状態でいつ挫折してもおかしくないのは今も変わりません。そして、私も一般の方々と同じように常にモチベーションを高い状態に維持できるわけでもありません。そこをなんとか日々工夫を重ねてなんとかかじりついていこうという気持ちも変わっていません。一般的なMOOCの挫折率の高さを考慮した上でのいろいろな行動予測があるのは私にとっての強みの一つかもしれません。

これらを考慮した上で、これからどういう対応をすれば当講座を修了まで到達できるか考えをまとめてみました。

 

講座に必要な知識を改めて整理

講座を閲覧し終えてまず思ったのが、大学数学の前提知識がゼロな私は非常にディスアドバンテージを食らっているとの実感があります。しかし、コース修了した理系の人でも高校数学で止まっている(数3+Cは受験でクリアしたという意味でしょう)という人もいるようなので、もしかしてこのまま続けたらいけるのかも?と楽観している部分もあります。モチベーション維持のために先駆者の方々の意見は非常にありがたいものです。(ただぶっちゃけ、機械学習は数学ができる人がやるものという印象はこの講座を受講して割と明確に思いました。それを踏まえてやるかどうかは判断すべきだろうし、数学ができないからといってクリアできないものでもないと思っています。講座は数学ができない人にも配慮する意図で組まれています←ここが難しい)

 

ではどの程度の数学力が必要なのか改めて考えてみたいと思います。まず、コース修了に必要なものを逆算します。週末クイズ*1 1セット5問×17セットと、プログラミング課題提出8問×8題です。コース全体での配点は、週末クイズは1セット2%、プログラミング課題提出は1題8%で合計98% *2

 

週末クイズは週によって問題数が異なります。たとえば、week2は多変量線形回帰5問とoctave/Matlabで5問、合わせて2セット10問あります。各週末クイズは80%以上が合格(5問中4問以上正解)になります。

 

全体像

週末問題 17セット :2%×17=34%

プログラミング課題提出 8題 :8%×8=64%

 

この他にも動画の解説途中に突然割り込んでくる主に4択の理解度チェック問題がありますが、これは無制限でトライできます。コース修了条件にも無関係です。

 

理解度チェック問題も週末問題も、応用要素はほとんどないので難易度はそれほど高くはないと思います。講義内容を理解していれば解ける構成になっています。要するに、英語で問題文を把握できて、数式の意味を理解していれば、正しく答えを導き出せる構成になっています。次に問題を解くための理解に必要な数学力はどの程度のものか考えます。

 

講座内では数式が大量に飛び交っていますが、教授はたびたびこう言います。「この式をここでは証明はしない。」

つまり、証明はできなくても数式の意味を理解して、機械学習を実践的に活用できるような配慮をしていると受け取ることができます。

 

私にとっての壁はここになるわけですが、数式の証明と数式の理解の間のさじ加減が実はよくわかっていません(冷や汗)。たとえば、証明がないので、突然式変形が出てきてパニクったりすることがよくあります。

そのため週末クイズが解けないときは理由は明白で、数式の意味の理解不足に還元されるわけです。

 

前提となる基本的な数学知識は、大半が行列です。なので、とりあえず線形代数の参考書を数冊買ってきて、基礎力不足を補おうと思っています。(日本語なので安心?)古本屋で見やすいものを適当にピックアップしてきた程度なのでお薦めしていいものかどうかはよくわからないので個人的にググってみてください。(数Cのチャートとか線形代数の問題演習の本です)

 

また、挫折するだろうと思われる人がこの記事を読んでいると想像した上でこういう話をしているのですが(自分がいつその網に絡めとられてしまうのか…)、原因のNO1は何度も言っていますが数式の意味が理解できないことだと思います。私の場合大学数学をそもそもやっていないので壁にぶつかる可能性は非常に高いです。というか、壁しかないです。「1㎡ の壁に囲まれてどうしようか。ヨシ、両手両足を壁に押し当てて登っていこう!」みたいなノリです。

 

などなどいろいろ問題山積なんですが、こうした事態を打開するために考えた方策は次の通りです。

 

時間をふんだんに使えばなんとかなるかも大作戦。

名付けて時間ナパーム大作戦(ナパームとは絨毯爆撃に使われてたあれです。戦争映画でよく流行ってました 

地獄の黙示録 - Wikipedia

 

週末クイズ問題をいくつかクリアしているのですが、雰囲気で大体これかな?この数式は意味違うよね?とか類推しながらでも解ける問題はあります。しかしこの解き方はあまりよくないですね。やはり内容をしっかり理解した上で解かないと単にコース修了したからといって機械学習の技術向上には貢献しません。しかし類推で解答を導き出せるということは、類推できない問題はやはり間違えるし、なぜ類推できたかと言えばやはり講座解説や数式の意味をおぼろげに理解していたからです。しっかり時間をかけたクイズはやはり解答が出せるし、それを繰り返し時間をかければコース修了まで行けるということです。至極まっとうな話であり、この当たり前の作業を続けられるかそうじゃないかだけが大事なのではないかなというのが現時点の認識です。

 

 

私にとって現状は時間があるのでその時間を大量投下してやってしまおうという部分があるので、通勤されながら受講される方々には参考にならないかもしれません。ただ、その中でも、当講座は11週ですが、10か月以上かけて受講し終える人もいらっしゃるし、どれだけ時間をかけても最後までやり通すことが一番大事なことなのだと思います。諦めない仕組みを考えて、漏れないようにすることも必要になるわけですね。

 

数学ができて、英語ができるようなスーパーエリートの人にとってこんな問題は些細な話かと思いますが、そうじゃない私のような一般人は試行錯誤を重ねて乗り越えていくしかないのです。

 

 

*1:週末クイズと呼びますが、週末にやるクイズという意味ではありません。章立て構成ではなく、あくまでインデックスは週を基準とした「週末クイズ」と呼ぶことにします

*2:コース修了は全体で8割以上?確認していません、ごめんなさい

プログラマーでもなんでもないボクがcourseraで機械学習を始めました

こばわ、蒼志です。しがないツイッタラーからブログデビューすることになりました。

 

さて、タイトルの通り、このたび2017年11月13日23時からcourseraで機械学習を始めました。

どんな人が書いているの?と軽く自己紹介から、主に備忘録、まとめを目的とした学習内容を書き残していこうと思ってます。

 

プロフ

文系(法学部出身)

数学力:高校文系数学レベル(センター試験アベレージ約190)

英語力:英検2級(センター試験アベレージ約190)

プログラミング歴なし(HTML、CSS,PHPはマイビジネスのためたしなみ程度に触った経験)

 

なんか受験がんばった人的なイメージだと思いますが、大体そんなところ。でも実際の数学力、英語力は自信があるような感じではなく、今でも英語は洋ゲーで意味不明な英語文面を読み飛ばす感じだし、1日中youtubeで外国人がしゃべってる動画を垂れ流してもほとんど理解できないような状態です。受験時のプロフ紹介になっているのはそれ以降これといった客観評価できる資格などはないからです。

割と本を読むほうです。

 

きっかけ

 

なんか最近機械学習流行ってんなーやってみたいけど敷居高い気がするとかずっと思ってたんですが、プログラマー需要が高い世の中にどんどんシフトしてきている実感があり、AIやらディープラーニング、データサイエンティストなどの流行り言葉に乗ってみたいミーハー気分で勘違いしちゃった君という自覚の元でチャレンジ中です。

MOOCでのオンライン講義は以前から経験はありますが、単位取得には至っていません。やはり言葉の壁は高いと日々実感しています。

 

どこで何を勉強している?

 

これを読んでる人の大半がプログラマー系の人だと思いますが、ほんと何もわからないど素人が書いていると思ってください。その上でご指摘などあるなら言っていただけるとぬか喜びします。

 

今勉強しているのは、couseraというMOOCのプラットフォームがあります。そこでAndrew Ng教授によるmachine learningのスタンフォード大学提供のオンライン講義を学習しています。

受講は無料だけど、お金を払って認定証(certification)をもらえる有料コースもあります(対外的にスキル証明するための学位のようなもの?)。

www.coursera.org

 

こういったオンライン学習は数年前から世界的に大ブームとなっていますが、最近は最後まで受講し、修了するところまでたどり着ける人が少なく、効果を疑問視するという声もちらほら聞かれます。

 

ですが、この機械学習講座は英語なのですが、字幕があります。そこでたくさんの日本人プログラマーが受講しているという話もいろいろ調べている中でわかりました。

「日本、遅れてる!」と溜息混じりの声がよくSNS界隈で聞こえてきますが、そんなことないのですね。みなさん果敢に挑戦され、ブログでもたくさん参考になる話を収集することができます。挫折しそうになったら、辞める前にいろんなブログを読んでみてください。英語がわからないという人もなんとかかじりついている人もいます。 

 

講義内容は字幕があります。そこまではいいですよね。ただ次に問題になりそうなのが、課題です。各週の講義最後にはクイズ問題がありますがこれが英語になっています。ここは避けようがないのでがんばって英語で解いてください。制限時間はないので、google翻訳を使ってでもやるといいでしょう。動画講義の受講時にもちょっと英語に聞き耳を立てるぐらいの感じでやると課題をやるときの一助となるはずです。

 

まだこれを書いている時点ではweek2の半ばなのですが、octaveという数式処理ソフトをインストール(無料)したり、以降の課題はこのoctaveというソフトを使って提出という形式だと聞いています。そのあたりはまたレビューしたいと思います。

 

参考にしている記事

 

qiita.com

qiita.com

 

必要となる数学力は?

 

高校で全く数学を勉強したことがないという人を除けば、youtubeなどでもキャッチアップのために必要な知識を手に入れられるので壁にぶつかっても問題解決を模索していけたらなあと思います。それを踏まえて数学知識はどんなものが必要かピックアップすると、

 

行列(week1で演算方法の解説があるので知らなくても大丈夫)

ベクトル(数学Bやっていれば多分大丈夫)

いわゆる線形代数ですね。解析学について触れるところもありましたが、教授は特に勉強する必要はないとの主旨でした。

 

 「高校で全く数学を勉強したことがないという人を除けば、」と言った理由は、ツイッターや本などで見聞きしていると、「機械学習は数学力がなくても(アルゴリズムに適用するだけなので)できなくはないが、数式の話になるとそこで躓いてしまって先がない」という話をよく聞きます。

なので、ある程度の数学力は前提にしたほうが良さそうです。数学できないけどがんばりたいという人がいれば、高校数学にまずは力を入れてみるのもいいかもしれませんね。 

 

week1を終えて

内容:イントロダクション、単一変数の線形回帰(コスト関数、最急降下法線形代数(行列)復習

 

所要時間は約3時間半かかりました。クイズも難しいものはあまりなく、クリアしました。先生も動画講義内でここは理解できなくてもいいみたいな話をしてくれることがあり、あまり肩に力を入れずに初学者でも対応している雰囲気はあります。

私自身は文系数学で終えているので、行列や回帰分析の勉強はほぼしたことがありません。「ほぼ」というのは本で多少触れたりした経験がある程度ということです。

そんな人でも大丈夫なのかと言えばがんばればなんとかなると一応思っています。ただし本音を言えば、いつ挫折してもおかしくない、そのときはそのときで潔く諦めようと思っています。week2とweek5が結構難しいという噂レベルの話もあるので、逆にそれらを乗り越えたら修了に近づけるのかもと少しポジティブ寄りに考えています。

 

week2の途中

内容:多変数線形回帰、分析的なパラメータ計算、octave,Matlabチュートリアル

多変量線形回帰で躓き中 うふふ

 

 今のところの感想

私はいつ躓いてもいいのですが、やり始めてみて楽しんでいることに気づきました。明日は挫折するだろうと思いながら軽い気持ちでやっています。

 1週間分を1日ずつやれば全部で11週あるので11日でできるかなと思っていましたが、week2に入ってそれが無理だとわかりました。課題の提出期限があるのでそれを守ることと、とりあえず1か月程度での修了を目標にしています。プログラミング能力もないので明日には挫折している可能性は極めて高いです。