経理マンによる機械学習入門


この記事は主に以下の方に向けて書かれています。

この記事には以下の内容が書かれています。


機械学習とは

先日のエントリーの中で機械学習という言葉が出てきました。今後AIツールから出力される結果を業務に活用するためには、最低限のAIリテラシーが必要であり、そこには機械学習の素養も含まれると思われます。

機械学習とは、一言でいえば、データの集合からその法則性を計算処理によって学習し、そして未知のデータに対して予測を行うことです。法則性を導くというと回帰分析が有名ですが、もっと複雑な関係性をもったものでも、機械学習でモデルを構築して、予測に活かすことができます*1

機械学習では特徴量(予測モデルに入力するデータ)として何を選ぶか(データのどこに着目するか)が、精度を上げるために重要です。画像データなど高次元のデータを分析する場合、生データそのものを対象に分析しても精度が上がらず、何らかの手法で特徴抽出して次元削減するなど、特徴量を設計する事前作業が不可欠になるのです。かつては人間自らが職人芸的に特徴量の設計を行っていましたが、この特徴抽出作業を自動化する技術として深層学習(Deep learning)が登場して(2012年)、一気に人工知能がブームとなりました。このあたりの流れについては、2015年発行と少し古いですが、有名な入門書である 松尾豊著『人工知能は人間を超えるか』(角川EPUB選書)が参考になります*2

機械学習について学ぶには

さて、教養として通り一遍の知識を身につけるということであれば、上記の本など入門書を数冊読めば十分ですが、今の時代、誰でも簡単に機械学習を始める環境が整っていますので、是非、そこまで足を踏み入れてみると面白いと思います。最先端の機械学習の理論を学んで、それをゼロから組み立てて実装(プログラミング)することは、AI研究者ではない一般人には難しいですが、オープンソースとして再利用できるプログラムをまとめた、機械学習用の便利な「ライブラリ」が存在しますので、これを使えば簡単に機械学習を試してみることができます。

私も、最近の人工知能ブームで興味を持ったので、少し学習を進めてみました。門外漢の経理マンとして、入門書の次に何を行ったか、簡単に書いてみます。

まず、機械学習ではPythonというプログラミング言語が一般的に使われていますので、本格的に機械学習を始めるにはPythonを学ぶことから始める必要があります。Pythonは他のプログラミング言語と比べても非常に初心者向きの言語だと思いますので*3、プログラミングの最初の一歩としては良いと思います。

オンライン学習

機械学習の入門書はたくさん出ていますが、私は、主にPyQというオンラインサービスの機械学習コースを受講して、概要を一通り学習しました。

機械学習やプログラミングのオンラインでの勉強方法は、「Python オンラインスクール」などで検索すれば網羅的に情報を集められると思いますので、私が実際に体験したものに限って、簡単にご紹介します。本を見ながらプログラミングをするのは、物理的な本の厚みなどもあって意外と面倒ですが、これらのサービスは、画面上に表示されるプログラムを見ながらの学習になるので、とても楽です。またブラウザ上で操作するため、プログラミングのための環境構築も不要で、思い立ってから5分もかからずに学習をスタートできます。

なお、以下の情報はいずれも2019年5月現在のものとなります。

Progate

prog-8.com

Progateは、完全なる初心者向けのオンライン学習サービスで、Pythonに限らず、JavaRubyPHPなど様々なプログラミング言語を学習することができます。私はPythonそのものの知識がなかったため、まずはProgateでPythonの文法について学習しました。

Progateは初心者が挫折しない工夫が随所に感じられ、特にプログラミング初心者にはオススメです。さらに、コースの一部は無料で受講できますので、最初の一歩として始めるには最適です。たとえば、Pythonのコースは全5コースありますが、最初の1コース目は無料です。

有料プランも980円(税込)/月と非常に安価で、全てのプログラム言語の学習コンテンツを利用できます。Pythonのコースの所要時間は約10~15時間ですので、その気になれば週末の2日間、そうでなくても1ヶ月で十分完了できると思います。

