[Kaggle]0から本当に機械学習を理解するために学ぶべきこと~一流のデータサイエンティストを例に~

1pt   2018-07-12 03:07
IT技術情報局

「機械学習が出来るようになりたい」そう思いつつも、中々身についた感じがしない。

そんな方々に向けて、Kaggleで公開されているデータ分析の手順を追いかけながら、そこで必要とされている知識を解説したいと思います。全体像を把握することで、より理解が進むはずです。

1. データを分析するために必要な統計的知識

機械学習の目的は未知の事柄を推定することです。そのために既にあるデータから何らかの法則性を見つけ出す為に様々な手法が考えられてきました。

統計学はご存知でしょうか? 機械学習はデータを扱うという点で統計学と深い関係があります。平均値や標準偏差などは聞いたことがあると思います。統計学はそれらの情報をこねくり回すことによって、限られたデータから本当の全体像を推定します。例えば、選挙の結果を開示前に知りたいときに、投票者全員に聞ければ良いですが、そうもいきません。そこで、統計学は様々な方法を使ってそれらを推定します。
 
ここで、予測したいことは「誰が当選するのか」ということです。予測するのに使えるデータは、自分が聞いて回って知ることが出来た各候補者の得票数です。「データの中で一番得票数の多い人が当選!」と、考えるのは最もなのですが、あながちそうでも無いのです。なぜなら、あなたが聞いて回った投票所は候補者Aの支持者が多い場所かもしれません。あなたが聞いて回った時間は候補者Bの支持者が多い時間帯かもしれません。これらのようなデータの偏りをバイアスといいます。統計学ではバイアスに影響を受けないように様々な方法が編み出され、なるべく正しい予測をしようと頑張りました。

機械学習はデータから予測します。ですから、元々のデータがおかしなものだと全くうまくいきません。ですから、機械学習を行うにあたって、データの中身を分析することは何よりも大事です。ですので、まず学ぶべきことは
1. データを分析するために必要な統計的知識

これを身につけるのにオススメの本はこれ↓

遠回りに感じるかもしれませんが、プログラミングをする前にキーボードの使い方を覚えなければならないようなものです。取り敢えず流し読みでもよいので、概観を把握しておきましょう。後々必ず基礎的な統計学の知識は必要になります。

2. 取り敢えずKaggleを見てみる

2.1 問題の把握

Titanicの乗客で誰が生き残るか?

という問題を予測してみたいと思います。まず、この段階で分かることは分類をするのが目的であるということ。生き残るグループとそうではないグループに乗客を分類する訳です。機械学習には他にも回帰問題があります。これは数値を推定するということで、例えば地域や間取りなどから住宅の価格を予測する問題があります。

機械学習の概要を知るのにオススメの本はこれ↓

与えられたデータについて見てみると、train setとtest setが与えられていることが分かります。機械学習のモデルを作成するのに使うデータはtrain setです。出来上がったモデルの精度を最後に確かめる為にだけ使うのがtest setです。test set は未知のデータとして置いておかないといけません。なぜなら、このtest setにのみ最適化したモデルを無意識に作ってしまいかねないからです。機械学習の本当の目的は未知のデータの予測ですから、ここは我慢して正しいモデル評価の為に置いておきましょう。

2.2 ソースコードを眺める

では、なんとなく掴めたところで、プロの御業を見ていきたいと思います。

Titanic Data Science Solutions

上のURLを開くとJupyter Notebookが開きます。Jupyter Notebookは慣れれば直感的に使えますが、ある程度概要について伝えておくと、普通のpythonプログラムはファイル単位で実行しなければならず、さらに途中でコードを書き換えると初めからやり直しですが、Jupyter Notebookは実行単位を好きに決められるので、一行ずつ試行錯誤しながら実行していくことができるのです。

KaggleにはJupyter Notebookを公開できるサービスがあり、上記は人気のものの内の一つです。有難い前置きはGoogle翻訳で読んで頂くとして、さっそくコードを見ていきます。

[1] # data analysis and wrangling import pandas as pd import numpy as np import random as rnd # visualization import seaborn as sns import matplotlib.pyplot as plt %matplotlib inline # machine learning from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC, LinearSVC from sklearn.ensemble import RandomForestClassifier from sklearn.neighbors import KNeighborsClassifier from sklearn.naive_bayes import GaussianNB from sklearn.linear_model import Perceptron from sklearn.linear_model import SGDClassifier from sklearn.tree import DecisionTreeClassifier

はい、1つめから情報過多ですね。

2.2.1 pandasとnumpyとmatplotlib

まずは

#data analysis and wrangling import pandas as pd import numpy as np import random as rnd

から見ていきます。

randomはpythonの標準ライブラリですが、その他2つは違います。
機械学習、データサイエンスの分野では必須のライブラリとして

  • pandas
  • numpy

があります。ここではそれらをimportしています。

酷使するので、pandasとnumpyについては一冊読むことをオススメします↓

# visualization import seaborn as sns import matplotlib.pyplot as plt %matplotlib inline

ここでは結果を図示するためのライブラリをインポートしています。matplotlibは非常によく使うので、知っておいてください。

%matplotlib inline

は Jupyter Notebook でのみ有効なもので、ノートブック内に図を描画するように指定しています。これも毎回といっていい程書きます。

2.2.2 scikit-learn

# machine learning from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC, LinearSVC from sklearn.ensemble import RandomForestClassifier from sklearn.neighbors import KNeighborsClassifier from sklearn.naive_bayes import GaussianNB from sklearn.linear_model import Perceptron from sklearn.linear_model import SGDClassifier from sklearn.tree import DecisionTreeClassifier

沢山インポートしていますが、これはscikit-learnというこれまた酷使することになるライブラリから、予測するのに用いるアルゴリズムを幾つかインポートしているだけです。機械学習の概要についてある程度知っている人であれば、なんとなく分かっていただけるかと思います。英語なので分かりづらいですが、

  1. LogisticRegression == ロジスティック回帰
  2. SVC(SVM Classification) == SVMをクラス分類に用いる(SVMは回帰もできるので区別する。回帰はSVR: SVM Regression )
  3. RandomForestClassifier == ランダムフォレスト
  4. KneighborsClassifier == k近傍法
  5. GaussianNB == ナイーブベイズのガウス分布版
  6. Perceptron == パーセプトロン
  7. SGDClassifier == 確率的勾配降下(stochastic gradient descent)法を用いてSVMやロジスティック回帰を最適化する方法でクラス分類します。最適化については後で紹介する本に詳しく書かれていますので参照してください。
  8. DecisionTreeClassifier == 決定木

です。

ここまで紹介してきた本を読んで頂ければ問題ざっくりとそれぞれの手法については理解していると思います。その状態からscikit-learnを使いこなす為にオススメなのがこれ↓

これ一冊あればかなりの範囲をカバー出来ます。

「アルゴリズムの詳細は? 数式ないと信用できないよ」という方や「最前線で戦える研究者並の知識が欲しい」という方にオススメなのはこれ↓

つづく

Source: python tag

   ITアンテナトップページへ
情報処理/ITの話題が沢山。