sk-learnを使ってみよう

————— ——-
cycler 0.10.0
joblib 0.13.2
kiwisolver 1.1.0
matplotlib 3.0.3
numpy 1.17.1
pandas 0.25.1
pip 19.2.3
pyparsing 2.4.2
python-dateutil 2.8.0
pytz 2019.2
scikit-learn 0.21.3
scipy 1.3.1
setuptools 20.10.1
six 1.12.0

from sklearn import svm
xor_data = [
	[0,0,0],
	[0,1,0],
	[1,0,1],
	[1,1,0]
]
data = []
label = []
for row in xor_data:
	p = row[0]
	q = row[1]
	r = row[2]
	data.append([p,q])
	label.append(r)
clf = svm.SVC(gamma="auto")
clf.fit(data, label)
pre = clf.predict(data)
print("予想結果:", pre)
ok = 0; total = 0
for idx, answer in enumerate(label):
	p = pre[idx]
	if p == answer: ok += 1
	total += 1
print("正解率:", ok, "/", total, "=", ok/total)

[vagrant@localhost python]$ python myapp.py
予想結果: [0 0 0 0]
正解率: 3 / 4 = 0.75

OK、取り敢えず環境は整ってきた

scikit-learn

classification
Regression
clustering
dimensionality reduction
model selection
preprocessing

これを使って行きたい
[vagrant@localhost python]$ pip3.5 -V
pip 8.1.1 from /home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages (python 3.5)
[vagrant@localhost python]$ pip install -U scikit-learn scipy matplotlib scikit-image
Collecting scikit-learn
Downloading https://files.pythonhosted.org/packages/1f/af/e3c3cd6f61093830059138624dbd26d938d6da1caeec5aeabe772b916069/scikit_learn-0.21.3-cp35-cp35m-manylinux1_x86_64.whl (6.6MB)
100% |████████████████████████████████| 6.6MB 230kB/s
Collecting scipy
Downloading https://files.pythonhosted.org/packages/7a/0e/3781e028d62a8422244582abd8f084e6314297026760587c85607f687bf3/scipy-1.3.1-cp35-cp35m-manylinux1_x86_64.whl (25.1MB)
100% |████████████████████████████████| 25.1MB 63kB/s
Collecting matplotlib
Downloading https://files.pythonhosted.org/packages/12/d1/7b12cd79c791348cb0c78ce6e7d16bd72992f13c9f1e8e43d2725a6d8adf/matplotlib-3.1.1.tar.gz (37.8MB)
100% |████████████████████████████████| 37.8MB 41kB/s
Complete output from command python setup.py egg_info:

Beginning with Matplotlib 3.1, Python 3.6 or above is required.

This may be due to an out of date pip.

Make sure you have pip >= 9.0.1.

—————————————-
Command “python setup.py egg_info” failed with error code 1 in /tmp/pip-build-k4fsv7pl/matplotlib/
You are using pip version 8.1.1, however version 19.2.3 is available.
You should consider upgrading via the ‘pip install –upgrade pip’ command.
[vagrant@localhost python]$ pip install pandas
Collecting pandas
Downloading https://files.pythonhosted.org/packages/d9/05/38875a81040e679c196a854865dbafe4dfe5f92e8365ddfff21f2817d89d/pandas-0.25.1-cp35-cp35m-manylinux1_x86_64.whl (10.3MB)
100% |████████████████████████████████| 10.3MB 149kB/s
Collecting pytz>=2017.2 (from pandas)
Downloading https://files.pythonhosted.org/packages/87/76/46d697698a143e05f77bec5a526bf4e56a0be61d63425b68f4ba553b51f2/pytz-2019.2-py2.py3-none-any.whl (508kB)
100% |████████████████████████████████| 512kB 1.4MB/s
Collecting python-dateutil>=2.6.1 (from pandas)
Downloading https://files.pythonhosted.org/packages/41/17/c62faccbfbd163c7f57f3844689e3a78bae1f403648a6afb1d0866d87fbb/python_dateutil-2.8.0-py2.py3-none-any.whl (226kB)
100% |████████████████████████████████| 235kB 2.3MB/s
Collecting numpy>=1.13.3 (from pandas)
Downloading https://files.pythonhosted.org/packages/d4/64/7619774f0bd8ef364d46a5df8eb1bc78784cd787324b9624f6793e72f787/numpy-1.17.1-cp35-cp35m-manylinux1_x86_64.whl (20.1MB)
100% |████████████████████████████████| 20.2MB 79kB/s
Collecting six>=1.5 (from python-dateutil>=2.6.1->pandas)
Downloading https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl
Installing collected packages: pytz, six, python-dateutil, numpy, pandas
Successfully installed numpy-1.17.1 pandas-0.25.1 python-dateutil-2.8.0 pytz-2019.2 six-1.12.0
You are using pip version 8.1.1, however version 19.2.3 is available.
You should consider upgrading via the ‘pip install –upgrade pip’ command.

[vagrant@localhost python]$ pip list
Package Version
————— ——-
cycler 0.10.0
joblib 0.13.2
kiwisolver 1.1.0
matplotlib 3.0.3
numpy 1.17.1
pandas 0.25.1
pip 19.2.3
pyparsing 2.4.2
python-dateutil 2.8.0
pytz 2019.2
scikit-learn 0.21.3
scipy 1.3.1
setuptools 20.10.1
six 1.12.0

