ソフトウェアエンジニアのための機械学習によるデータ分析実践(全2講義)

開発深知」からソフトウェアエンジニアのための機械学習によるデータ分析実践の講義動画を紹介します。動画をご覧になるには、開発深知の会員登録(無料)が必要です。

講義概要

本講義は、2015年9月3日(木)に開催された
ソフトウェアエンジニアのための機械学習によるデータ分析実践(9/3) | NPO法人トップエスイー教育センター
を撮影、編集したものです。

講義内容

収集・蓄積が可能なデータ量が増えたことで、このビッグデータからビジネスに有効な知見を発見(データマイニング)するための機械学習技術に注目が集まっています。オープンソースのツールなどが充実してきたことで、研究者や専門家でなくても機械学習技術を利用することが可能となってきており、ソフトウェアエンジニアにも機械学習によるデータ分析の知識が求められています。ツールやライブラリの使い方は、書籍やWeb上で詳しく解説されており、複雑な機械学習アルゴリズムでも簡単に利用することが可能になりました。
しかし、分析自体は簡単に行うことができても、分析前の準備、分析手法の選択、分析結果の評価など、分析プロセスに問題があると、適切な分析結果を得ることができません。

本セミナーでは、機械学習によるデータ分析のプロセスを実際に手を動かしながら学んでいきます(聴講だけでも問題ありません)。

講義ではPythonとR、両方の例で説明しますので、どちらか好きな方(あるいは両方)で実際に分析をしていただくことができます。

当日会場に用意されたシンクライアントにて演習を行うことができますが、ご自身のPCで動かしてみたいという方は、以下の事前準備の説明に従い、演習に必要なソフトウェアとデータを準備してご持参ください。

※事前準備:
[ソフトウェア]
PythonもしくはRは、それぞれ、以下のライブラリを利用予定ですので、事前にお好きな方をインストールしておいてください(括弧内は動作確認したバージョン)。セミナーではPython、Rの動作に関するご質問をお受けする時間がありませんのであらかじめご了承ください。

Python(2.7.10)
matplotlib(1.4.3)、 numpy(1.9.2)、 pandas(0.16.2)、 scipy(0.15.1)
scikit-learn(0.16.1)、 statsmodels(0.5.0)
および上記ライブラリの依存ライブラリ
※AnacondaというPython distributionだと一括導入できて便利です。

R(3.2.0)
caret(6.0.47)、 doMC(1.3.3)、 e1071(1.6.4)、 gbm(2.1.1)、 glmnet(2.0.2)、
kernlab(0.9.20)、 nloptr(1.0.4)、 randomForest(4.6.10)、 rpart(4.1.9)
および上記ライブラリの依存ライブラリ
※IDEはRStudioが便利です

