【機械学習入門】アルゴリズム&プログラミング

このサイトでは、機械学習のアルゴリズム(原理)やプログラミング方法について入門者向けにまとめました。

機械学習とは

機械学習(machine learning)とは、人間が経験的に行っている様々な学習活動を、コンピュータでも実現させるための技術です。
コンピュータの発展とともに機械学習の技術も飛躍的に向上しています。

応用例

様々な分野に応用されていますが一例を挙げると以下の通りです。

分野 機械学習の実用例
金融 過去のデータから株価予測
医療 過去の患者達のデータから病気を判別
自動車 自動運転

回帰・・・線形回帰、ロジスティック回帰、サポートベクターマシン

回帰分析では、「結果データ」と「結果に影響を及ぼすデータ」の関係性を統計的に求める手法です。
この2つのデータの関係性がわかれば、将来どのような結果となるかの予測を行うことができます。
このとき、結果データを「目的変数」、結果に影響を及ぼすデータを「説明変数」といいます。

線形回帰

(一般化)線形回帰は、連続値を予測します。
説明変数が1つの場合は「単回帰」、複数の場合は「重回帰」といいます。

項目 内容
特性 予測対象:連続値, 学習タイプ:教師あり, 可読性:○, 並列処理:✕
特徴 ・最小二乗法や最尤推定によって回帰直線の係数と切片を求めます。
詳細 単回帰分析の原理, 重回帰分析の原理
実装 Python+Scikit

ロジスティック回帰

ロジスティック回帰は、回帰によって分類を行います。

項目 内容
特性 予測対象:分類, 学習タイプ:教師あり, 可読性:○, 並列処理:✕
特徴 ・2分類問題に対応(線形回帰の出力をロジット関数に入力)
詳細
実装 Python+Scikit

サポートベクターマシン

サポートベクターマシン(SVM)は、回帰によって分類します。

項目 内容
特性 予測対象:分類, 学習タイプ:教師あり, 可読性:○, 並列処理:✕
特徴 ・マージン最大化のアイデアにより、汎化性能が高い2分類を実現
・学習時間は長い
詳細 サポートベクターマシン(SVM)の原理
実装 Python+Scikit
応用 Python+OpenCVで画像から人検出

木・・・決定木、回帰木、ランダムフォレスト

決定木

決定機では、木構造モデルで分類します。

項目 内容
特性 モデル:木構造(非線形), 学習タイプ:教師あり, 予測対象:分類, 可読性:○, 並列処理:✕
特徴 ・枝先で1つの説明変数と閾値のセットでにデータを2つに分けるのを繰り返す。
・説明変数の選択と閾値は、ジニ不純度やエントロピー等で決定
詳細
実装 Python+Scikit

ニューラルネットワーク・・・パーセプトロン、CNN、RNN

パーセプトロン

項目 内容
特性 モデル:神経回路, 学習タイプ:教師あり 予測対象: 連続値・分類, 可読性:✕, 並列処理:○
特徴 ・古典的なニューラルネットワーク
・3層構造(入力・中間・出力)
・学習にはバックプロパゲーションを用いることが多い。
・複雑なモデルを構築できる反面、過学習も多い。
詳細 ニューラルネットワークの原理, 多層パーセプトロンの原理
実装 Python(単純)Python+ScikitPython+OpenCV

CNN(畳み込み)

クラスタ分析・・・階層型、非階層型、トピック

クラスタ分析(Clustering) は、特徴が類似するデータ同士をまとめて、データ構造を発見します。
分類 (Classification)データとラベルを学習し、データに対するラベルを予測します。

階層型クラスタ分析

項目 内容
特性 予測対象:分類, 学習タイプ:教師なし, 可読性:○, 並列処理:✕
特徴 ・代表例はユークリッド距離*ウォード法
・あらかじめ定義した距離を用いてデータをグループ化
・クラスタ数(分類数)は、計算後に変更可能
詳細
実装

非階層型クラスタ分析

項目 内容
特性 予測対象:分類, 学習タイプ:教師なし, 可読性:✕, 並列処理:○
特徴 ・代表例はk平均法
・クラスタ数(分類数)を事前に指定する必要がある(後から変更不可)
・階層型クラスタリングで高速化もできる
・問題点:初期値によって結果が異なる
詳細 k平均法の原理
実装 Python+Scikit
応用 Python+OpenCVで画像の減色

トピックモデル

項目 内容
特性 予測対象:分類, 学習タイプ:教師なし, 可読性:✕, 並列処理:○
特徴 ・代表例はLDA
・トピック数(分類数)は事前に与える必要あり
・トピック毎の出現頻度からスコアを計算してデータを分類
・計算量が大きい
詳細
実装

プログラミングによる実装

プログラミング言語やライブラリ別に機械学習の実装方法を個別記事に整理しました。

言語 項目
Python 機械学習ライブラリの比較, ②Scikit-learn

便利な機能・ツール・参考文献

項目
参考文献 【機械学習】入門者向け資料, scikit-learn機械学習, Scikit-Learn Cheat Sheet: Python Machine Learning, Scikit learnで学ぶ機械学習入門(Slide Share), scikit-learn から学ぶ機械学習の手法の概要, scikit-learn: Python での機械学習, 機械学習ライブラリscikit-learnの馬鹿丁寧なe-learning, scikit-learnでよく利用する関数の紹介, 人工知能に関する断創録, scikit learnチートシート, 代表的な機械学習手法一覧