Notebook前回まではX軸とY軸の二要素のみを扱ってきました。二要素ならばそこまでがっつりやりこまなくてもなんとかなりましたが、あまり機械学習という感じもしませんでした。今回は入力が二要素の場合です。最終的には多数要素を扱いますが、回帰モデルも単純な一次関数にはならないので少しそれっぽさがでてくるとともに難解になってくると思われます。二次元入力の面モデルデータセットの準備とにもかくにもデータセットを準備します。今回も本ブログのアクセス関連のデータを使用したいと思います。※データ自体はなんでもいいです。84.94]データセットは前回と同じように用意ができました。今回はデータセットの時点で三次元となりイメージがややしにくいため、三次元の散布図化します。散布図プロットは上記のようになるんですね。前回までで、ビュー数とユーザ数については明確に相関関係があることが分かっていますが、セッション数とどのような相関関係をもつのか見ていきます。Pythonで面モデルを生成するまずはPythonによる実装から入っていきます。中身は後からみていきましょう。cm".format(npy.sqrt(mse)))plt.show()・出力結果それらしい面が生成できました。それらしい結果にするために今回は「W」のパラメータを調整する必要があります。W=[0.45,0.5,100]この面は以下の式を元に生成しています。w[2]プログラム上の都合で変数名が上記のようになっていますが、実際にやりたいことは以下の通りです。表示範囲のxとyに対してパラメータの「w」を用いてzを表現しています。式により表現が可能でした。入力値が二次元の場合でも平均二乗誤差を式により導出してみます。Z軸で表現すると最小二乗法の式は以下のように表すことができます。ここから最適なw[x]の値を求めればよいのです。流れとしてはパラメータの数が変わっても同じで、w[x]に対する偏微分をおこいます。それぞれの式がゼロになる場合を求めればそこがJの最小値となります。ここから先は実際に先ほどのJに関する式を偏微分し連立方程式を解くことになりますが相当しんどいのでそこは割愛します。式が煩雑になるので、一般的に使用されると言われる平均の表現を使用します。「f(x)」という式の平均は「<f(x)>」で表現できます。連立方程式を解くとw[x]は以下のように表現されます。「var(x)」は統計用語で分散と呼ばれるものでそのまま数値のばらつきを表現しています。数式的な意味としては、平均値からの差をとった偏差を二乗してから足し合わせ平均をとったものです。「cov(x,y)」は共分散と呼ばれるもので、xとyの数値の関係性を数値で表現したものと捉えてよさそうです。それぞれ以下のように表現されます。非常に難解になってきましたので、ここからPythonの実装で済ませましょう。cmshow_model関数やshow_plane関数などは前のものをそのまま流用しています。解析解の導出関数(fit_plane)は連立方程式を解くと求められるw[x]の式を表しています。var関数(分散)はnumpyの標準ライブラリをそのまま使用できます。cov関数(共分散)は関数を自前で用意すれば、それを流用できるので後は式に沿って関数を構築します。偏微分による関数の導出は正直かなり難しいですが、そこまで求められれば実装自体は単純なもので方法で実装できると感じます。この結果から何が分かるかと言うと、回帰モデルとのズレである標準偏差(SD)が入力パラメータが1つだったときと比較して小さくなっています。1次元入力による勾配降下法SD=71.262次元入力による面モデルSD=18.35相関のあるパラメータを増やすと入力値を増やした方が精度が上がることが分かります。今回はここまでにします。次回はさらに入力パラメータを増やした場合でも対応できるようにしたいです。その6(指数対数)またまたしばらくサボっていました。その5(行列2)長くなってきたので一旦切りました。回帰編(多次元モデル)【Docker】sudoなしでDockerコマンドを実行する月別アーカイブはてなブログをはじめよう!wantanBlogさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。