Beginning AI

統計学・経済学・機械学習を用いて、ほんの少し。世界をもっと良くしてみたい。

機械学習のためのPython入門 クラスとメソッド編

機械学習にどのようなPythonの知識が必要かは、Python機械学習プログラミングの監訳者福島 真太朗(ふくしま しんたろう)さんが以下のように述べられています。

Pythonの文法については、リスト、タプル、ディクショナリなどの基本的なデータ構造、forループ、print関数、zip関数、enumerate関数、関数やクラスの作成方法などが理解できていれば十分です。

thinkit.co.jp

そこで今回はPythonで書かれた機械学習のコードを読めるように、リスト、タプル、ディクショナリなどの基本的なデータ構造、forループ、print関数、zip関数、enumerate関数、関数やクラスの作成方法について学んでいきます。 従ってこの記事は、Pythonを一度もやったことがなく、機械学習のためにPythonを学びたいという人向けです。

今回読み解くPythonコードについて

今回は題材として、パーセプトロンアルゴリズムを使用します。 このコードを完全に理解するためには、機械学習の知識とNumpyの知識が必要になります。 しかし、今回の目的はPythonの基本を学ぶことであるため、それらの解説は省きます。

import numpy as np

class Perceptron(object):
    def __init__(self, eta=0.01, n_iter=10):
        self.eta = eta
        self.n_iter = n_iter

    def fit(self, X, y):
        self.w_ = np.zeros(1 + X.shape[1])
        self.errors_ = []

        for _ in range(self.n_iter):
            errors = 0
            for xi, target in zip(X, y):
                update = self.eta * (target - self.predict(xi))
                self.w_[1:] += update * xi
                self.w_[0] += update
                errors += int(update != 0.0)
            self.errors_.append(errors)
        return self

    def net_input(self, X):
        return np.dot(X, self.w_[1:]) + self.w_[0]

    def predict(self, X):
        return np.where(self.net_input(X) >= 0.0, 1, -1)

github.com

importについて

import numpy as np 

import文を使用することで、モジュールやパッケージを呼び出すことができるようになります。 モジュールは複数のファイルをまとめたもののことで、パッケージは複数のモジュールをまとめたものになります。

パッケージやモジュールをimportすることで、他人が作成した機能やコードなどを自分のコードに取り入れることができます。 Pythonの代表的なパッケージとして、ウェブアプリケーションフレームワークFlask数値計算効率化のNumpyがあります。

また、import文に続けて、as ◯◯とすることで、◯◯という名前で、そのパッケージや名前で呼び出せるようになります。

この場合npnumpyを呼び出すことができます。

Numpyについて

Numpyは数値計算ライブラリです。詳しくは説明しませんが、気になる方は以下の記事などを参照してください。

python/numpy - 機械学習の「朱鷺の杜Wiki」

インデント

importの下には、クラスやメソッドが続いていますが、その前にPythonのインデント構造について学ぶ必要があります。 Pythonは入れ子構造についてインデント(空白)で表現します。そのため、endなどを使用しないのが特徴です。

Ruby

class Hoge
  def fuga
  end

  def foo
  end
end

Python

class Hoge
  def fuga

  def foo

class(クラス)について

クラスを定義することで、データやメソッドをまとめることできます。

以下の場合、Perceptronというクラスが、__init__fitというメソッドやself.eta,self.w_というデータをまとめているのがわかるかと思います。

class Perceptron(object):
    def __init__(self, eta=0.01, n_iter=10):
        self.eta = eta
        self.n_iter = n_iter

    def fit(self, X, y):
        self.w_ = np.zeros(1 + X.shape[1])
        self.errors_ = []

なぜクラスが必要なのか

なぜクラスが必要なのかという観点は多々あるかと思います。今回は、機械学習とりわけパーセプトロンを実行する観点から述べます。 パーセプトロン機械学習アルゴリズムのひとつのため、多数のデータセットから実行されることが求められます。 その際に毎回同じパーセプトロンアルゴリズムの記述をするのは大変です。

f:id:lasershow151:20161011231131p:plain

そのためクラスを使用して、同じパーセプトロンクラスを使い回す必要があります。

f:id:lasershow151:20161011231207p:plain

method(メソッド)について

メソッドは、ある処理をまとめたものです。 またメソッドは、defを使用することで定義できます。

先ほどのパーセプトロンアルゴリズムには、__init__fitnet_inputpredictというメソッドがありました。 それぞれ以下の処理を担っています。

fit 重みを更新する
net_input ベクトルの計算を行う
predict クラスラベルを予測する

