pikesaku’s blog

個人的なプログラム勉強メモです。記載内容について一切の責任は持ちません。

詳解ディープラーニングを読んで(必要な数学知識-線形対数編)

読んだ本

 
Amazon CAPTCHA
 

参考URL

qiita.com
ベクトル計算の積の計算方法
 
manapedia.jp
シグマの計算方法

DeepLearningに必要な数学知識

偏微分
線形対数→式の記述や式変形を完結に扱うためにベクトルや行例を使うだけ。ベクトル空間・固有空間などの応用分野は把握する必要なし。
 

線形対数とは?

ベクトルおよび行列の演算を扱う
 

ベクトルの基本

 
実数a1,a2,a3,,,,aNがある時、以下のベクトル表記が可能
 
N項縦ベクトル
f:id:pikesaku:20170820222622p:plain
 
N項横ベクトル
f:id:pikesaku:20170820222629p:plain
 
成分が全て0のベクトルをゼロベクトルと呼ぶ
 

偏微分と全微分について

参考にしたURL

 
oto-suu.seesaa.net
 
remedics.air-nifty.com
 
上記2つのサイトがすごい分かりやすい!
 
※本記事以降の画像は参考URLから引用してます。

メモ

接線とは?

曲線の任意の点で接している直線(他の点では交わらない)
 
円の場合は以下の通り。
f:id:pikesaku:20170820185425p:plain
→真ん中が接線
 
他曲線における考え方
例えば、以下のような曲線における接線は、曲線との交わる点が1つ以上ある。
f:id:pikesaku:20170820185619p:plain
  

図形の全体を見渡したうえでのものではなく、そのうちの曲がりのひとつの山(盛り上がり)に着目した、部分についての表現

 
あくまで関数の一地点における表現
 

微分接線の傾きを示す関数

 

1次変数関数の微分は、微分という

2次以上変数関数の微分偏微分と全微分があり。

 

偏微分

 一つの変数の方向だけを見た傾き
 例) z = x + y
 x方向の傾きをあらわす式(xに関する偏微分) = ∂z/∂x
 y方向の傾きをあらわす式(yに関する偏微分) = ∂z/∂y

微分

 2次変数関数は曲線ではなく面になる。この面に接する平面を、接平面という
 接平面の傾き示す関数を全微分という
 偏微分を足したもの
 ∂z/∂x + ∂z/∂y

OpenStack Ironic調査メモ

news.mynavi.jp
OpenStack Ironicを動かしてみました Part1 - テックセンター - Blog - テックセンター - Dell コミュニティ
OpenStack Ironicを動かしてみました Part2 - テックセンター - Blog - テックセンター - Dell コミュニティ

www.slideshare.net


・ベアメタル・プロビジョニングを実施
 
・サーバの電源操作や起動順位の操作が必要 
 
PXE、IPMIを利用。対応したドライバを提供
 
・より幅広い物理マシンを扱うために、各ベンダーに対応したドライバも提供
 
・物理インスタンス時、ディスク初期化などクリーニング処理を実施
 
・役割は以下の通り。
 ハイパフォーマンスコンピューティング(HPC)
 データベースホスティング
 高性能かつ高セキュリティ要件のための専用ハードウェア
 クラウドインフラの高速デプロイ
 
・物理マシン情報を事前に設定する必要あり。情報は以下の通り。

登録情報 説明
物理マシン情報 IPMIのIPアドレスとユーザー名とパスワード、サーバSPEC、MACアドレス
対応するベアメタルドライバ ベアメタルドライバ。IPMIが汎用的に利用される。特定HWベンダ向けとしてCIMC、iLO、DRACがあり
対応するデプロイイメージ 最初にブートするイメージ

 
・ユーザー操作時に指定が必要な情報は以下の通り

登録情報 説明
ユーザーイメージ 物理マシンに書き込まれるOSイメージ
フレーバー 指定したフレーバーを超えるスペックを持つ物理マシンが選択
ネットワーク デプロイ後に接続するNW。物理スイッチと連動し実現

 
・Ironic物理インスタンス起動フロー
 ①Novaがフレーバー選択し、Ironicにデプロイ指示
 ②IronicはGlace、Neutronと連携しデプロイイメージをTFTPサーバにコピー
 ③Ironicは対象サーバにIPMI経由でPXE設定&起動をする。
 ④TFTPサーバが対象サーバにデプロイイメージを送信し、デプロイイメージが起動
  ※対象サーバのMACアドレス情報も見てデプロイイメージ送信判断
 ⑤デプロイイメージにより対象サーバのローカルディスクがIronic稼働ホストのiSCSIターゲットとして認識
 ⑥IronicがddコマンドでOSイメージをiSCSIターゲットに書き込み。
 ⑦Ironicがローカルディスクから起動する設定をして対象サーバを再起動する。
 
 

