「初心者だけど機械学習を学びたい」「ゼロからAIを作れるようになりたい」という方向けに、最短で機械学習を習得する方法を書いてみました。

目次

やっぱり機械学習ツールはPythonとscikit-learn
機械学習の実装に必要な知識
機械学習のプログラミングは簡単
機械学習のおすすめ勉強法
 STEP1 機械学習の基礎知識
 STEP2 開発手法の知識
 STEP3 プログラミングの知識
 STEP4 機械学習アルゴリズムの知識
機械学習に数学の知識は必要か
自分に合った勉強方法を選ぼう
1ヶ月間集中して機械学習を学ぶと周囲に宣言しよう

※忙しい方は、「STEP1 機械学習の基礎知識」からお読みください。

やっぱり機械学習ツールはPythonとscikit-learn

データサイエンス界のロイター通信的存在であるKDnuggetsから、2019年に最も利用されたデータサイエンス・機械学習ソフトウェアのランキングが発表されました。
top-analytics-data-science
元記事:Python leads the 11 top Data Science, Machine Learning platforms: Trends and Analysis

トップはPythonです。不動の一位を確保しています。またAnaconda、Tensorflow、scikit-learnなどPythonのライブラリ群もシェアを伸ばしています。一方Rは、前年比4%シェアを落としました。

Pythonは名実ともに機械学習のデファクトスタンダードになりました。我らがscikit-learnも9位と大健闘しています。Pythonとscikit-learnがあれば、機械学習は何とかなるのです。

機械学習の実装に必要な知識

機械学習モデルを作るためには、主に4つの知識が必要です。ちなみに機械学習は人工知能の中核技術です。機械学習が分かれば人工知能も分かります。

①プログラミングの知識

Pythonのほかに、scikit-learn、Pandas、NumPyなどPython用ライブラリの理解。

参考記事:これだけは知っておけ!PythonでAI開発の基礎まとめ
参考記事:実務で使うとこだけ!python機械学習(AI)のデータ処理(pandas/scikit-learn)

②機械学習の基礎知識

機械学習の基礎全般。教師あり学習と教師無し学習、回帰と分類、学習と推論。
パターン認識とモデルという概念の理解。

参考記事:人工知能(AI)入門 ~機械学習でできることを解説~

③機械学習アルゴリズムの知識

ロジスティック回帰、決定木、ランダムフォレスト、SVMなどのアルゴリズム。またディープラーニングの知識。パラメータ学習における線形代数、最小二乗法における微分の知識。

参考記事:ランダムフォレストで特徴量の重要度を評価する

④開発手法の知識

機械学習の開発手法の知識。開発工程、データの前処理、特徴量の設計、モデル開発と評価。

参考記事:交差検定(クロスバリデーション)など機械学習の評価方法まとめ


他にも、SQLやAWSなどインフラ回りの知識、自然言語処理や画像処理の知識もありますが、csvに収まる構造データを扱う場合はとりあえず不要です。ただ最低限必要な知識が4つもあるので、機械学習に挫折する人が多いんです。

機械学習のプログラミングは簡単

機械学習のプログラミング自体は、驚くほど簡単です。
例えばscikit-learnを使ってディープラーニングで実装したコードが以下の感じです。

#scikit-learnから必要な関数をインポート
import numpy as np
from sklearn.neural_networkimport MLPClassifier
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.metrics import confusion_matrix

#データの読み込み
data = np.loadtxt("neet.csv",delimiter=",", skiprows=1)

#特徴量データをXに、教師データをyに格納
X = data[:, 0:-1]
y = data[:, -1]

#学習データとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

#ニューラルネットワークで学習と評価 
clf = MLPClassifier()
print cross_val_score(clf, X_train, y_train, cx=10)

#混合行列で評価
y_predict = clf.predirct(X_train)
print confusion_matrix(y_train, y_predict)
たった13行で実装が終わっています。ライブラリの読み込みを抜いたら8行です。必要な知識を効率的に学ぶことが出来れば、機械学習の習得はそこまで難しくありません。私自身も独学で少し学んだ結果、仕事で機械学習を開発する立場になりました。

参考記事:未経験からAIエンジニアになる方法

機械学習のおすすめ勉強法

必要な知識が4つあるため、学習のステップは4つになります。ゼロから独学で勉強する人を想定しています。

STEP1 機械学習の基礎知識

まずは機械学習の基礎をざっくり学ぶ。教師あり学習と教師無し学習、回帰と分類など、初心者向け解説サイトをいろいろネットサーフィンして機械学習のイメージを掴む。

初心者が一番最初に読む本は、松尾先生の「人工知能は人間を超えるか」です。機械学習や人工知能の書籍はたくさん出版されていますが、いまだにこの本を超える入門書はありません。



GOAL:「機械学習ってデータからパターンを抽出してるんだなー」「教師あり学習が基本で目的変数と説明変数があるんだなー」

STEP2 開発手法の知識

機械学習の成果物である「学習済みモデル」の作り方を学ぶ。4つの工程があるので、それぞれ何をするか把握する。機械学習の作り方は、実務家が集まるslideshareやQiitaに情報が集まっている。

①データの前処理・・・テーブル結合、欠損値の補完、外れ値の削除
②特徴量の設計・・・特徴量の選択、相関係数の算出、正則化
③モデル開発・・・ディープラーニング、SVM、ロジスティック回帰で学習
④モデル評価・・・交差検定、混合行列で評価