機械学習に必要な数学

数学基礎
→ 変数、定数、1次式、2次式、関数、平方根、累乗、累乗根、指数関数、対数関数、自然対数、シグモイド関数、三角関数、絶対値とユークリッド距離、数列、要素と集合

微分
→ 変数の微小な変化に対応する、関数の変化の割合の極限を求めること
→ 関数の各点の傾き
線形代数
確率・統計

機械学習の利用用途

識別
情報の判別・仕分け・検索
音声、画像、動画の意味理解
異常検知・予知

予測
数値予測
ニーズ・意図予測
マッチング

実行
表現生成
デザイン
行動の最適化
行動の自動化

GCPの機械学習サービス

どんなものがあるか見てみましょう

データラベル付け
AIプラットフォーム
Natural Language
テーブル
Talent Solution
翻訳
Vision
Video Intelligence

うーん、tutorialでもGCPだと金がかかりそうだなー
その前に、tensor flowを理解しろ、って言ってるな。
https://cloud.google.com/ml-engine/docs/tensorflow/getting-started-training-prediction

なんかやること多すぎないか。。

AWSの機械学習サービス

ざっと見ただけでも色々ありそうだ

Amazon SageMaker:データサイエンティスト、機械学習エンジニア向け
Amazon Comprehend:自然言語処理
AWS DeepLens
Amazon Lex:会話型インターフェイス、チャットボット
Machine Learning:線形回帰、ロジスティック回帰、多項ロジスティック回帰
Amazon Polly:テキストを音声変換
Rekognition:画像や動画を用意するだけで検出
Amazon Transcribe:文字起こしサービス
Amazon Translate
Amazon Personalize:パーソナライズ、レコメンデーション
Amazon Forecast:時系列予想
Amazon Textract:書類からテキストの抽出
AWS DeepRacer:自律走行

1.予測のみ行うサービス:Transcribe, Polly
2.ユーザーは学習データのみ用意し、サービス側でモデルをトレーニング:Comprehend, Machine Learning
3.インフラを気にせずモデルのトレーニング/評価/デプロイ:SageMaker

1と2は機械学習の知識がなくても利用できる。3はインフラ管理が減る。
つまり、AWSで機械学習サービスをやるならsageMakerってところか。。

amazon recognitionはサービスへの導入が比較的イメージしやすいかも。使ってみたい。

機械学習のモデル精度

機械学習の予想値と正解のずれを測る
学習データから一部のデータをテストデータとして取り分けておく
テストデータにモデルを適用した場合の精度を評価する

ハイパーパラメータの調整も視野に入れる
「学習用」「検証用」「テスト用」の3つに分割する

分類・・・どれくらいラベルが正しく識別できたか、Accuracy
回帰・・・正解の値と予想の値のズレがどれくらい少ないか、RMSE(Root Mean Squared Error) 予想値が実測値から平均してどれくらいズレているか、RMAE(Root Mean Absolute Error)

正解がわかっているデータ → テスト用データ、学習用データ → 学習済みモデルの適用 → 識別、予測精度

過学習
→ 過学習が起きた時は、ハイパーパラメータを調整する

精度が落ちてきた場合
→ データの追加(データ追加、説明変数変更など)、前処理の調整(異常値処理)、モデルの調整(単純なモデルより複雑なモデルの方が精度が向上する)

ディープラーニングの基礎

ニューラルネットワークとは
-> ニューロンに該当する多数のユニットから構成
-> 各ユニットは入力に対して、ユニット間の重みを加味した非線形な演算を行った結果を出力する
「入力層」→「中間層1層」→「出力層」

ディープラーニングとは
-> ニューラルネットワークの層を多数重ねたもの
「入力層」→「中間層3層」→「出力層」
-> ディープラーニングでは、バックプロパケーションと呼ばれるアルゴリズムを使用し、誤差が段々と少なくなるよう重みを調整

ディープラーニングのモデル
Deep Neural Network: DNN
→ ニューラルネットワークの層を多層にしたモデル
AutoEncoder
→ 出力と入力が一致
Convolutional Neural Network
→ 主に画像解析に用いられるモデル
Recurrent Neural Network
→ 主にテキスト解析や時系列解析に用いられる

機械学習のモデル構築の用語

識別や予測を行う対象の変数:目的変数
識別や予測を行うための変数:説明変数

予想売り上げ = a x 気温 + b x 湿度 + 定数

機械学習アルゴリズムを適用可能な形式にデータ加工する処理:前処理
モデルの確認:検証

行と列を持つ表形式のデータ:構造化データ
画像、テキスト、音声:非構造化データ

構造化データの「行」:事例
構造化データの「列」:特徴量
構造化データ:データフォーマット

データを前処理で加工して、データフォーマットに直して、モデルを構築。識別、予測結果を評価する。

画像データの場合は、ピクセルのRGBデータを全て処理して行く

画像認識のタスク分類
– 画像分類、物体検出、シーン理解 
→自動運転はシーン理解までやってる?

自然言語処理
→ 形態素分析

音声データ
→ フーリエ変換を用いて、周波数ごとの特徴に変換する
→ MFCC

機械学習は前処理の工数がもっともかかることが多い