詳解ディープラーニングを読んで(必要な数学知識-微分編)

読んだ本

 
Amazon CAPTCHA
 

DeepLearningに必要な数学知識

偏微分
線形対数
 

微分とは?

 
y = f(x)
 
fという関数がある時、xの各点における傾きを示す関数を導くことを微分する」という。
傾きを示す関数を導関数or微分という。
導関数により値がゆっくり変わるのか、急激に変わるのか、その変化の仕方を表す。
detail.chiebukuro.yahoo.co.jp

 
微分の表記方法は複数あり。上記の関数の場合、以下の通り。(他にも表記方法あり。以下は一部)
微分の記法 - Wikipedia
 

①y'

②f'(x)

f:id:pikesaku:20170810204639p:plain
 
※dはdifferntiation(微分)
 
微分は変数が一つ
 
微分」を導く定義式は以下の通り。
 
f:id:pikesaku:20170813142546p:plain
 
x2点の時のyの値の差分をx2点間の距離で割り、傾きを算出している。
∆xはx2点間の距離(∆はMacではoptions+jで入力可能)
 

偏微分とは?

 
変数を2つ以上持つ関数に対し、いづれか1つの変数に関して微分すること
 
例) 2変数関数 z=f(x,y)の場合 
 
表記方法は以下の通り
f:id:pikesaku:20170813145206p:plain
f:id:pikesaku:20170813145211p:plain
 
dではなく∂(デル)
sigmac.hatenablog.jp
 
定義式は以下の通り。
 
f:id:pikesaku:20170813144724p:plain
 
導関数ではなく偏導関数という。
 
例) f(x,y) = x^2 + 3y + 1の場合
 
xの偏微分

f'(x)=((((x+∆x)^2)+3y+1)-(x^2 + 3y + 1))/∆x
f'(x)=((x^2+2x∆x+∆x^2+3y+1)-(x^2+3y+1))/∆x
f'(x)=(x^2+2x∆x+∆x^2+3y+1)-x^2-3y-1)/∆x
f'(x)=2x∆x+∆x^2/∆x
f'(x)=2x+∆x

∆xはlimでなくなるため、偏微分は2x
 
yの偏微分

f'(y)=((x^2+3(y+∆y)+1)-(x^2+3y+1))/∆y
f'(y)=((x^2+3y+3∆y+1)-(x^2+3y+1))/∆y
f'(y)=(x^2+3y+3∆y+1-x^2-3y-1)/∆y
f'(y)=3∆y/∆y
f'(y)=3

∆yはlimでなくなるため、偏微分は3
 

微分係数とは?

 
変数が任意の値の時の微分
例) 関数f(x,y) = x^2 + 3y + 1のx=aの場合
f'(a)=2a
 
上記関数をグラフにすると以下
x^2 + 3y + 1 - Google 検索
 
xの偏微分はyが任意の値の時のもの。(yが任意の値の時の平面で切断した時のグラフの断面)
yの偏微分はxが任意の値の時のもの。(xが任意の値の時の平面で切断した時のグラフの断面)
 

偏微分の基本公式

 
偏微分も基本的な算術演算子を用いることができる。
公式は以下の通り。
 
f:id:pikesaku:20170813162413p:plain
 
f:id:pikesaku:20170813162538p:plain
 

合成関数

 
以下の関係の関数f,uがある時
y=f(u)
u=g(x)
これらを関数zでまとめると以下表記
z=f(g(x))
zを合成関数と呼ぶ。
合成関数zの微分を関数f,gの微分を使って表記すると以下
z'(x)=f'(u)*g'(x)
 
合成関数の微分は、それぞれの関数の微分を掛け算したものになる。
これを連鎖律(chain rule)と呼ぶ
 
証明は以下の通り。
以下2つの関数の場合

y=u^2
u=x^2

 
これを普通に微分すると

y=x^4
y'=4x^3

 
※以下公式利用

y=x^n 
y'=nx^(n-1)

 
合成関数の連鎖律を使い微分すると、、、

1つ目の関数fを微分

y=u^2
f'(u)=((u+∆u)^2-u^2)/∆u
f'(u)=(u^2+2u∆u+∆u^2-u^2)/∆u
f'(u)=(2u∆u+∆u^2)/∆u
f'(u)=2u+∆u
f'(u)=2u

 
2つ目の関数を微分

u=x^2
〜省略〜
g'(x)=2x

 
2つの微分を掛け算

