ユークリッド距離

二次元
√(a1 – b1)^2 + (a2 – b2)^2

三次元
√(a1 – b1)^2 + (a2 – b2)^2 + (a3 – b3)^2

ユークリッド距離は||A||もしくは||A-B||と表せる

K-NNでも使われる
正解ラベルとのユークリッド距離で判別する

function distance($data1, $data2){
$num = 0;
for($i = 0; $i < sizeof($data1); $i++){ $num += pow($data1[$i] - $data2[$i], 2); } return sqrt($num); } var_dump(distance(array(1, 1), array(4, 5))); [/php] float(5) うん、これは簡単

弧度法

半径rの円で、中心角の大きさ一定で1radと表す。
円周は2π
0° 0
30° 1/6π
45° 1/4π
60° 1/3π
90° 1/2π
120° 2/3π
180° π
360° 2π

これはわかります。

2/6π
sinθ 1/2
cosθ √3/2
tanθ √3/2

1/4π
sinθ √2/2
cosθ √2/2
tanθ 1

で、これの何が役に立つの??
音声認識を行う際に、音の波を解析するため、フーリエ変換が行われる
フーリエ変換は、複雑な波形を持つ関数を三角関数の足し算で表現する

よくわからんから、とりあえずgoogl home mini買ったわ

echo "30度";
echo sin(deg2rad(30)). "<br>";
echo cos(deg2rad(30)). "<br>";
echo tan(deg2rad(30)). "<br>";

echo "60度";
echo sin(deg2rad(60)). "<br>";
echo cos(deg2rad(60)). "<br>";
echo tan(deg2rad(60)). "<br>";

Fast Artificial Neural Network Libraryを使ってみる

まず、libraryを入れます。

[vagrant@localhost fann]$ sudo yum install fann-devel
あれ、全然うまくいってない。。

$num_input = 2;
$num_output = 1;
$num_layers = 3;
$num_neurons_hidden = 3;
$desired_error = 0.001;
$max_epochs = 500000;
$epochs_between_reports = 1000;

$ann = fann_create_standard($num_layers, $num_input, $num_neurons_hidden, $num_output);

if ($ann) {
    fann_set_activation_function_hidden($ann, FANN_SIGMOID_SYMMETRIC);
    fann_set_activation_function_output($ann, FANN_SIGMOID_SYMMETRIC);

    $filename = dirname(__FILE__) . "/xor.data";
    if (fann_train_on_file($ann, $filename, $max_epochs, $epochs_between_reports, $desired_error))
        fann_save($ann, dirname(__FILE__) . "/xor_float.net");

    fann_destroy($ann);
}

ぬ、やっぱり。
[Fri Aug 30 08:52:09 2019] 192.168.33.1:60110 [500]: / – Call to undefined function fann_create_standard() in /home/vagrant/local/fann/index.php on line 10

ぐ。。

シグモイド関数

Sa(x) = 1 / (1 + e^-ax) = (tanh(ax/2) + 1 )/ 2
生物の神経細胞が持つ性質をモデル化
aはゲイン
狭義のシグモイド関数は
S1(x) = 1 / (1 + e^-x) = (tanh(x/2) + 1 )/ 2

y= 0, y = 1
limx→∞Sa(x) = 1
limx→-∞Sa(x) = 0
x=0
Sa(0) = 1/2

個体群増加や閾値以上で起きる反応
ゲイン(a)が大きいほどカーブが急激になる

入力した値を0から1の間に収める
シグモイド関数は微分ができる
シグモイド関数の微分と正規分布関数はにており、計算がしやすい
ロジスティック回帰はシグモイド関数と同じ形

ニューラルネットワークは学習する際に微分を含む計算を行う ステップ関数は微分するとゼロになる シグモイド関数は微分してもゼロにならない

自然対数「e」

e は2.718…を表す定数
log[e]のことをln、 e^xのことをexp x またはexp(x)と表現することがある
eはネイピア数という

e = lim[n→∞](1 + 1/n)^n = 2.718281
e = lim[n→∞](1 – 1/n)^n = 1/e = 0.367879….

(e^x)’ = e^x
微分しても全く変わらない

e = 1/0! + 1/1! + 1/2! + 1/3! + 1/4! …
ちなみに1/0!=1, 1/1!=1 のため、2.718281…となるのだそう

