fx(20)-fx(10)print(dy)>100print(dy/dx)>10ここで、xの増加量である10をhと置き換えてみると、上の式はこのように書き換えることができます。それでは次にこのhの幅を少しずつ短くした時の傾きをみてみましょう。hが短くなるにつれて傾きが小さくなり、最終的に0になりました。これはx=10のときの傾きが0であることを表しています。今度は、とした際に、hを徐々に短くしてみましょう。最終的に傾きは、20となり、x=20の点での傾きを表しています。傾きを求めるためには2つの点が必要ですが、その2点間の距離を0に近づけていくことで、関数上の任意の点での傾きを近似的に求めることできます。接線みたいなものです。これが微分です!このhを限りなくゼロに近づけていくことを数学では、極限といい英単語Limitを使ってと表現します。先ほどの式と組み合わせると、関数f(x)上のある点xでの傾きは、となります。関数f(x)上の点xでの傾きという意味で、導関数とも呼ばれます。x=10の傾きは0でした。上記に値を入れて確認してみます。ここがポイントですが、極限では、hが最終的に0になるのでh=0とします。すると答えは0になり、これがx=10の点での傾きとなります。x=20としてみるととなるので、hを0にすると20となることが分かります。RやPythonでは、h=0にすると計算ができないため、hには1のマイナス10乗などとても小さい値にします。#ほとんど20微分の公式ここまでで、微分をで表わすことができるようになりました。いちいち傾きを求めるために、上記の式に代入して、h=0とするのは大変です。そこで、微分には便利な公式がたくさんあります。後々に様々な公式を紹介するとして、今の段階では、1つだけ紹介します。上の左辺は、出力結果をyで表すとは限らないので、dyのyをf(x)に置き換えたこちらの書き方が一般的です。なることを表しています。実際に先ほどの関数を使ってやってみましょう。同じになりましたね!ポイントは、xに関係のない項は無視できるところです。この微分を理解するだけで、統計、機械学習の学びが大きく前進します!RやPythonで微分を行う方法は、少し複雑になるので、下記に分けて書いていきます。Rで微分Rで微分を行うには、最初にexpressionで関数(fx)を定義し、driveを使うと、expressionで定義された関数の導関数(fd)が算出されます。導関数に値を入れると、元の関数に入れた時の値(fxの出力値)と、導関数に入れた時の値(傾き)が算出されます。20pythonで微分pythonで微分を行うには、代数計算ライブラリsympyを使います。sympyは、計算結果をTex形式で出力してくれるとても便利なライブラリです。方はインストールしておきましょう。sympy最初にsym.symbolsで使いたい文字を定義し、関数(fx)を作ります。sym.diffを使うと、定義された関数の導関数(fdx)が算出されます。導関数を代入すた変数で、subsを使うと微分後の傾きが算出されます。引数は導関数の中で値を代入したい文字(ここではx)と、その値を渡します。x=20で微分print(fdx.subs(x,20))>20微分の使いみちそれでは、実際にどのように微分が使われるのか見ていきましょう。先程の関数は、x=10のところで傾きが0となりました。このよう微分した値が0になるところが、ある関数の値を最大または最小にする入力の値となる性質を頻繁に利用します。今度はこんな関数を考えてみましょう。この関数を最小とするxの値を求めてみます。微分の公式を使うととなります。傾きが0になれば良いので、イコール0として方程式を解いてみるととなり、x=10が関数f(x)を最小にする値となることが分かります。このときの最小値は、ですね。その他の値をxに入れて傾きと関数の値を可視化したものが以下になります。解を求めるための関数です。expressionで定義した関数をDを使うことで、導関数を出力し、その結果を新たに関数として定義します。それをunirootで0となる解を求めます。=0となるxが存在する範囲を指定する必要があることに注意してください。unirootで方程式を解く#範囲を指定する必要がある。10pythonpythonでは、先ほど同様にdiffで微分した後、solveを使って方程式を解きます。solveは関数=0となる値を求める関数で、答えはリスト形式で返ってきます。sym.diff(fx)print(sym.solve(fdx)[0])>10偏微分とは?さて、最後は微分の進化系である偏微分です。偏微分は、名前の通り偏った微分で、微分する文字が2つ以上になるときに使います。こんな関数を考えてみましょう。今度は、入力の値がxとyの2つです。ここでも頭の中で電卓をイメージしてみます。x=5、y=10とするととなります。この関数にx,yをいろいろ変えて出力した値、3次元グラフにしてました。このように、同じxやyの値でも、相方の値によって傾きの値が変わり、関数を最小にするx,yの値が異なるときに偏微分を使います!偏微分といっても、何か新しいことをするわけではないです。偏微分の記号には慣れておきましょう。偏微分の実践それでは、実際に偏微分を実践していきましょう。やり方は簡単で、微分したい変数以外の変数は、ただの定数として扱うだけです。式を展開してみましょう。xで偏微分してみます。続いて、yでも偏微分します。このように、偏微分をしたい変数に関係のない部分は、あたかも定数のように扱うことができます。最後にどちらの式でも傾きが0になればよいので、イコール0とすると中学校でならう連立方程式の問題となります。これを解いてみるとが答えとなって、これがこの関数を最小にするxyの値となります。Rで偏微分Rで偏微分を行うには、少し工夫が必要で、連立方程式を行列の形で書く必要があります。そのため、と、左辺を文字だけ、右辺を数字だけの連立方程式に直します。右辺の行列と左辺のベクトルを渡して、逆行列なるものを求めることで解くことができます。考え方は、後の記事でご紹介します。y)#連立方程式#左辺を行列型に直す。matrix(c(4,-2,-2,4),2,2)#右辺をベクトル型に直す。6.666667また、関数を最小にする値を求めるだけであれば、optimやoptimiseという関数を使うこともできるので、気になる方はこちらをご覧ください。www.medi-08-data-06.workpythonで偏微分pythonでは、比較的簡単に偏微分を行うことができます。渡して連立方程式を解きます。上記の関数fxyを偏微分する際に愚直に式を展開して微分を行いましたが、微分の公式には合成関数の微分という便利な公式があります。