z'(x)=2u*2x
z'(x)=2(x^2)*2x
z'(x)=4x^3

 
普通に微分した場合と、合成関数の連鎖律を使った場合が同じ結果となった。
 

偏微分の合成関数

 
偏微分も合成関数の連鎖律が適用できるとのこと。
導出には微分という考え方がある。
※難しそうなので、公式だけ覚える。 
 
以下のように多変数関数zおよびui(i=1,...,n)が以下の式で与えられた場合
f:id:pikesaku:20170813194447p:plain
 
以下の公式が成り立つ。
f:id:pikesaku:20170813194444p:plain
 
連鎖律はニューラルネットワークの理論で頻繁に用いられるよう。
ひとまず理解はさておき、覚えて先に進んでみる。

ロジカルシンキングについてメモ

参考

 
Amazon CAPTCHA
 

相手に物事を伝える時

以下を含めること
・明快な課題
・課題に対する回答
・相手に期待する反応

※「自分はこう考える」はダメ。相手にどう伝わるか意識する。

Python統計学勉強会参加メモ

Jupiter Notebook

参考

jupyter.org

インストー
$ pip3 install --upgrade pip
$ pip3 install jupiter

起動
$ jupyter notebook


上記コマンド実行後に出力されたTokenつきURLにアクセスする。
http://localhost:8888/?token=397ffd660a92ec8bc712d3f963853735553cff7b852aade9

メモ

実行しても既存の実行済みデータは保持される。
対話式と同様にオブジェクトでコード完了させると、内容がprintされる。
例)
f:id:pikesaku:20170730202753p:plain

※以降のPythonコードはJupiterで実行

一様分布乱数

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
np.random.seed()
result = np.random.randint(1,101,10000)
plt.hist(result, bins=5)


f:id:pikesaku:20170730204255p:plain

・1行目はおまじない
・1〜100(101-1)までの数字をランダムに10000個生成
・histメソッドでヒストグラム生成
・binsは集計する区間数。100までを5個に分ける=>20づつ集計

メモメモ後でまとめる。。。。

Python統計学勉強会メモ

jupiterのきまりごと

実行してもすでに読み込み済み内容は保持される。
変数名で終わりになるとprintされる

ndarray型とは?

足し算や掛け算で利用した際は、要素同士を計算してくれる。

正規分布とは
ある値を中心とし、そこを起点にある程度のばらつきをもったデータの集合

2こうぶんぷ


numpy.random.binomial(n, p, size=None) 

2こうぶんぷは偶然なのかを調査

bostonデータはボストンを500くらいに区切った区画ごとのデータ

機会学習ではtargetは正解データ

昔はtex最近はjupiterでやる人おおい。
jupiterからダウンロードで図を保存可能

plt.hist(prices, 20, cumulative=True) 

cumulativeオプションで累積グラフになる

y, binEdges = np.histogram(prices, bins=20) 
histgramはグラフではなく、データとして取得するメソッド

pythonは戻り値が2つ以上つかえる。pythonの特徴



plt.plot(bincenters, y.cumsum()) 

cumsumは累積を出してくれる。



abc分析とは?

ヒストグラムのY軸の値順になれべかえたものが、ABC分析

np.average(prices) 

平均値 = average

中央値= median
成績順にならべかえた時、真ん中の人がどの点数であったか?

3人いて以下の点数であったとき
10 20 100

平均43.333333
中央20

四分位数とは?
集団を順位別に4分割し、その分割の句切れ目を、それぞれ
第一四分位数
第二四分位数
第三四分位数
という。

これで傾向がわかる。
100点満点テストの場合、
第二四分位数の位置の人の点数が30点であれば、難しいテストだったのかな?など



pandas
データ解析用のライブラリ

boston

boston.target

boston.data
がある。
機会学習のデータセットは、targetが正解データ

Dataframeを使う際はcolumは大事。データを指定して取り出す時に使う。インデックス(数字)を指定しても可能だが、面倒・間違いやすい

plt.scatter(df['RM'], df['PRICE'], s=100, alpha=0.5) 

sは点のサイズ

alphaは透明度
plt.figure(figsize=(12, 8))
plt.scatter(df['RM'], df['PRICE'], s=100, alpha=0.5) 


データフレームにすると散布図が楽

相関係数

y=x
これは相関係数1

y=-x
これは相関係数-1

dataframeを使うと相関係数の一覧が簡単に出せる
df'CRIM', 'RM', 'PRICE'.corr() 

どの要素とどの要素が連動しているか?

感覚的に0.4~0.5あれば、関係性あると講師は考えている
一般的には0.5
ただケースバイケース。


df.corr()
これで実行すると、全要素の解析をしてくれる。