e^x = 1/0! + 1/1!*x + 1/2!*x^2 + 1/3!*x^3 + 1/4!*x^4 …

自然対数 log[e]

[pyhon]
import numpy as np
import matplotlib.pyplot as plt

def get_base():
return 2

def exp_func(x):
b = get_base()
return np.power(b, x)

def numerical_diff(f, x)
h = 1e-2
return (f(x + h) – f(x -h)) / (2 * h)

def main():
x_values = np.arange(-1, 1, 0.1)
exp_values = exp_func(x_values)
diff_values = numerical_diff(exp_func, x_values)

plt.plot(x_values, exp_values, “-“)
plt.plot(x_values, diff_values, “-“, color=”red”)
plt.grid()
plt.show()

if __name__ == ‘__main__’:
main()
[/python]

ネイピア数は微分しても値が変わらない、というのはわかった。
eを底とする指数関数 e^xをexp(x)と表すのもわかった。
しかし、これがなんで便利なんだろう。

連続した確率計算において、ネイピア数eは重要な役割を果たす
あ!

対数logの書き方

log[2]4 = 2
→ 2^2 = 4 となるからですね。
log[3]27 = 3

log[a]a = 1
log[a]1 = 0
log[a]X + log[a]Y は、、、log[a]XY これも当たり前ですね。
log[a]X – log[a]Y = log[a]X/Y うん、少し考えればわかる。
p*log[a]X = log[a]X^p うん、これもわかりますな。

logX / loga
あれーーーーーーーーーーーーーーーー。。。

aの0乗が1の理由

2^5 = 32
→ %2
2^4 = 16
→ %2
2^3 = 8
→ %2
2^2 = 4
→ %2
2^1 = 2

だから、
2^0 は、2%2で1
これは階乗の規則性からの説明。わかることはわかる。

a^x は、1*x*x …. という解釈。最初に1をかけているから、a^0は1になるという説明。
うーん、これはこじつけのような説明。。

指数法則
a^n x a^m = a^(n+m)
これはわかります。nを0にします。
a^0 x a^m = a^m
こうすると、a^0 = 1になります。
まあ、法則から証明するというのは帰納法的だが、しっくりとはきますね。

指数関数と対数関数(log)

指数関数の定義
a > 0, a != 1
y = a^x

a > 1 の時、xが増えるにつれyも増えていく
逆に 0 < a < 1のときは、x が増えるにつれ、yは逓減していく a^0 = 1 あれ、何故 a^0は1なんだ?? べき乗は掛け算の繰り返しだから、aを0回かけるなら 0じゃ無いの? なんか基礎中の基礎でつまづいた。。つまづいたというより、a^0=0であってると思うんだが。。

機械学習に必要な数学的基礎

ーーーーーーーーーーーーー
変数・定数
1次式と2次式
関数の概念
平方根
累乗と累乗根
指数関数と対数関数
自然対数
シグモイド関数
三角関数
絶対値とユークリッド距離
数列
要素と集合
ーーーーーーーーーーーーー
ちなみにこれ、中1から高校までの数学らしい。
指数関数、対数関数、自然対数、シグモイド関数、ユークリッド距離あたりから怪しくなってくるな。

– ニューラルネットワークでは、重み(w)という概念がある。コンピュータが自動的に重み(w)を学習する。学習したモデルを利用するときは重みが「定数」として扱われる。

– 一次式は直線、二次式は放物線
– 一番大きな次数についている係数の正負によりグラフの向きが異なる

xintd

ポート監視用のデーモンプログラム
inetdとTCP wrapper(tcpd)の組合せによるアクセス制限が一般的
xinetdの上位互換のinetd

xinetd
– 細かく設定可
– メール通知不可
– アドレス制御 固定長マスク
– 時間による制御可
– アクセス回数制限可
– サービスとインターフェイス 切り分け可
– フォワード機能可

xinetd は起動時に、このファイルから設定情報を読み込む

# default: off
# description: The rsync server is a good addition to an ftp server, as it \
#	allows crc checksumming etc.
service rsync
{
	disable	= yes
	flags		= IPv6
	socket_type     = stream
	wait            = no
	user            = root
	server          = /usr/bin/rsync
	server_args     = --daemon
	log_on_failure  += USERID
}