nykergoto’s blog

機械学習とpythonをメインに

PRML

ついに来たかというか、もう逃げられなくなったというか、機械学習について研究をするわけではないけれどそれの周辺分野を扱うんだから、一回は読んどかないとねと思っては居たのだけれど、やっぱりまとまった時間を取らないとクリアできない本であるし、なかなか面倒だなぁというのが先行して今まで放置していました。

しかし最近、大学でアドバイザー面接というものがあって、それは他の研究室の先生が一人自分の所属する研究室の教授とは別にあてがわれて、その先生と半期に一回面談をするというものなのだけれど、その時に「機械学習アルゴリズム改良したいのですが、まだちゃんとは方針決まってないんですよね。後期からは頑張りますんでよろしくお願いします先生」っていう感じでお話をしたら、「それならうちの研究室でPRML読んでるから、是非参加してみない?」とお誘いがかかったのです。

一人で読むのはまあ無理だと諦めていたところだったので、これは良い機会だと思いその場で「行きます!」と宣言し、ちょうど同じ時間にやっていたPRML輪読会に参加することになりました。

やはり、自分の所属する研究室とはメンバーも文化も違うので、輪読会の雰囲気もちょっと違っていて、その研究室で僕を招待してくれた同期の学生は「軽いノリのゼミだから」と言っていたが、和気あいあいとした中で、わからないとこはちゃんと質問をして、みんなでディスカッションをして解決することを、自然な流れてできていたのは素晴らしいなと思ったし、見習わないといけないところだな、と感じました。やはり、発表者以外は置いてけぼりのあるゼミほど、悲しい物は無いのです。


そういうわけで、面白そうなゼミに参加できる事になりました。

出てみて感じるのは、やはり、だれかと一緒に同じものを読む、というのはやる気が出るものであって、刺激になるなということ.早速前期にゼミで読み進めていたところまでを復習して追いつくべく勉強中です(現在p.91)。

適宜進捗とかを書いていって、さぼらないように進めていきたいなぁと思っています。

Pythonの日本語に対する厳しさ

タイトルのとおりです。詰まりました。一応どうやったらどうなったかを書いておこうと思うのですが、なぜそうなったのか文字コードについてほとんど全くわかっていない、それはすなわちASCIIだのunicodeだのShiftJISだのの違いがいまいちわかっていないって言うことなんですが、そんなゆとりな知識しかないので、そのうちこれについてちゃんと勉強しないと行けないなと感じている次第です。夏休みの課題の一つとしたいです。

さて、本題です。書いたコードは以下の様。

class FirstClass:
    """コメントは3重クォーテーションで"""
    ID = 0
    def __init__(self,value,name):
        """constructor!
        基本的にインスタンス変数はコンストラクタで初期化しましょう
        これはC#とかでも見習ったほうがいいかもしれん
        """
        self.data = value
        FirstClass.ID += 1
        self.id = FirstClass.ID
        self.name = name

    def setdata(self,value):
        self.data = value
    def display(self):
        print self.data
        return

インスタンス変数は明示的に書くんじゃなくてコンストラクタ、もしくは一般のメソッド(なんというゆるふわ感!)で定義していくんやなー、クラスに属する変数は明示的に書くんやな、なんかC#のprivateとpublicで分けて書くよりインスタンスかそれともクラスかどちらに属しているのかわかりやすいなぁなんて言いながら書いていました。

それで、ふとclass.__doc__でコメントも参照できるよ!っていうのが書いてあったので、面白い機能だなと思ってこのFirstClassに適応してみました。

>>> print FirstClass.__doc__
ã³ã¡ã³ãã¯3éã¯ã©ã¼ãã¼ã·ã§ã³ã§

なんか文字化けしました。
とりあえずGoogleに聞くと、ファイルの先頭でutf-8encodingを指定したら良いよ、という記事が何個かヒットしたので試します。ちなみにこんなの。

# -*- encoding:utf-8 -*-

結果

