PAGE TOP

取り組み

印刷する

みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習《3》

必要な数学の学習

さぼ郎
数学

一応、pythonという言語の基礎編が終了し、だんだん、核心に近づきつつあります。

数学の知識について、N次関数と累乗がわかればいいとのことですが、本当は「線形代数」と「統計学」の知識があれば、尚いいとのことです。

線形代数では「ベクトル」「行列」「テンソル」
統計学では「回帰分析」「ベイス推定」

まず、新しい「project」を作ります。そこに、「パッケージ」というのを導入するのだそうです。

Udemyの動画ではMACなので、説明と少し違いますが、「Inspection」という画面で「パッケージ」を検索してインストールするという手はずになります。

導入するパッケージは「pip」「numpy」「matplotlib」の3個をインストールします。それぞれが何の役に立つのかは不明です。

しかし、ここで問題が発生しています。というのは、アカデミーでは「2系」のPythonでなければいけないとのことですが、受講する前に既に「3系」のPythonをanacondaでインストールしてあったので、インタープリタを「2系」で選んでも、パッケージがダメなようです。

ということで、自力で「3系」のPythonでチャレンジしていくか、一切合切をアンインストールするかの選択をいずれは迫られるかとは覚悟しています。

必要な数学の学習

41. 機械学習に必要な数学
このUdemyの講座では、「N次関数」「累乗」程度。
ネイピア数や微分は、講座の中では扱う。
機械学習には線形代数や統計学が必要になる。
線形代数ではベクトル、行列、テンソル
統計学では、回帰分析、ベイズ推定などが扱えれば、より高度な問題も解決できるようになる。

42. matplotlibの導入
グラフを描くパッケージである「matplotlib」を使う。
他に「pip」「numpy」もインストールする。
インストールは、PyCharmの「Project」→「Project Interpreter」で、パッケージを追加します。
図3

赤丸の部分をクリックする。

図

この「+」をクリックする。

図2

「Install Package」をクリックすると、パッケージが導入される。

43. 一次関数の描画
import matplotlib.pyplot as plt
import numpy as np

x=np.arange(0,10,0.1)
print(x)

y=2*x+1
print(y)

plt.plot(x,y)
plt.show()

import matplotlib.pyplot as plt
import numpy as np
パッケージを導入しています。
x=np.arange(0,10,0.1)
「numpy」の持つ「arange」を使って、0から10までを0.1刻みでリストを作成します。
print(x)

y=2*x+1
print(y)
Y=2X+1 という1次関数を作成します。
plt.plot(x,y)
plt.show()
plt.show() で描画したグラフを表示します。

図

44. 様々な関数の描画
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-5, 15, 0.1)
y_2 = x ** 2 - 10 * x + 10

y_3 = x ** 3 - 10 * x ** 2 - 10 * x + 10

plt.plot(x, y_2)
plt.plot(x, y_3)
pythonでは、「二乗」は「**2」、「三乗」は「**3」と書くようです。

ちなみにgawkでは、「^2」「^3」と書きます。Cだと「^」は排他的論理和(XOR)を意味してしまいます。

グラフ


45. 指数関数
x=np.arange(-5,5,0.1)
y_2=2**x
y_3=3**x
指数は、このように書くそうです。

で、出力すると、
グラフ

ところで、指数と対数の関係って、覚えていますか。
8=2**3
これを対数で表すと
3=log28
こんな関係でしたよね。

xが-5から5までを0.1刻みで出力すると、このようなグラフになるというわけです。

46. ネイピア数
#y=(e^(x+dx)-e^x)/dx
y_de=(e**(x+dx)-e**x)/dx
ネイピア数」という名称は初めて目にしました。
e=math.e
print(e)
math」というパッケージをインポートして、「math.e」を出力すると、「2.718281828459045」のように出力されます。

俗には「自然対数の底」と言われています。
y_e=e**x
y_de=(e**(x+dx)-e**x)/dx
この2つが、dxの刻みを細かくすると、ほとんど近似していきます。それが、何を意味するのかは、とても数学的な知識がないとおよそ理解出来なさそうです。

グラフ
dx=0.1 の場合

47. シグモイド関数1
「シグモイド関数」というのが登場してきました。
シグモイド関数
wiki「シグモイド関数」にリンク ↑

で、pythonによる数式では、ゲインが「1」のようです。シグモイド関数とは、「シグモイド関数は、生物の神経細胞が持つ性質をモデル化したものとして用いられる」のようです。

「ー無限」から「+無限」を「0」から「1」に単調に連続させて増加する関数で1つの変曲点を持つと説明されています。
import matplotlib.pyplot as plt
import numpy as np
import math

def sigmoid(a):
s=1/(1+e**-a)
return s

e=math.e
dx=0.1
x=np.arange(-8,8,dx)

#y=1/(1+e^(-x))
y_sig=sigmoid(x)
plt.plot(x,y_sig)
plt.show()
「def」と宣言しているのが「関数」。
出力すると、以下のような具合。

シグモイド関数

これがどうして、神経細胞が持つ性質なのかは分かりませんが、ともかく数学に踏み込むと、魑魅魍魎になるので、なるたけ踏み込みたくありません。

48. シグモイド関数2
# シグモイド関数:y=1/(1+e^(-x))
y_sig=sigmoid(x)
# シグモイド関数の傾き
y_dsig=(sigmoid(x+dx)-sigmoid(x))/dx
「y_sig」は、「シグモイド関数」そのまま。
「y_dsig」は、「シグモイド関数」を微分したものになります。
シグモイド関数にdx(0.1)の刻みを加算して、差分をdxで除しています。

シグモイド関数

y_sigd=sigmoid(x+dx)
「sigmoid_d」は補足的に入れてみました。
僅かなズレが中央部分に生じています。これを「0.1」で除すと、10倍していることになります。その曲線が「d_sigmoid」の曲線(緑色)ということになります。

49. シグモイド関数3
y_dsig=(sigmoid(x+dx)-sigmoid(x))/dx
plt.plot(x,y_dsig,label="d_sigmoid")
sigmoid関数を使って、プロットする際にも式にして出力しているものを、
def d_sigmoid(a):
d=sigmoid(a)*(1-sigmoid(a))
return d
このような関数にまとめて、
dy_sig=d_sigmoid(x)
呼び出すだけで、上記の関数と式と同じ結果になります。といっても、解釈のしようもありません。

言われたままに、式を入れて実行すると、確かに「シグモイド関数2」と同じグラフがプロットされました。

キーワード