相関係数は線形であるかを見ている。
そのため、関連性はあっても線形でない場合は、0になる。

直線でない場合は、低くなる点に注意。

波線など。。。。


df.describe()

代表値の一覧が観れる。


df['PERROOM'] = df['PRICE'] / df['RM'] 
こんな感じでフィールド追加できる
これはndarrayだから

std = np.std(df['PERROOM']) 
このstdで標準偏差

plt.figure(figsize=(20,10))
plt.scatter(df['RM'], df['PRICE'], c = df['DEV'], s = 200, alpha = 0.5) 

plt.figure(figsize=(20,10))
plt.scatter(df['RM'], df['PRICE'], c = df['DEV'], s = 200, alpha = 0.5)
plt.colorbar()

このcは色をきめる。
部屋と価格で散布図だが、そこに色の情報も追加している。


回帰直線とは?

最小二乗方

これは、直線を作って、そことの距離が近い線をもとめる。

計算したら、面倒

これを、scikit-learnを使うと楽

pvalue 
stderr 

を使うケースは、講師の経験上でもない。

y = ax + b
aがslope(傾き)
bがインターセプト(雪片)

plotx = np.arange(3, 10, 1)
3から10までの1づつデータを生成

■人口知能の機能
回帰
分類→画像認識で利用される

回帰直線を作ると、データのない部分についても推測で使える。
ただし、、、、データのない部分については、回帰直線だと間違いが多い。

非線形なデータは回帰直線だと間違いが多くなる。

この場合、

回帰曲線が使える。

次元数を上げていくと、複雑なパターンを扱える。

y = ax^2+bx+c

2次元は一回カーブできる。
P33は2次元。資料謝り


res = opt.curve_fit(fit_func, df['RM'], df['PRICE']) 
これで回帰曲線を得ることができる

2次元方程式では、1回だけカーブできる。

2回カーブするには、3次元方程式
ax^3+bx^2+cx+d

必ずしも多次元にすればいいというわけではなし。
多次元

この予測は距離にじょうでやってるが、人口知能では、きょりにじょうは使わない。

def fit_func(x, a, b, c, d): ⭐️この引数の順番は大事
  return a * x**3 + b * x**2 + c * x + d 
res = opt.curve_fit(fit_func, df['RM'], df['PRICE'])
上記ではfit_funcは、関数を渡している。

このresの中は、
(array([  2.47012408, -22.64326546,  66.05885736]),
 array([[  8.44020212e-02,  -1.08471220e+00,   3.44183985e+00],
        [ -1.08471220e+00,   1.40942558e+01,  -4.52003372e+01],
        [  3.44183985e+00,  -4.52003372e+01,   1.46506533e+02]]))
In [ ]:

これは何を意味しているのか?

IoT検定の教科書



X, Y = np.meshgrid(plotx, ploty) 


回帰分析に使えるデータセットは、

ボストンと疾患データ


日本は
data.gov

2,3次元回帰では難しい場合にSVMをつかう。これは人口知能による回帰
高次元ベクトル解析

環境作る方法

1 自分でライブラリ構成する場合
2 anacondaを使う場合
3 pyenv
4 pycharm→ここからjupiter note bookを作れる。ただ動きが変な場合あり。

anaconda navigator

anacondaはライブラリ管理ツール

anacondaにもcondaという管理コマンドがあり。
condaはpipと同じもの。
condaの方が依存関係などがよく管理されてる。

時系列データとは?

メモ&要約

 

時系列データとは?

 
時系列データとは「ある一定の間隔で測定された結果の集まり」
 
連続する2つのデータ間は直線的に変化すると仮定
 
時系列データは主に以下4つの変動要因を持つ
①傾向変動
長期的に見て上昇(増加)傾向なのか、それとも下降(減少)傾向なのかを示す。人口増加やGDPの成長等。
細かい変化ではなく大きな傾向をとらえる際に見る要素
 
②循環変動
ある周期性をもって現れる変化を示すもの
景気循環のように3~10年程度の期間で繰り返し起こる変化を示す
傾向変動と違って、上昇と下降の動きがセットで含む
 
③季節変動
文字通り季節ごとに繰り返される変化を示すもの
1年を周期とした変動のパターンを見る
 
④不規則変動
上記3つの変動要素では説明がつかない短期的な変化を示すもの
例) 自然災害による株価の変動
 
ログデータにも時間情報はあるが、これは時系列データではない。
 

事例列データの主な活用目的

 
時間軸に沿ってある数値が変化していく傾向を理解することで、これから先に起こることを(ある程度)予測すること
例) 「この周期的な変化がこの先も繰り返されるなら、今は●●だけど、きっと近い将来に▲▲になる!」