簿記検定でたとえると、ここまで終わらせると、日商簿記3級のテキストを読み終えたくらいのレベルに到達できる、というイメージかと思います。

PyQ

pyq.jp

PyQでは、Pythonの基本的なプログラミングから、データ分析、機械学習など応用的な使い方まで、幅広く学習できます。Progate同様、画面を見ながら、自分で手を動かしてブラウザ上でプログラムを書いていく写経が中心であり、ストレスなく大量のコードを書くことで、効率よく学習を進められます。料金は2,980円(税込)/月で、PyQの全ての学習コンテンツを利用することができます。

機械学習に関しては、

といったコースがあり、上記の項目を学習することができます(基本的に数学の知識は不要です)。ProgateでPythonの文法の基本を学んだとはいえ、まだPythonのプログラムに慣れていない方は、

  • Pythonはじめの一歩
  • Python初級
  • Python文法速習(プログラミング経験者向け)

などのコースでPythonでのプログラミングの経験を積んでから、機械学習コースに進んでも良いと思います。なお、機械学習を経験するだけであれば、「Python中級」コースまでは取り組まなくても大丈夫だと思います。

PyQでPythonの復習や機械学習のコースを終わらせるのに、大体50~60時間くらいかかると思います。簿記検定で例えると、ここまで終わらせると、日商簿記2級にギリギリ合格できるくらいのレベル(≒実務のエントリーレベル)に到達できる、というイメージかと思います。

Chainer チュートリアル

tutorials.chainer.org

日本唯一のユニコーン企業価値10億ドル以上で未上場の企業)として名高い、東大発AIベンチャーの㈱Preferred Networks。ディープラーニング用のライブラリChainerを開発していることでも有名ですが、Python の基礎から、機械学習ディープラーニングの理論の基礎とコーディングまでを幅広く解説する学習コンテンツを、2019年4月10日に無料公開しています。同社が機械学習ディープラーニングの入門として必要最低限と考えている領域をカバーしています。

大学の講義資料として利用されることも想定しているようで、理科系の大学学部生以上が対象であることから、ハードルがやや高いですが、私自身は今後この教材を用いて学習を進めてみたいと考えています。具体的には、以下のような項目を学習できます(一部は現在制作中)。

Pythonでの機械学習の流れ

Pythonのライブラリ(pandas, scikit-learn)を用いると、基本的には以下のステップで機械学習を行うことができます。csv形式のデータファイルから機械学習で分類(classification)*4を行うことを念頭に、プログラムと合わせて手順を紹介します。プログラムの説明は割愛しますが、簡単であることを実感していただければと思います。

1. データを読み込む

pandasのread_csv関数で、csvファイルを読み込み、説明変数Xと目的変数yを取得します*5。説明変数Xから目的変数yを予測するモデル(y = f(X)という関係)を機械学習で構築することが目的となります。なお、Pythonの慣例として、説明変数は大文字、目的変数は小文字にします。

import pandas as pd
df = pd.read_csv('sample.csv')
df.head()  # 読み込んだデータの内容の一部を確認

X = df.iloc[:, :-1].values  # 最後の列以外の全列を説明変数と仮定
y = df.iloc[:, -1].values  # 最後の列を目的変数と仮定

2. 学習用、テスト用にデータを分割する

scikit-learn のtrain_test_split関数を用いることで、簡単にデータを学習用とテスト用に分割できます*6

from sklearn.model_selection import train_test_split
(X_train, X_test, y_train, y_test) = train_test_split(X, y, test_size=0.3)

3. 機械学習のモデルを作成する

scikit-learn のLogisticRegression(ロジスティック回帰)など、機械学習の様々なモデルを簡単に作成できます。例として代表的な3つのアルゴリズムについてプログラムを紹介しますが*7、それぞれの内容についての説明は割愛します*8

# ロジスティック回帰を用いる場合
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression(C=10)  # Cは逆正則化パラメーター

# 決定木を用いる場合
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(max_depth=3)  # max_depthは決定木の深さ

# サポートベクターマシンを用いる場合
from sklearn.svm import SVC
clf = SVC()

