読者です 読者をやめる 読者になる 読者になる

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

Azure Machine Learningで超簡単に機械学習を始めてみよう!

何をするのか

今回は、Azure Machine Learningを使って、自動車の価格予想を機械学習で行います。 自動車の様々な特徴(エンジンの種類、メーカー、ドアの数)から価格を予想することを目指します。

f:id:lasershow151:20161011231726p:plain

また、この記事は実際に手を動かすことを前提としています。 Azureの説明はしません!さっそく以下のリンクからAzureの登録をしましょう! ちなみに、無料な上に2万分のAzureクレジット(一ヶ月内有効)がもらえます。

azure.microsoft.com

※詳細のAzure登録方法が知りたい方はこちらを

blog.beginning-ai.com

Experimentを作成する

※この記事用のworkspaceが一つあるという前提で、進めていきます。

Azure Machine Learningでは基本的に、Experiment上で作業を行います。 Experimentを作成するために、フッターにあるNewボタンをクリックします。

f:id:lasershow151:20161011232418p:plain

Newボタンをクリックすると、以下の様な画面が現れるので、EXPERIMENTをクリックし、Blank Experimentを選択します。

f:id:lasershow151:20161011232444p:plain

データをセットする

機械学習を行うためには、データが必要です。 今回は、サンプルデータを使用します。

Azure Machine Learning には、予めサンプルデータセットが容易されているので、それを利用します。 今回は、自動車の値段とその自動車の特徴が含まれているデータセットを利用します。

f:id:lasershow151:20161011232500p:plain

使用する特徴を選択する

データセットの中には、様々なデータセットがありますが、今回は以下の特徴を選択します。

  • price(値段)
  • engine-type(エンジンのタイプ)
  • make(車のメーカー)
  • fuel-type(燃料のタイプ)
  • num-of-doors(ドアの数)
  • body-style (車の種類)
  • engine-location (エンジンの場所)

データセットの特徴を選択するためには、Select Colums in Datasetsを使用します。

f:id:lasershow151:20161011232513p:plain

Select Colums in Datasetsを設置することができたら、実際にデータセットのカラムを選択します。 設置したSelect Colums in Datasetsをクリックして、Launch column selectorをクリックします。

f:id:lasershow151:20161011232526p:plain

カラムを選択し、チェックボタンをクリックします。

f:id:lasershow151:20161011232537p:plain

これで、カラムを選択することができました。 最後に、Automobile price data (Raw)とSelect Colums in Datasetsを繋げましょう。

f:id:lasershow151:20161011232559p:plain

欠損があるレコードを削除する。

サンプルデータには、欠損があるレコードがあります。欠損があると予測の結果が大きく変わってしまうため、そのデータを削除します。

f:id:lasershow151:20161011232611p:plain

Clean Missing Dataを利用して、欠損しているデータを削除します。

f:id:lasershow151:20161011232625p:plain

Clean Missing Dataを配置することができたら、Clean Missing Dataを、Select Colums in Datasetsに繋げましょう。

学習用データ分を確保する

機械学習を行う時は、データセットを学習させる用とテストする用に分けるのが一般的です。 今回は、学習用に70%のデータ・セットを使用します。データセットを分離させるためには、Split Dataを使用します。

f:id:lasershow151:20161011232637p:plain

Split Dataをクリックして、Fraction of rows in the first output datasetの項目を、0.7に設定します。

f:id:lasershow151:20161011232651p:plain

Train Modelを配置する

データセットを用意することができたので、実際に機械学習のロジックを構築していきます。 Train Modelを配置して、Split Dataと繋げましょう。 この際、Split Dataの左とTrain Modelの右を繋げます。

f:id:lasershow151:20161011232701p:plain

機械学習アルゴリズムを選択する

今回は、住宅価格予測(回帰問題)のため、Linear Regressionを選択します。 Linear Regressionを配置し、Train Modelと繋げます。

f:id:lasershow151:20161011232724p:plain

次に、予測したいカラムを選択します。住宅価格予測のため、priceを選択します。

f:id:lasershow151:20161011232734p:plain

f:id:lasershow151:20161011232745p:plain

これで、学習用のロジックを作成することができました。 予測するためのロジックを用意することができたので、最後に30%のデータセットを使用して、どのくらいそのロジックが正しいが評価してみましょう。

評価用のロジックを実装する

Score Modelを配置して、Train ModelとSplit Dataに繋げます。

f:id:lasershow151:20161011232756p:plain

これで完成です。Runボタンを押して、評価結果を確認しましょう。

結果を確認する

Score Modelの丸枠をクリックして、Visualizeをクリックします。

f:id:lasershow151:20161011233035p:plain

すると、評価されたデータを確認できます。 左が実際の価格で、右が予測した価格です。

f:id:lasershow151:20161011232824p:plain

これで、機械学習の入門をすることができました。
AzureMachineLearningを使用することで、コードを書かずに簡単に機械学習を行うことができます。 また、今回作成した、アルゴリズムを使用して、データさえ用意できれば、自分の回帰問題を解決することができます。

もっと学びたい!

Azure Machine Learningでもっとやってみたいという方は、さわってわかる機械学習 Azure Macine Learning 実践ガイドだったり、Azure Machine Learning のチュートリアルをやってみるのが良いかと思います。

azure.microsoft.com

さわってわかる機械学習 Azure Macine Learning 実践ガイド

参考 

azure-content-jajp/machine-learning-create-experiment.md at master · Azure/azure-content-jajp · GitHub