GOAL:「欠損値は平均値で補完しとけばいいかなー」「外れ値はグラフ作って見ればいいかなー」「モデル評価は交差検定と混合行列だよなー」

※STEP2の目的は、機械学習プログラミングのための事前知識の習得です。あまり時間をかけず、ある程度理解したらSTEP3に進まれることをおすすめします。

STEP3 プログラミングの知識

Pythonの基礎文法と、scikit-learn、Pandas、NumPyなどPython用ライブラリの理解。プログラミングは慣れの部分が大きいので、paizaラーニングやドットインストールなどでひたすらプログラミングに触れる時間を作る。
pythonがある程度理解出来たら、scikit-learnのコードを写経して理解していく。おすすめの書籍は"Pythonで始める機械学習"。お金がなければ、Qiitaにある基礎的なコードを写経していく。

GOAL:「Pandasのデータ処理便利だなー」「fit関数で学習させればいいんだよなー」「パラメータはグリッドサーチしとけばいいなー」



※【追記】これまで当ブログでは、おすすめ書籍として「Python機械学習プログラミング」を勧めてきましたが、「Pythonではじめる機械学習」の方が、より難易度が低く初心者向けのため、記事を修正しています。

STEP4 機械学習アルゴリズムの知識

機械学習アルゴリズムは、まず決定木、ランダムフォレスト、SVMあたりを理解していく。決定木は直観的にわかるので最初に学びたい。ロジスティック回帰も分類問題ではよく利用されるので理論的な部分含めて理解したい。

本丸のディープラーニングの知識は、ネットで分かりやすい解説がたくさんあるので、しっかり読み込んで理解したい。一番のおすすめは、ゼロから始めるディープラーニングの本。お金がなければ、ネットだけでもOK。理論を解説してくれている論文もネットに転がっているので、斜め読みすると理解が進む。

GOAL:「ディープラーニングって計算結果と答えの誤差関数を最小二乗法でぐるぐる回してるだけなんだなー」「SVMのCとγパラメータ増やすと過学習しやすいなー」「アルゴリズムは難しいけどscikit-learn使っとけばなんとかなるなー」



機械学習のような領域が広い勉強では、身に付けたい内容を具体的にすることで効率的に学べると感じます。目指す的が明確であれば、結果も明確に出るはずです。

機械学習に数学の知識は必要か

機械学習の理論は、線形代数や行列などの数学がベースになっています。そのため、数学が分からないと機械学習が理解できません。しかし、いきなり線形代数の本を買って勉強すると、高確率で挫折してしまいます。少なくとも私は挫折しました。

実は機械学習のプログラミングには、数学の知識はほとんど必要ありません。なぜなら、難しい計算はscikit-learnやchainerなどのライブラリがやってくれるからです。私たちは、ライブラリにデータを渡すだけでよいのです。そのため、まずは機械学習のプログラミングを学び、余裕が出てきてから数学を学ぶことをおすすめします。

自分に合った勉強方法を選ぼう

「本を読んで勉強することが苦手!」と思う方もいるかもしれません。人間にはNLPタイプというものがあり、視覚優位の人と聴覚優位の人がいるようです。右利きと左利きの人がいるように、得意な感覚器官は人によって異なるそうです。

視覚優位の人は、情報を""で見て理解することが得意で、聴覚優位の人は、情報を"耳"で聴いて理解することが得意とのこと。もしあなたが、本を読んでもいまいち理解が進まないと感じているなら、あなたが聴覚優位である可能性があります。

聴く能力が高い人は、講義やセミナーを聴くことが効率的な勉強法になります。そのため機械学習のセミナーや研修に参加すると理解度は相当上がるでしょう。

また「Udemy」というオンライン動画で学習する方法もあります。私も「Pythonで機械学習:scikit-learnで学ぶ識別入門」コースを受講し、仕事が終わった後や土日に受講して勉強しました。機械学習の基礎知識からプログラミングまで教えてくれるので、実はこのコースだけで上述の学習STEP1~4を網羅しています。

内容も大変分かりやすく、大学の先生でここまで分かりやすい説明をしてくれる方もいるのかと感動しました。Udemyの中でもおすすめなコースです。

1ヶ月間集中して機械学習を学ぶと周囲に宣言しよう

プログラミングや機械学習の知識は、だらだらやってもなかなか身につきません。理由は、成長の実感が得られにくく挫折しやすいためです。

一方集中的に勉強すると、短期間で成長実感が得られます。また、点の知識は忘却しやすいですが、短期間で集中学習することで、点と点の知識が線になってきます。知識が線になれば、記憶も定着するので成長が速いです。

自分を追い込むためにも、職場や学校で、「1カ月間集中して機械学習を学ぶ」と周りに宣言してみましょう。得られるメリットは4つあります。

①期間を区切ることで学習のモチベーションが維持できる
②短期間で成長実感が得られるのでモチベーションが高まる
③職場で早めに帰宅する口実が出来る
④職場での成果報告を条件に、業務時間中の勉強を認めてもらえる可能性がある

どこまで言うかは職場の風土によりますが、できれば非公式にでも良いので直属の上司には伝えておきたいところです。会社で「人工知能を導入しよう」という話になったときに、「一番最初に名前が上がる」ようになればベストです。

参考記事:転職エージェントにボコボコにされて未経験からAIエンジニアに転職した話

まとめ

機械学習を最短で学べる方法について書きました。機械学習がこれからの未来を大きく変える技術ならば、機械学習の知識は、あなたの未来を強く明るく照らしてくれるはずです。


合わせて読みたい