[データ]
以下のデータを利用しますので事前にPCにダウンロードしておいてください。
http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic3.csv
(Data obtained from http://biostat.mc.vanderbilt.edu/DataSets)

01_本日の目的

講義は、こちらから登録することができます。
ソフトウェアエンジニアのための機械学習によるデータ分析実践 | 開発深知

講義公開開始日

2015年10月9日

参考資料

本講義の参考資料は、下記にアップロードされております。
canard0328/topse_seminar_20150903 – GitHub

講師

日立製作所 研究開発グループ 鴨志田亮太先生
※講座内容や講師の所属に関しましては、収録時の情報を掲載しております。変更になっている場合がございますので、ご了承いただきますようお願いします。

講義スライド

ソフトウェアエンジニアのための機械学習によるデータ分析実践の講義スライドからピックアップして紹介します。

分析プロセス(第1回)

02_分析プロセス
SEMMA
 Sample データの取得
 Explore データの探索(可視化など)
 Modify データの作成・選択・変換(前処理)
 Model モデリング(機械学習)
 Assess 評価

データの探索(第1回)

03_データの探索
データの確認

  • データのサイズ・種類
  • 欠損値の有無

データの可視化

  • 分布:ヒストグラム、箱ひげ図
  • 割合:帯グラフ、積み上げ棒グラフ
  • データ間の関係:散布図、クロス集計
  • 変化:折れ線グラフ

データの前処理(第1回)

04_データの前処理

  • 欠損値の処理
  • カテゴリ変数の処理
  • データの標準化
  • 特徴量の作成・選択

標準化(Standardization)(第1回)

05_標準化(Standardization)
必要であれば特徴量ごとに標準化(Standardizarion)を行う

醜いアヒルの子定理(第1回)

06_醜いアヒルの子定理
Ugly duckling theorem

  • 醜いアヒルの子と普通のアヒルの子の類似性は2羽の普通のアヒルの子の類似性と等しい
  • 問題から独立した万能な特徴量は存在しない
  • 特徴量の設計が重要

モデリング(機械学習とは)(第1回)

07_モデリング(機械学習とは)
機械学習とは

“Machine learning is the science of getting computers to act without being explicitly programmed”
Andrew Ng

一般的にはコンピュータの振る舞い方(モデル)を(大量の)データから学習することにより獲得する。

機械学習の分類(第1回)

08_機械学習の分類

教師あり学習(supervised learning)
データが入力と出力のペアから成る
・分類(識別)(classification):出力がラベル
・回帰(regression):出力が数値
教師なし学習(unsupervised learning)
データは入力のみ
・クラスタリング
・頻出パタンマイニング
・外れ値検出(outlier detection)

機械学習のアルゴリズム(教師あり)(第1回)

09_機械学習のアルゴリズム(教師あり)
教師あり学習

  • 線形モデル(単/重回帰)
  • ロジスティック回帰
  • 判別分析
  • k近傍法
  • 決定木
  • サポートベクターマシン
  • ニューラルネットワーク
  • ナイーブベイズ
  • ランダムフォレスト

機械学習のアルゴリズム(教師なし)(第1回)

10_機械学習のアルゴリズム(教師なし)

  • k-mearnsクラスタリング
  • 階層的クラスタリング
  • Apriori
  • One-class SVM

アルゴリズム利用時の注意点(第1回)

11_アルゴリズム利用時の注意点
ノーフリーランチ定理
あらゆる問題で性能の良い万能な学習アルゴリズムは存在しない

目的に適したアルゴリズムを選択しましょう。
とは言っても、実用上、上手くいことが多いアルゴリズムがあるのも事実。

評価(第2回)

01_評価

  • 評価基準
  • グリッドサーチ
  • 交差検証
  • バイアス・バリアンス
  • 学習曲線

回帰モデルの評価基準(第2回)

02_回帰モデルの評価基準

平均絶対誤差(Mean absolute error)
小さいほど良い
平均二乗誤差(Mean square(d) error)
小さいほど良い
決定係数R^2(Coefficient of determination)
説明変数が目的変数をどれくらい説明するか
0(悪い)〜1(良い)
特徴量が多いほどおおきな値に→自由度調整済み決定係数

過学習(第2回)

03_過学習

過学習(Over fitting)
与えられたデータに(ノイズも含めて)過度に適合してしまい、訓練誤差は小さいが、未知データに対する性能が低下してしまう状態。
汎化性能
未知のデータに対する性能(汎化性能)を定量化した汎化誤差を小さくすることが重要。

過学習対策(第2回)

04_過学習対策

  • モデルを学習する際に、複雑になりすぎないようにパラメータを制御し、過学習を防ぐ
  • 正則化(Regularization)パラメータの調整
     リッジ回帰、Lasso、SMVなど
  • 決定木の深さの制御
     決定木、ランダムフォレストなど
  • 正則化しすぎても性能がでない

バイアスとバリアンス(第2回)

05_バイアスとバリアンス

  • バイアスとバリアンスはトレードオフの関係
  • 柔軟性の高いモデル(アルゴリズム)
    バイアス小、バリアンス大→ハイバリアンス 過学習(Over fitting)
  • 柔軟性の低いモデル(アルゴリズム)
    バイアス大、バリアンス小→ハイバイアス Under fitting

現在のモデルの状態を確認するには?

学習曲線(第2回)

06_学習曲線

ハイバイアスの目安
訓練スコア(誤差)が低い(大きい)
訓練スコアと汎化スコアの差が小さい
ハイバリアンスの目安
訓練スコアと汎化スコアの差が大きい
汎化スコアの改善がサチっていない

さらなる性能向上を目指して(第2回)

07_さらなる性能向上を目指して
アンサンブル学習(Ensemble learning)

  • 複数のモデルの結果を統合
  • Stacking/Bagging/Boosting
  • <データ分析コンペでは必須/li>

Deep Learning

  • Neural networksの発展
  • 特徴量設計が不要なアルゴリズムではない

参考文献

08_参考文献(1)
書籍名 戦略的データサイエンス入門: ビジネスに活かすコンセプトとテクニック
著者 フォスター プロヴォスト, トムフォーセット
翻訳 竹田正和
出版社 オライリージャパン, 2014
ISBN 4873116856, 9784873116853
ページ数 427 ページ

・Courser: Machine Learning
https://www.coursera.org/learn/machine-learning

・scikit-learn Tutorials
http://scikit-learn.org/stable/tutorial/

書籍名 データ解析のための統計モデリング入門: 一般化線形モデル・階層ベイズモデル・MCMC確立と情報の科学 / 甘利俊一, 麻生英樹, 伊庭幸人編
著者 久保拓弥
出版社 岩波書店, 2012
ISBN 400006973X, 9784000069731
ページ数 267 ページ

書籍名 データ解析の実務プロセス入門
著者 あんちべ
出版社 森北出版, 2015
ISBN 4627817711, 9784627817715
ページ数 241 ページ

09_参考文献(2)

講義は、下記ページから登録することができます。
ソフトウェアエンジニアのための機械学習によるデータ分析実践 | 開発深知
また、動画をご覧になる場合には、開発深知の会員登録(無料)が必要です。
開発深知登録方法について | 開発深知ブログ

※このビデオは、2015年9月3日に行われました、トップエスイー教育センターのセミナー「ソフトウェアエンジニアのための機械学習によるデータ分析実践」を撮影、編集したものです。

関連講義

ソフトウェアエンジニアのための機械学習によるデータ分析実践の関連講義について紹介します。

ソフトウェアエンジニアのための「機械学習理論」入門
本セミナーでは、機械学習の基本的なアルゴリズムについて、その背後にある理論を解説した上で、Pythonで実装したアルゴリズムのサンプルコードを用いたハンズオンを行います。特に、ビジネス視点でのデータ活用となる「データサイエンス」を意識した解説を行い、ビジネス活用に向けた本格的な機械学習を学ぶ土台となる知識を提供します。

参考リンク

トップエスイー | サイエンスによる知的ものづくり教育プログラム
NPO法人トップエスイー教育センター

ソフトウェア開発者のための学習サイト「開発深知」については、開発深知とはをご覧ください。