__init__メソッドは特殊なメソッドになります。__init__メソッドはPerceptronClassが呼び出された時に自動的に一番初めに実行されます。

パーセプトロン)クラスとメソッドの使用法について

クラスとメソッドについて知ることができたので、その使い方について説明します。

クラスを呼び出す際は、以下のようにします。

Class名()

従って、パーセプトロンクラスを呼び出す時は、

Perceptron()

とします。

クラスにあるメソッドを呼び出す際は、まずそのクラスのインスタンスを呼び出します。 ※インスタンスメソッドを呼び出すことを想定しています。クラスメソッドはこの限りではありません。

ppn = Perceptron()

ppnというPerceptronクラスのインスタンスを作成しました。 インスタンスを作成することができたら、後はメソッドを呼び出すだけです。 実際にfitメソッドを呼び出してみます。

ppn.fit

このようにインスタンス名.メソッド名とすることでインスタンスが属しているクラスのメソッドを呼び出すことができます。

引数について

先ほど、クラスとメソッドの呼び出し方について説明しました。 しかし実際には、パーセプトロンクラスとそのメソッドは、データをもとにパーセプトロンアルゴリズムを実行するものなので、呼び出す際にデータを渡してあげる必要があります。

例えば、先ほどのパーセプトロンクラスのインスタンスを生成した場面に戻ります。 パーセプトロンクラスには、__init__メソッドがあり、クラスを呼び出すと自動的に呼び出されるため、__init__メソッドが求めるデータを引数として渡す必要があります。

    def __init__(self, eta=0.01, n_iter=10):
        self.eta = eta
        self.n_iter = n_iter

みると__init__メソッドは、eta(学習率)とn_iter(トレーニング回数)を求めています。

従って、パーセプトロンクラスのインスタンスを生成する際には、etan_iterを引数として渡してあげる必要があります。

ppn = Perceptron(eta=0.05, n_iter=100)

同様にメソッドもどのような引数を求められているかを把握する必要があります。

    def fit(self, X, y):
        self.w_ = np.zeros(1 + X.shape[1])
        self.errors_ = []

fitメソッドは引数にXyを求めています。従って、fitメソッドを呼び出す際は以下になります。

ppn.fit(X,y)

※Xとyには具体的な値が入ります。

ここまででクラスとメソッドとその使い方について知ることができました。 次回からはクラスとメソッド中に記載されているリスト、タプル、ディクショナリなどの基本的なデータ構造、forループ、print関数、zip関数、enumerate関数について説明します!

機械学習に使える、オープンデータ一覧 ※随時更新

機械学習をやりたいんだけど、データがない!他のデータ使ってみたい! そんな方のために、機械学習に使えるオープンデータを集めました。

他にも、このデータセットオススメ!というものがあれば、是非ご紹介して頂けると嬉しいです。m(__)m

UC Irvine Machine Learning Repository

カリフォルニア大学アーバイン校が公開した、データセット。351件のデータセットがあり後述する DATA GO に比べれば少ないが、ほとんどがMachine Learning用のデータ・セットなので、かなりオススメ。

UCI Machine Learning Repository

かの有名なあやめの花(iris)のデータセットもここから見ることができます。

f:id:lasershow151:20161011231501p:plain

国立情報学研究所

情報学研究データリポジトリ データセット一覧

yahoo,楽天,ニコニコなどのデータがあります。

DATA.GO.JP

日本政府が、保有しているデータを公開したもの。

www.data.go.jp

ちなみに、一番人気は平成25年産野菜生産出荷統計らしい。

平成25年産野菜生産出荷統計 - DATA GO JP

DATA.GOV

DATA.GO.JPが参考にした、オープンデータサイト。こちらは、U.S. Governmentのデータになります。 現在、185,967 DATASETSという膨大なオープンデータを公開している。
※DATA.GO.JPは、17,105 件のデータを公開している。

www.data.gov

土地代データ

www.tochidai.info

日本全国の土地代と、その年間推移が載っています。

各種SNS

SNSAPIを公開しているので、それを利用してデータを取得できます。

Twitter

dev.twitter.com

Facebook

developers.facebook.com

Github

matome.naver.jp

参考

matome.naver.jp

DataSet - 機械学習の「朱鷺の杜Wiki」

openlabs.go.jp

機械学習を始めるならAzure Machine Learningがオススメ!

最近機械学習などのAI関連が人気ですが、「とりあえず機械学習人工知能)を始めたい!」という方は、Azure Machine Learningがオススメです。

