{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 関数近似\n", "\n", "pythonのライブラリ利用演習を兼ねて、初歩的な関数近似と、利用上の注意について述べる。\n", "\n", "特に、自然科学における利用とデータサイエンス的な観点との差異にも述べる。\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## データの準備\n", "\n", "2つの値の組の$n$個のデータがあるとする。$(x_1,y_1),\\ (x_2, y_2),\\ \\cdots,\\ (x_n,y_n)$\n", "\n", "ここでは、$x$と$y$の関係が何かある関数$y=f(x)$で表されるとしてそれを探る問題を考えてみる。\n", "\n", "準備として仮想的なデータを用意する。\n", "\n", "$\\sin x$の値に、ガウシアンノイズを載せたデータを返す関数make_data_by_sin_gaussian()を以下のように作成する。\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import random\n", "\n", "def make_data_by_sin_gaussian(x):\n", " # y=sin (x)を計算し、ガウス分布に従うノイズを加える\n", " y = np.sin(x) # argument is a 1-d array -> returned variable is a 1-d array \n", " e = [random.gauss(0, 0.5) for i in range(len(y))] # 内包表記 (generate random numbers using list comprehension)\n", " # e = np.random.randn(len(x))*0.2\n", " y += e\n", " return y" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# データ数\n", "n_tr = 10\n", "x = np.linspace(0., np.pi*2., n_tr) # リスト 0から2πまでをn_tr等分した値を一次元配列" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0. , 0.6981317 , 1.3962634 , 2.0943951 , 2.7925268 ,\n", " 3.4906585 , 4.1887902 , 4.88692191, 5.58505361, 6.28318531])" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[