機械学習のためのPython入門 クラスとメソッド編
機械学習にどのようなPythonの知識が必要かは、Python機械学習プログラミング
の監訳者福島 真太朗(ふくしま しんたろう)
さんが以下のように述べられています。
Pythonの文法については、リスト、タプル、ディクショナリなどの基本的なデータ構造、forループ、print関数、zip関数、enumerate関数、関数やクラスの作成方法などが理解できていれば十分です。
そこで今回は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)
importについて
import numpy as np
import
文を使用することで、モジュールやパッケージを呼び出すことができるようになります。
モジュールは複数のファイルをまとめたもののことで、パッケージは複数のモジュールをまとめたものになります。
パッケージやモジュールをimportすることで、他人が作成した機能やコードなどを自分のコードに取り入れることができます。
Pythonの代表的なパッケージとして、ウェブアプリケーションフレームワークのFlask
や数値計算効率化のNumpy
があります。
また、import
文に続けて、as ◯◯
とすることで、◯◯
という名前で、そのパッケージや名前で呼び出せるようになります。
この場合np
でnumpy
を呼び出すことができます。
Numpyについて
Numpyは数値計算ライブラリです。詳しくは説明しませんが、気になる方は以下の記事などを参照してください。
python/numpy - 機械学習の「朱鷺の杜Wiki」
インデント
import
の下には、クラスやメソッドが続いていますが、その前にPythonのインデント構造について学ぶ必要があります。
Pythonは入れ子構造についてインデント(空白)で表現します。そのため、end
などを使用しないのが特徴です。
class Hoge def fuga end def foo end end
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_ = []
なぜクラスが必要なのか
なぜクラスが必要なのかという観点は多々あるかと思います。今回は、機械学習とりわけパーセプトロンを実行する観点から述べます。 パーセプトロンは機械学習アルゴリズムのひとつのため、多数のデータセットから実行されることが求められます。 その際に毎回同じパーセプトロンアルゴリズムの記述をするのは大変です。
そのためクラスを使用して、同じパーセプトロンクラスを使い回す必要があります。
method(メソッド)について
メソッドは、ある処理をまとめたものです。
またメソッドは、def
を使用することで定義できます。
先ほどのパーセプトロンアルゴリズムには、__init__
、fit
、net_input
、predict
というメソッドがありました。
それぞれ以下の処理を担っています。
fit 重みを更新する net_input ベクトルの計算を行う predict クラスラベルを予測する
__init__
メソッドは特殊なメソッドになります。__init__
メソッドはPerceptron
Classが呼び出された時に自動的に一番初めに実行されます。
(パーセプトロン)クラスとメソッドの使用法について
クラスとメソッドについて知ることができたので、その使い方について説明します。
クラスを呼び出す際は、以下のようにします。
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
(トレーニング回数)を求めています。
従って、パーセプトロンクラスのインスタンスを生成する際には、eta
とn_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
メソッドは引数にX
とy
を求めています。従って、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)のデータセットもここから見ることができます。
国立情報学研究所
yahoo,楽天,ニコニコなどのデータがあります。
DATA.GO.JP
日本政府が、保有しているデータを公開したもの。
ちなみに、一番人気は平成25年産野菜生産出荷統計
らしい。
DATA.GOV
DATA.GO.JPが参考にした、オープンデータサイト。こちらは、U.S. Government
のデータになります。
現在、185,967 DATASETS
という膨大なオープンデータを公開している。
※DATA.GO.JPは、17,105 件のデータを公開している。
土地代データ
日本全国の土地代と、その年間推移が載っています。
各種SNS
SNSはAPIを公開しているので、それを利用してデータを取得できます。
Github
参考
機械学習を始めるならAzure Machine Learningがオススメ!
最近機械学習などのAI関連が人気ですが、「とりあえず機械学習(人工知能)を始めたい!」という方は、Azure Machine Learning
がオススメです。
この記事を読んでAzure Machine Learningを始めたい!という方は以下の記事をご覧ください。簡単に始めることができます!
Azure Machine Learningについて
Azure Machine Learningは、クラウドサービスの一種で、機械学習を用いたアプリケーションを簡単に構築することができます。
簡単に使用できる
Azure Machine Learningは、エンジニアでない一般の人が人工知能を使用したサービスを作れるように、という思いのもと生まれました。 そのため、最初から機械学習のアルゴリズムが用意されており、それをクリック&ドラッグすることで、機械学習の処理を作成することができます。コードを書かなくても、プロと同じアルゴリズムを使用することができます。
印象として、初学者向けのプログラミング言語である。Scratchに似ているかと思います。
自分の作成した処理を公開でき、実際に自分で利用できる
自分の作成した処理をWebAPIとして公開できるのも特徴の一つです。もちろん他人が作成した、処理を使用することも可能です。 実際に公開して、収益化している人達もいます。
環境構築をする必要がない
Azure Machine Learningはプログラミングをする上で、必須な環境構築をする必要がありません。
例えば、Pythonで機械学習を行おうとすると、周辺のライブラリを入れるのに手間がかかります。Numpy,scikit-learn,etc....
しかしAzure Machine Learningはクラウドサービスのため、インターネット環境とブラウザさえあれば、機械学習を始めることができます。
実際に、Azure Machine Learningでどのようなことができるのか
Azure Machine Learningの使用例を見てみましょう。
ある個人が 1 年間に 50,000 ドル以上の年収を得られるかどうかを予測
個人の特徴(年齢・済んでいる場所・職種...)から、その人が50,000 ドル以上の年収を得られるかどうかを予測することができる
自動車の価格を予測する
自動車の大きさ、メーカー、馬力などから、その自動車の価格を予想します。
何を学べば、Azure Machine Learningを使いこなせるようになるのか
Azure Machine Learningは、コードを書かなくても良いといっても、アルゴリズムやデータセットは自分で選択しなければなりません。 そのため、それらを使いこなせる知識が必要となります。
これらの知識を学ぶためには、couseraのMachine Learningがオススメです。 数学的知識もほとんど必要なく、機械学習について始めることができます。 英語なのが難点ですが、日本語字幕があるため問題ないかと思います。
Azure Machine Learningの登録方法について
Azureを使用する方法には、通常の会員登録をし無料クレジットをもらって使用する方法と、会員登録せず使用する方法があります。 今回は、通常の会員登録をする方法を紹介します。
また実際に、Azure Machine Learningを使用してみたい方はこちらを。
Microsoftアカウントの作成をする
以下のリンクからMicrosoftアカウントの作成をしましょう。既に持っている方は不要です。
Azureに登録する(無料会員で進みたい方は↓へ進む)
以下のサイトに移動します。
移動後、今すぐ購入ボタンをクリックして、ログイン画面に遷移します。
遷移後、先ほど登録したMicrosoftアカウントでログインします。
すると、サインアップ画面に移るので、登録しましょう。
Azure Machine LearningのWorkspaceを作成する
サインアップが完了すると、少々待つ必要があります。 この画面が表示されたら、サービスの管理を開始するボタンをクリックします。
クリックすると、ダッシュボードに移動するので
新規をクリックして、Machine Learningと入力します。
Machine Learningをクリックします。
作成をクリックします。
ワークスペース名とアカウント名は適当なものを入力します。(他人と名前が被っていると登録できないので注意) 場所はasiaに変更しましょう。
編集後、右下の作成ボタンをクリックして、ワークスペースが作成されるまでしばし待ちます。
以上のようにワークスペースが作成されれば完了です。
会員登録しない場合について
会員登録しない場合、様々な制限がありますが、会員登録せずAzureMachineLearningを使用することができます。
※制限の詳細は以下のリンクより確認してください。