4. 学習を行い、モデルをテストする

学習用データにfit関数を用いることで簡単に学習できます*9。その後、テスト用データにscore関数を用いることで、モデルの精度(正解率)が計算できます。predict関数を用いた予測もできます。

clf.fit(X_train, y_train)  # 学習用データで学習
clf.score(X_test, y_test)  # テスト用データでテスト
clf.predict([[...]])  # 任意のインプットを用いて予測

このように、Pythonオープンソース機械学習ライブラリを利用すると、約10行程度のコードを書くだけで、誰でも簡単に、無料で機械学習が出来てしまいます*10。これはとても凄いことだと思います。詳細は割愛しますが、Pythonの実行環境も簡単に作ることができますので、興味のある方は試してみてください*11

おわりに

この記事では、機械学習の具体的な学習方法と簡単な実装について書きましたが、もう少し突っ込んだ機械学習の内容そのものについては、また別の機会があれば、書いてみたいと思います。

今の時代、やる気さえあれば、多くのことは低コストで学習することができます。インターネットのおかげで良い時代になりましたが、逆に「やらない」ことの言い訳ができない、という点では厳しい時代かもしれません。「やるか、やらないか」だけの話ですが、あまり気負わす、専門外であっても興味のあることから気軽に取り組んでいくのが良いのではないかと思います。

*1:たとえば、「猫」「犬」など動物の写真を大量に学習させて、未知の写真に対してどの動物が映っているかを判定させる、など。

*2:囲碁は、将棋よりもさらに盤面の組み合わせが膨大になるので、人工知能が人間に追いつくにはまだしばらく時間がかかりそうだ。」(p.80)と、囲碁に関する記述など時代遅れになっていますが、専門家の創造を上回るスピードでAIが進化している証左であると思います。

*3:私も大学時代にjavaの入門講義を受けてプログラムを少しかじりましたが、いきなりpublic static void main(String[] args)という謎の呪文を書かされてうんざりしたのを覚えています。しかし、Pythonではそのようなことはありません。単にprint(‘〇〇’)と書けば、「〇〇」と出力されます。

*4:分類とは、正解となるカテゴリー(「正」「誤」、「合」「否」など)と入力データの組み合わせから学習し、未知のデータからカテゴリーを予測する手法を指します。それ以外の機械学習の分野として、回帰(連続値の予測)、クラスタリング(グループ化)などの手法があり、これらについても分類と同じようにPythonのライブラリを利用できます。

*5:プログラム中、ilocは、[ ]を用いて [取り出す行, 取り出す列] を指定しています。全てを表すには’:’、最初から最後1つ前までは’:-1’、などと表すことができます。

*6:全てのデータを使って学習して、同じデータでテストしても意味がないので、事前にデータを分割する必要があります。プログラム中、test_sizeにてテスト用データとする割合を指定しています。

*7:モデルのことを分類器(classifier)と呼び、プログラム上はclfで示しています。

*8:プログラム中の C や max_depth はハイパーパラメータと呼ばれ、過学習を防ぐために設定しています(プログラム上省略も可)。実際には、クロスバリデーションによりチューニングする必要がありますが、ここでは暫定的な値を入力しています。

*9:厳密には、学習用データを訓練用データ(training data)、検証用データ(validation data)に分割し、検証用データに対して試行錯誤を繰り返すことで、ハイパーパラメータ(過学習を防ぐための、ロジスティック回帰のCや、決定木のmax_depthなど)をチューニングする必要があります。これをクロスバリデーション(交差検証)と呼び、cross_validate、cross_val_scoreなど便利な関数が用意されています。

*10:もちろん実務で活用する際には、アルゴリズムの選定や、データの加工(前処理)、特徴量の設計その他の試行錯誤等で多大な時間を要します。

*11:インターネット上で検索するとPythonの実行環境を作る方法について、簡単な解説がたくさん見つかると思います。たとえば、AnacondaというディストリビューションPythonの必要なライブラリをまとめたもの)をインストールするだけで、簡単にPython機械学習を実行する環境を構築できます。