この記事を読んでAzure Machine Learningを始めたい!という方は以下の記事をご覧ください。簡単に始めることができます!

blog.beginning-ai.com

Azure Machine Learningについて

Azure Machine Learningは、クラウドサービスの一種で、機械学習を用いたアプリケーションを簡単に構築することができます。

簡単に使用できる

Azure Machine Learningは、エンジニアでない一般の人が人工知能を使用したサービスを作れるように、という思いのもと生まれました。 そのため、最初から機械学習アルゴリズムが用意されており、それをクリック&ドラッグすることで、機械学習の処理を作成することができます。コードを書かなくても、プロと同じアルゴリズムを使用することができます。

印象として、初学者向けのプログラミング言語である。Scratchに似ているかと思います。

f:id:lasershow151:20161011231612p:plain

自分の作成した処理を公開でき、実際に自分で利用できる

自分の作成した処理をWebAPIとして公開できるのも特徴の一つです。もちろん他人が作成した、処理を使用することも可能です。 実際に公開して、収益化している人達もいます。

Cortana Intelligence Gallery

環境構築をする必要がない

Azure Machine Learningはプログラミングをする上で、必須な環境構築をする必要がありません。
例えば、Python機械学習を行おうとすると、周辺のライブラリを入れるのに手間がかかります。Numpy,scikit-learn,etc....
しかしAzure Machine Learningはクラウドサービスのため、インターネット環境とブラウザさえあれば、機械学習を始めることができます。

実際に、Azure Machine Learningでどのようなことができるのか

Azure Machine Learningの使用例を見てみましょう。

ある個人が 1 年間に 50,000 ドル以上の年収を得られるかどうかを予測

個人の特徴(年齢・済んでいる場所・職種...)から、その人が50,000 ドル以上の年収を得られるかどうかを予測することができる

f:id:lasershow151:20161011231650p:plain

自動車の価格を予測する

自動車の大きさ、メーカー、馬力などから、その自動車の価格を予想します。

f:id:lasershow151:20161011231726p:plain

何を学べば、Azure Machine Learningを使いこなせるようになるのか

Azure Machine Learningは、コードを書かなくても良いといっても、アルゴリズムやデータセットは自分で選択しなければなりません。 そのため、それらを使いこなせる知識が必要となります。

これらの知識を学ぶためには、couseraのMachine Learningがオススメです。 数学的知識もほとんど必要なく、機械学習について始めることができます。 英語なのが難点ですが、日本語字幕があるため問題ないかと思います。

www.coursera.org

Azure Machine Learningの登録方法について

Azureを使用する方法には、通常の会員登録をし無料クレジットをもらって使用する方法と、会員登録せず使用する方法があります。 今回は、通常の会員登録をする方法を紹介します。

また実際に、Azure Machine Learningを使用してみたい方はこちらを。

blog.beginning-ai.com

Microsoftアカウントの作成をする

以下のリンクからMicrosoftアカウントの作成をしましょう。既に持っている方は不要です。

Microsoft account

Azureに登録する(無料会員で進みたい方は↓へ進む)

以下のサイトに移動します。

azure.microsoft.com

移動後、今すぐ購入ボタンをクリックして、ログイン画面に遷移します。

f:id:lasershow151:20161011231822p:plain

遷移後、先ほど登録したMicrosoftアカウントでログインします。

すると、サインアップ画面に移るので、登録しましょう。

Azure Machine LearningのWorkspaceを作成する

サインアップが完了すると、少々待つ必要があります。 この画面が表示されたら、サービスの管理を開始するボタンをクリックします。

f:id:lasershow151:20161011231912p:plain

クリックすると、ダッシュボードに移動するので

f:id:lasershow151:20161011231943p:plain

新規をクリックして、Machine Learningと入力します。

f:id:lasershow151:20161011232008p:plain

Machine Learningをクリックします。

f:id:lasershow151:20161011232141p:plain

作成をクリックします。

f:id:lasershow151:20161011232236p:plain

ワークスペース名とアカウント名は適当なものを入力します。(他人と名前が被っていると登録できないので注意) 場所はasiaに変更しましょう。

編集後、右下の作成ボタンをクリックして、ワークスペースが作成されるまでしばし待ちます。

f:id:lasershow151:20161011232221p:plain

以上のようにワークスペースが作成されれば完了です。

会員登録しない場合について

会員登録しない場合、様々な制限がありますが、会員登録せずAzureMachineLearningを使用することができます。
※制限の詳細は以下のリンクより確認してください。

azure.microsoft.com