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

線形回帰分析

回帰分析とは、ある変数xが与えられた時、それと相関関係のあるyの値を説明・予測すること。

線形回帰分析は、 y = ax + b の一次関数を求めること。

OLS 各点における差の和が最小となるようにパラメータを求める

ei = Yi – (aXi + b)
これを二乗した和
nΣi=0(Yi – aXi – b)^2

推定する値は目的変数、推定元の値は独立変数
線形回帰とは、直線上の数値予測

ああああああああああああああああああああああああああ
結局今すぐpythonやらないと駄目だーーーーーーーーーーーーーーーーーー

確率

異なるn個から、重複なくk個を選び出す
nCk = n(n-1)…(n – k + 1)/ 1*2…(k-1)*k

余事象
P(A) = 1 – P

A ∩ B かつ
A ∪ B または

機械学習の状況判断の一つとして、最も正解に至る確率が高い選択肢を正解として選ぶ

P(A ∩ B) = P(A,B) = P(A)P(B)
P(A|B) = P(A ∩ B)/P(B) Bが起きた時に、AまたはBの時

行列の掛け算

(-1,2)(3 2) = 1

-1 2 , 3 = 1
1 2 , 2 5

-1 2 , 3 = 1
1 2 , 2 5
3 0 9

m * n型の行列の積はm次元列ベクトルで表される
行列の積はベクトルの内積の概念を拡張したもの
スカラー倍はベクトルだけでなく、行列にもある

行列には割り算はないが、逆行列という概念がある
行列式は det A もしくは |A|と表される
det A = ad – bc

ニューラルネットワークはパラメータと重みの掛け算を足し合わせる。これはベクトルの線形変換。

入力ベクトルx 重みW 出力ベクトルy

線形変換しても元ベクトルと向きが変わらないベクトルを固有ベクトルという

ベクトルのノルム

L1ノルム:ベクトル成分の絶対値の和 最短距離を測る…各成分の絶対値
L2ノルム:ベクトルのユークリッド距離
||a||[2] = √nΣi=1 a^2i

L2ノルム: ||a||2 = √

L1ノムル、L2ノムルは線形回帰モデルで正則化項として使われる
線形回帰モデルで正則化項を付けることで係数の絶対値または2乗値が大きくならない→過学習が起こらない

ノムルからcosθを求めることもできる
cos(a, b)
cos類似度が高い方がベクトルが似ている

ベクトルの内積

対応する成分同士を掛け算してそれらの和を取る
ベクトルとベクトルの内積はスカラーになる
内積の記号はが多い

直行条件とは、なす数が90°(cos90°=0)

法線ベクトル:全ての接線と直交するベクトル

線形代数、ベクトル

データを複数個収めることができるように、要素を1列に並べたものをベクトルと呼ぶ

単語をベクトル化するWord2Vecという概念がある
Word2Vecは、単語一つ一つを1列に並べたベクトルに変換
ベクトルに変換すると、足し算、引き算を行うことができる

同じような意味の単語群から、同じような周辺語を予測している??

ベクトルは有向線分で視覚化できる。スカラー倍も考えうる。
ベクトルの足し算、引き算は矢印で考える

初等関数の微分法

x^r: rx^r-1
e^x : e^x
a^x : a^x log[e]a
log[e]x : 1/x
sinx : cos x
cos x : -sing x
tan x : 1/cos^2x

sinx → cos x -> -sin x -> -cos x

合成関数の微分
y = f(x), dy/dx = dy/du * du/dx
合成関数(多変数) z = f(x, y)の微分法

(3x – 4)^50 を微分すると、50(3x – 4)^49 * 3 = 150(3x – 4)^49

(3x + 1)^2 + (x + y + 1)^3
2(3x + 1)* 3 + 3(x + y + 1)^2

xe^x -> 1e^x + x*e^x

正解データとニューラルネットワークの出力が合うように、ニューラルネットワークの重み(w)を調整
ニューラルネットワークの重みの調整量は誤差の値を重みで偏微分した値を考慮したもの
チェーンルールを使う

シグモイド関数
Sa(x) = 1 / 1 + exp(-ax)
dSa(x)/dx = a*exp(-ax) / {1 + exp(-ax)}^2 = aSa(x){1 – Sa(x)}
これ(aSa(x){1 – Sa(x)})をさらにxで微分する

ReLU関数
max(0, x) = {x(x > 0), 0(x <= 0) = 1(x > 0), 0(x < 0) 標準シグモイド関数は微分すると、最大値が0.25 ニューラルネットワークの層が不快と、誤差が伝播しなくなる。その解決値としてReLU関数が多く使用されている => これあれだな、基礎数学もプログラミングみたいに、基礎本を10冊くらいやらんとあかんな。。

最小2乗法

最小2乗法とは、誤差の2乗和が最小になるような関係式を求める
線形回帰と呼ばれる基本的な機械学習アルゴリズム
→ つまり微分した際の「極値」ってことか。。