>>> # -*- coding: utf-8 -*-
... 
... class FirstClass:
...     """コメントは3重クォーテーションで"""
...     ID = 0
...     def __init__(self,value,name):
...         """constructor!
...         基本的にインスタンス変数はコンストラクタで初期化しましょう
...         これはC#とかでも見習ったほうがいいかもしれん
...         """
...         self.data = value
...         FirstClass.ID += 1
...         self.id = FirstClass.ID
...         self.name = name
... 
...     def setdata(self,value):
...         self.data = value
...     def display(self):
...         print self.data
...         return
... 
  File "<stdin>", line 0
SyntaxError: encoding declaration in Unicode string

Unicode文字列なのになんでエンコード指定してくんの?ってことでいいんですかね。警告されました。どうやら、文字列の変数の中に日本語が入ってくる場合は先のエンコード指定をしてやればOKみたいなのですが、コメントアウト部分に日本語があるとそうは行かないみたいです…(ちょっとこの辺あってるかどうか微妙です。今のところの自分の想像)

なので他の方法を調べていたら、文字化けしたところだけデコードしてやればいいよっていうのがありました。文字列に対して、string.decode("<適当なエンコード>")としてやれば良いみたい。

>>> print FirstClass.__doc__.decode("utf-8")
コメントは3重クォーテーションで

なんかうまいこと行きました。

とりあえずこれで当分しのぎます。

はじめます

print "Hellow World"

僕が今所属している研究室では、だれが言い出したか知りませんが、なんとなーくpythonが流行りのようで、数値実験にはみんなpythonを使っているみたい.

僕はプログラム言語の中身についてまで詳しくしらないので、何が早いだとか、内部がどうなっているだとかは、あまりこれまで考えてこなかったので(まあ趣味でやる分にはスピードはそこまで要求されないしね)、C#だとかTypescriptだとかjavascript,HTML5,css3とかミーハーなところしかやってこなかったわけです.

C#を使っている理由はいたって簡単で、VisualStudioが便利だったから.ただそれだけです.
初めてVisualStudioを起動してC#Consoleアプリをつくろうと思った時のあのIntelliSenseがごんごん効いていく感じ、アレが快感で抜け出せなくなったのです.もう最近は、脳味噌がゆるゆるになってしまっているので、関数がどうなってるだとかメンバ変数がどうだとか、全然覚えられないのでそれを痒いところに手が届く用に「ほら、忘れんなよ坊主」と言ってくれるVisualStudioに惚れてしまったのです.ま、他にもIntelliSenseだけならやってくれるソフトはゴマンと有ることにも、その後知るわけですが、どうも移行するのが面倒というか、新しいことを学習するコスト関数があまりにもヘビーだったので、ずっとVisualStudioの殻に閉じこもってたというわけです.

HTMLとかCSSとかも、見た目でどうなるかすぐわかるっていう理由で好きなので、やっぱり即効性のあるもんじゃないと僕は長続きしないというか、やる気がでないのかもしれない.うーん、って唸ってる間に苛ついてやめちゃうんですよね、駄目なんだけどさ.

でも今回は外部からの要因があります.実際自分で数値実験をしなくてはならなくなってしまったのです.なので、pythonを一から勉強しないといけなくなってしまったので、さーはじめるかとやる気を出して居る最中で、やる気出すならついでに記録もつけとかないと絶対色々忘れるよな、というのにも気づいたので、こうやって記録をつけることにしました.なのでこのブログは僕の進捗日記のようなものとして使いたいなと思っています.

とりあえず今のところ、python2.7を導入して、anacondaとかいういろんなパッケージが入った便利版pythonがあったり、visualstudioでもpythonが使える(!)とか、matplolib(pythonの有名パッケージ)をどうやってもimportしてくれなくて心が折れかけたりとか、再起動したら何故か何事もなかったかのように動き始めたりとか、もう絶対外部要因が無ければ心折れてやめてるようなことが多々発生してますが、僕は今日も元気に生きています.

ぐんない.はろーわーるど.