はじめに MATLAB,Python,Scilab,Julia比較するシリーズの第4章。 第3章では画像処理、座標変換の話がメインだった。 第4章は分類問題関連の話がメインとなる。基本的には以下の流れとなる。 形式ニューロン 決定境界線の安
シミュレーションで実物を扱わなくても仕事ができる環境を目指す。つまり家に引きこもって外に出なくてもOKな世界。
MATLAB,Python,Scilab,Julia比較 その33【行列演算⑯】
Scilabで基本的な行列演算実施。 基本的にはMATLABと同一。 ただし、要素終端がendではなく「$」である点に注意が必要。
MATLAB,Python,Scilab,Julia比較 その32【行列演算⑮】
Python(Numpy)での基本的な行列演算を確認。 内積は「@」 「*」だとアダマール積になるので注意 それ以外にも0オリジンだったり、終端指定が-1だったりとクセが違う。 右除算もできるように見せかけて、実は逆行列とのアダマール積なので目的としたものとは異なる。
MATLAB,Python,Scilab,Julia比較 その31【行列演算⑭】
具体的に各ツール、各言語での行列演算についての話に突入。 四則演算に加えて、アダマール積、べき乗、転置、反転。 まずは手馴れたMATLABから。
内積はベクトル表記と成分表記の公式がある。 成分表記の内積は余弦定理から求められる。 行列は方程式の係数部をまとめたもの。 行列演算は入力ベクトル、変換行列、出力ベクトルが基本形。 入力、出力をnセットに拡張すると列ベクトルがnセット分の列が増えの行列になる。
MATLAB,Python,Scilab,Julia比較 その30【行列演算⑬】
前回の行列演算の式を再掲。 前回は入力、出力の列ベクトルを2セットだったが、これをnセットにするとどうなるか。 入力、出力が2x2行列からnx2行列へ。 これの利点は入力から出力の変換が一括で表現できること。 これを知ってるだけでコミュニケーションスキルが上がる?
MATLAB,Python,Scilab,Julia比較 その29【行列演算⑫】
連立方程式を行列演算にしたものを再掲。 上記の構成は[出力ベクトル]=[変換行列][入力ベクトル]となる。 これの入力、出力を列ベクトル2セットにすると2x2の行列になる。 すべて2x2行列になるが、数式上の位置によって、入力、変換、出力と意味が異なる。 このルールをすっ飛ばしてる行列嫌いになるかも?
MATLAB,Python,Scilab,Julia比較 その28【行列演算⑪】
二元一次方程式を書き出す。 上記をベクトルの内積で表現し直す。 さらに上記を行列で表現し直す。 まずはこれが最もシンプルな行列の性質を示している。
MATLAB,Python,Scilab,Julia比較 その27【行列演算⑩】
ベクトル内積の公式を再掲。 ベクトルの内積で方程式を表現できる。 n次方程式、多変数方程式でも考え方は一緒。
MATLAB,Python,Scilab,Julia比較 その26【行列演算⑨】
バックナンバーはこちら。はじめに前回は、余弦定理の証明。任意の三角形を2つの直角三角形にすることで各辺を三角関数して表現可能。これに加えて、三角比の基本公式を加えると、余弦定理が求まる。今回は、この余弦定理を使って、内積をベクトル成分に用い
MATLAB,Python,Scilab,Julia比較 その25【行列演算⑧】
余弦定理を何とか証明。 垂直線を使って2つの直角三角形を作ることで各辺を三角関数を使用した表現が可能。 三角比の基本公式を加えると、余弦定理が求まる。 基本公式は三平方の定理と半径1の円起動の点と原点をを元に作った直角三角形から求まる。
MATLAB,Python,Scilab,Julia比較 その24【行列演算⑦】
内積の定義を確認。 内積は単なる計算方法であり、内積そのものにに意味はない。 ただし、特性のようなものはある。 内積の分かり易い特性としては相関性。 類似度とも言われ、特に内積を利用したものをcos類似度と呼ばれる。 基本的な計算であるが故に畳み込み積分、類似成分抽出、方程式などに利用される。
MATLAB,Python,Scilab,Julia比較 その23【行列演算⑥】
やっぱり線形代数の基礎はやっておく。 割とすぐに詰む可能性があるから。 説明手順をとりあえず決めた。 行列の内積の公式の再確認。 方程式と内積。 連立方程式と行列。 行列によるベクトル変換。 行列によるベクトル群変換。 行列の内積の公式の再確認。 一旦忘れてOK。
MATLAB、Python、Scilab、Juia比較ページはこちらはじめにMATLAB,Python,Scilab,Julia比較に於ける、以下を元に書き直したもの。MATLAB,Python,Scilab,Julia比較 その18【行列
MATLAB,Python,Scilab,Julia比較 その22【行列演算⑤】
行列の転置について説明。 転置自体は、行列の行と列を入れ替えるだけの話。 具体的な利用シーンというのは特になく、計算都合で使うことがほとんど。 良く使う処理なので、名前が付いていた方が利便性が良いという考え方が妥当そう。
MATLAB,Python,Scilab,Julia比較 その21【行列演算④】
行列の除算について。 行列は原則的に除算は存在しないが、「逆行列を掛ける」がそれに該当する。 さらに行列の積は結合法則はあれど、交換法則はない。 上記に伴い、左除算、右除算と言う概念が出てくる。 逆行列の位置が変わる。 数式上ではあまり出て来ないが、各ツール、言語がサポートしていることが多い。
MATLAB,Python,Scilab,Julia比較 その20【行列演算③】
今回はアダマール積について。 演算子がいろいろあり、アダマール積かどうかは文脈で読み解くしかない。 しかし、特殊な状況でしか登場しないので、そういうものがあるという程度で留めておいてもよいかも。 画像処理の畳み込みで出てくることは多い。
MATLAB,Python,Scilab,Julia比較 その19【行列演算②】
行列の乗算(内積)について説明。 上記はなぜそのような演算になるか不明(太郎くん談)。 これを理解するには線形代数の基礎部分を理解する必要がある。 線形代数すべてを説明するとなると大変だが、基礎部分を可能な限り簡単に説明予定。
MATLAB,Python,Scilab,Julia比較 その18【行列演算①】
代表的な行列演算を列挙。 基本的な四則演算に加えて、アダマール積、べき乗、転置。 まずは加算、減算。 各要素単位で加算、減算すればOK。 当然、「次元を一致させる」必要がある。
MATLAB、Python、Scilab、Juia比較ページはこちらはじめにMATLAB,Python,Scilab,Julia比較に於ける、以下を元に書き直したもの。MATLAB,Python,Scilab,Julia比較 その13【基本
MATLAB,Python,Scilab,Julia比較 その17【基本的な使い方⑦】
Juliaでスライシングを実施。 基本的にはMATLABと似た感じ。 ただし、配列添え字用のカッコが違う。 あと、スライシングの結果、ベクトルとなった場合は列ベクトルになる。 行列としてスライシングした場合は、元の行と列の関係は維持される。
MATLAB,Python,Scilab,Julia比較 その16【基本的な使い方⑥】
Python(Numpy)でスライシングを実施。 0オリジンのためMATLABと設定する数値が異なる。 加えて、区間演算子の終端は範囲に指定範囲には含まれない点に注意。 Scilabでスライシング。 MATLABと同一。
MATLAB,Python,Scilab,Julia比較 その15【基本的な使い方⑤】
基本的な使い方の続きとしてスライシングについて。 特定の要素、特定範囲を抽出可能。 区間演算子start:step:endを元に範囲抽出するが、step=1なことがほとんどなので、stepを省略したstart:endの書き方になることが多い。
MATLAB,Python,Scilab,Julia比較 その14【基本的な使い方④】
Juliaの基本的な使い方。 Juliaは列ベクトルがデフォルト。 MATLAB、Scilabは行ベクトルがデフォルトであるため、扱いに気を付ける必要がある。 列ベクトルがデフォルトになっている理由としては、数式との一致性を考慮した結果と推測される。
MATLAB,Python,Scilab,Julia比較 その13【基本的な使い方③】
Juliaの基本的な使い方・・・の前にいろいろクセが違うのでそれの調査。 start:step:endの形式(区間演算子)で等差数列を表現できるが、この状態ではメモリ上に実態を持っていない。 よって、読み出しはできるが、書き込みはできない。 区間演算子に実態を持たせるにはVectorに渡すことで解決。
MATLAB,Python,Scilab,Julia比較 その12【基本的な使い方②】
Python(Numpy)とScilabの基本的な使い方。 Python(Numpy)は以前から使っている物なので手馴れたもん。 ScilabはMATLABと同一の記載方法でいける。 ただし、コメントアウトが「%」じゃなくて「//」 ここも一緒だと楽だったが・・・。
MATLAB,Python,Scilab,Julia比較 その11【基本的な使い方①】
各ツール、言語の基本的な使い方として以下をやってみる。 単純なスカラー計算。 ベクトルの定義。 等差数列の作成。 行列の定義。 まずは手馴れたMATLABで実施。
簡単に行列の存在意義を説明。 当然、連立方程式以外にも利用シーンは多数あるが、まずはシンプルなもので。 逆行列は掃き出し法で求められる。 ただし、ツール、言語側で逆行列を求めれる機能が入っていることが多いので自身で計算することは少ない。 連立方程式は複数の関数の交点を求めている。
MATLAB,Python,Scilab,Julia比較 その10【行列⑤】
連立方程式を解くということは複数の関数の交点を求めるということ。 行列はそれを一撃で解ける。 ためしにMATLABで算出したら一撃。 移動体の予測線を関数と見なすと、交点を求める重要性がわかりやすいかも?
MATLAB,Python,Scilab,Julia比較 その9【行列④】
逆行列は掃き出し法にて求めることができる。 実際に掃き出し法を実施。 前回使用した逆行列が求まった。 MATLAB、Python(Numpy)、Scilab、Juliaでは逆行列を求める機能があるので、直に計算することはない・・・想定。
MATLAB,Python,Scilab,Julia比較 その8【行列③】
行列で連立方程式を解いてみた。 両辺を行列で割る・・・のがだが、行列は除算が無く、逆行列を掛けるで除算を実現する。 逆行列は掃き出し法と呼ばれる方法で求めるが、ここでは公式を使用。 結果として、答えが求まった。 特徴としてはルールが明確なためプログラム化し易いという点。
MATLAB,Python,Scilab,Julia比較 その7【行列②】
とりあえず連立方程式を普通に解いてみた。 しかし、そのプロセスをプログラム化するのは超難解。 つまり、行列を使うとこの超難解な状態から脱することができる。 今回は、連立方程式を行列で表現するとどうなるか。ってところまで。
「ブログリーダー」を活用して、KEIさんをフォローしませんか?
はじめに MATLAB,Python,Scilab,Julia比較するシリーズの第4章。 第3章では画像処理、座標変換の話がメインだった。 第4章は分類問題関連の話がメインとなる。基本的には以下の流れとなる。 形式ニューロン 決定境界線の安
単純パーセプトロンの分類をMATLABで実施。 想定通り分類可能。 おおよそ200エポックあれば分類可能。
単純パーセプトロンの構造について復習。 逆伝播の復習。 重みとバイアスの連鎖律の最適化。 単純パーセプトロンで分類のプログラムのフローを確認。 学習が進むと決定境界線がどのように動くか確認。
単純パーセプトロンで分類のプログラムのフローを確認。 逆伝播の実験のときと流れは一緒。 学習が進むと決定境界線がどのように動くか確認。
重みとバイアスの連鎖律の最適化。 共通部分があるので、そこを切り出し。 プログラムの場合は、こういう共通部分を変数に格納するなどの最適化が可能。
単純パーセプトロンの構造について復習。 今回扱うのは活性化関数をシグモイド関数に差し替えたもの。 逆伝播の復習。 重みとバイアスの逆伝播は途中まで一緒。 よって表現の最適化が可能。
MATLAB、Python、Scilab、Julia比較ページはこちら はじめに の、 MATLAB,Python,Scilab,Julia比較 第4章 その64【逆伝播⑮】 を書き直したもの。 単純パーセプトロンに対する逆伝播を行う。まず
逆伝播を行った際の重みの動き方を確認するプログラムをScilabで作成。 おおよそ狙ったところに収束。
逆伝播を行った際の重みの動き方を確認するプログラムをPythonで作成。 おおよそ狙ったところに収束。
逆伝播を行った際の重みの動き方を確認するプログラムをMATLABで作成。 おおよそ狙ったところに収束。
逆伝播を行った際の重みの動き方を確認するプログラムをJuiaで作成。 おおよそ狙ったところに収束。
逆伝播を行った際の重みの動き方を確認するプログラムをScilabで作成。 おおよそ狙ったところに収束。
逆伝播を行った際の重みの動き方を確認するプログラムをPythonで作成。 おおよそ狙ったところに収束。
逆伝播を行った際の重みの動き方を確認するプログラムをMATLABで作成。 おおよそ狙ったところに収束。
全体の位置づけと各偏導関数を確認。 入力、出力(ラベル)が複数であるが故に連鎖律のルートが複数になる。 入力、出力が複数であるが故の連鎖律の事情のもう一つの考え方。 逆伝播の確認用プログラムのフローを記載。
連鎖律に於ける誤差関数の位置づけと偏導関数を確認。 活性関数(シグモイド関数)のブロック図と連鎖律上の位置づけと偏導関数を確認。 入力層のブロック図と連鎖律上の位置づけと偏導関数を確認。 バイアスのブロック図と連鎖律上の位置づけと偏導関数を確認。
誤差逆伝播法とか単純パーセプトロンに関連する用語を確認。 逆伝播を行う単純パーセプトロンの構成を確認。 一連の合成関数について書き出し。 合成関数を構成する各数式を書き出し。 合成関数の微分こと連鎖律について説明。 学習データを加味した場合の多変量関数の連鎖律について簡単に説明。
逆伝播の確認用プログラムのフローを記載。 逆伝播の挙動を確認するため、重みの開始位置とバイアスは固定。 ベクトル、行列演算をプログラム都合に合わせて表現しなおし。
入力、出力が複数であるが故の連鎖律の事情のもう一つの考え方。 誤差関数は二乗和誤差関数であり、本来であればΣが含まれる。 よって、連鎖律にもΣが含まれる形を取ると前回と同一の数式が得られる。
入力、出力(ラベル)が複数であるが故に連鎖律のルートが複数になる。 上記の図示と数式を説明。
二次形式の多項式としての偏導関数、行列形式による偏導関数を元にPython(NumPy)で算出及びプロット。 ともに同一の算出結果とプロットが得られた。
二次形式の多項式としての偏導関数、行列形式による偏導関数を元にMATLABで算出及びプロット。 ともに同一の算出結果とプロットが得られた。
∇について説明。 二次形式の微分について説明。 具体的な多項式に当てはめて計算してみた。
具体的な二次形式の多項式に対して微分。 ∇による微分結果確認。 二次形式の微分の公式による結果確認。 ツールで計算させるまでもないが、一応やっておく。
∇を使用して、二次形式の微分(勾配)を求める。 二次形式を多項式表現し、偏微分。 偏微分した結果を行列形式に戻す。 結果としてシンプルな偏導関数が求められる。
二次形式の微分についての話へ突入。 ∇(ナブラ)について説明。 ベクトルに対しての偏微分。 各要素に対しての微分を行うだけなので、複雑な概念ではない。
二次形式の多項式表現と行列表現の計算をJuliaで実施。 3Dグラフを表示する際は、"projection" => "3d"が必要。 meshgridが無いので自作した。
二次形式の多項式表現と行列表現の計算をScilabで実施。 基本的にはMATLABと一緒。 ただし、reshapeの代わりにmatrixを使う必要がある。
二次形式の多項式表現と行列表現の計算をPythonで実施。 3Dグラフを表示する際は、projection='3d'が必要。 plot_wireframeでワイヤーフレームでグラフ表示ができる。
二次形式の多項式表現と行列表現の計算をMATLABで実施。 meshgridにx軸とy軸を入力とすることで平面座標が得られる。 平面座標を元に2変数の演算を実施。 演算結果をmesh関数を使用して3Dグラフに表示。
二次形式の多項式表現と行列表現の計算をJuliaで実施。 3Dグラフを表示する際は、"projection" => "3d"が必要。 meshgridが無いので自作した。
二次形式の多項式表現と行列表現の計算をScilabで実施。 基本的にはMATLABと一緒。 ただし、reshapeの代わりにmatrixを使う必要がある。
二次形式の多項式表現と行列表現の計算をPythonで実施。 3Dグラフを表示する際は、projection='3d'が必要。 plot_wireframeでワイヤーフレームでグラフ表示ができる。
二次形式の多項式表現と行列表現の計算をMATLABで実施。 meshgridにx軸とy軸を入力とすることで平面座標が得られる。 平面座標を元に2変数の演算を実施。 演算結果をmesh関数を使用して3Dグラフに表示。
対称行列と二次形式について説明。 二次形式は多項式表現と行列表現ができる。 行列表現ができると計算がしやすくなる。 しかし、全座標を入れるにはfor文を使用する必要がある。 for文を削除するための仕掛けを入れておいた。
二次形式の行列表現をfor文を使用せずに一括計算するための仕掛けを考える。 内積を分解してアダマール積と定数関数との内積にする。 これにより、x^Tとxの直積的な結果を抑制。
二次形式の行列表現と多項式表現の関係性を示した。 行列Aが対称行列になることを制約とすると行列表現と多項式表現に可逆性を付加することができる。 これに伴い、等しいものとして扱うことが可能となる。 実際に行列表現と多項式表現が等しいかを各ツール、各言語で確認したいが、その前にベクトル、行列のまま演算する仕掛けを考える必要がある。
二次形式について確認。 すべての候の次数が2である多項式。 二次形式を一般化して行列表現。 行列表現できた方が計算しやすい。
対称行列について説明。 対角部を中心に対象となっている正方行列。 単位行列も対称行列の一種ではある。 厳密には対称行列の一種である対角行列の一種が単位行列。 対称行列は二次形式、二次形式の微分、グラム行列で使用する予定。
1次関数最小二乗法こと単回帰分析のあとは重回帰分析、多項式回帰分析にチャレンジ。 重回帰分析、多項式回帰分析を行うには正規方程式が必要。 正規方程式を導出するまでの因果関係を図示した。