Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python NumPyのlagfit()メソッドでラゲール級数をデータに最小二乗フィッティングする方法

PythonのNumPyライブラリでは、numpy.polynomial.laguerreモジュールに含まれるlagfit()メソッドを使うことで、データに対するラゲール(Laguerre)級数の最小二乗フィット(Least squares fit)を簡単に実行できます。

このメソッドは、低次から高次の順に並べられたラゲール係数を返します。また、yが2次元配列である場合、yのk列目にあるデータに対応する係数は、戻り値のk列目に格納されます。

lagfit()メソッドの主なパラメータ

x(サンプル点のx座標)

M個のサンプル点(x[i], y[i])におけるx座標を指定します。

y(サンプル点のy座標)

サンプル点のy座標です。同じx座標を共有する複数組のサンプル点セットを、1回の呼び出しでそれぞれ独立にフィットさせたい場合は、1つのデータセットを1列として格納した2次元配列をyに渡します。

deg(フィッティング多項式の次数)

フィッティングに使用する多項式の次数を指定します。degに単一の整数を渡した場合は、deg次までのすべての項がフィットに含まれます。

rcond(相対条件数)

フィットの相対条件数です。最大特異値と比較してrcondより小さい特異値は無視されます。デフォルト値はlen(x)*epsで、ここでのepsはプラットフォームのfloat型の相対精度(多くの場合およそ2e-16)を指します。

full(戻り値の切り替え)

戻り値の内容を決めるスイッチです。False(デフォルト)の場合は係数のみが返され、Trueの場合は特異値分解から得られる診断情報も併せて返されます。

w(重み)

重みを指定します。Noneでない場合、重みw[i]はx[i]における非二乗残差 y[i] − ŷ[i] に適用されます。理想的には、w[i]*y[i]という積の誤差がすべて同じ分散を持つように重みを選択します。逆分散による重み付けを行う場合は、w[i] = 1/sigma(y[i]) を使用します。デフォルト値はNoneです。

実装手順

まず、必要なライブラリをインポートします。

import numpy as np
from numpy.polynomial import laguerre as L

x座標を作成します。

x = np.linspace(-1,1,51)

x座標を表示します。

print("X Co-ordinate...\n",x)

y座標を作成します。ここでは3次関数にランダムなノイズを加えたデータを生成しています。

y = x**3 - x + np.random.randn(len(x))
print("\nY Co-ordinate...\n",y)

laguerre.lagfit()メソッドを使って、データへの最小二乗フィットを実行します。full=Trueを指定することで、診断情報も取得できます。

c, stats = L.lagfit(x,y,3,full=True)
print("\nResult...\n",c)
print("\nResult...\n",stats)

コード例全体

import numpy as np
from numpy.polynomial import laguerre as L

# x座標
x = np.linspace(-1,1,51)

# x座標を表示
print("X Co-ordinate...\n",x)

# y座標(3次関数+ノイズ)
y = x**3 - x + np.random.randn(len(x))
print("\nY Co-ordinate...\n",y)

# ラゲール級数の最小二乗フィットを実行
c, stats = L.lagfit(x,y,3,full=True)

print("\nResult...\n",c)

print("\nResult...\n",stats)

実行結果

X Co-ordinate...
    [-1.   -0.96 -0.92 -0.88 -0.84 -0.8  -0.76 -0.72 -0.68 -0.64 -0.6  -0.56
     -0.52 -0.48 -0.44 -0.4  -0.36 -0.32 -0.28 -0.24 -0.2  -0.16 -0.12 -0.08
     -0.04  0.    0.04  0.08  0.12  0.16  0.2   0.24  0.28  0.32  0.36  0.4
      0.44  0.48  0.52  0.56  0.6   0.64  0.68  0.72  0.76  0.8   0.84  0.88
      0.92  0.96  1. ]

Y Co-ordinate...
    [ 2.60011413  0.59715605  1.38401537 -1.76702116 -1.48948207  0.19627462
     0.6350364   0.41990937 -0.72067571  0.07617042  0.33693761  1.08876378
     0.71283482  1.36064396  0.55285081  1.94847732  1.14871192 -0.26605826
    -1.18954961  1.15875553  0.30059389 -0.91705656  1.27988081 -0.42751846
     0.44466317 -1.41118489  0.31492152  0.70787202 -0.85295102 -0.45038585
    -2.05583591 -0.0799937  -1.13000262  0.09813804 -0.33068455  0.03329552
    -0.7666786  -0.9596926  -0.72177629 -0.62779169 -0.75490363 -0.7826376
    -2.26888118  1.1356559  -0.39593627  0.02709962 -0.95303898 -0.01582218
     0.65609447  1.43566953  1.10442549]

Result...
    [ 11.2805293 -36.35804353 36.47911284 -11.65554029]

Result...
    [array([43.46828156]), 4, array([1.88377481, 0.66402594, 0.10220349, 0.00405509]), 1.1324274851176597e-14]

このように、lagfit()メソッドを使えば、ノイズを含むデータに対してもラゲール級数による多項式近似を簡単に求めることができます。full=Trueを指定したことで、残差の二乗和、ランク、特異値、条件数といった診断情報も一緒に取得でき、フィットの品質を評価するのに役立ちます。

  1. TensorFlowとPythonでデータをモデルに適合させる方法:fitメソッドの基本

    TensorFlowでは、「fit」メソッドを使用することで、データをモデルに適合させることができます。本記事では、転移学習を活用した画像分類モデルの構築を例に、fitメソッドの基本的な使い方を解説します。転移学習とは何か少なくとも1つの畳み込み層(Convolutional Layer)を含むニューラルネットワークは、畳み込みニューラルネットワーク(CNN)と呼ばれ、学習モデルの構築に広く活用されています。画像分類における転移学習(Transfer Learning)の考え方は、「大規模で汎用的なデータセットで学習済みのモデルは、視覚世界における汎用モデルとして効果的に機能する」というもので

  2. Pythonでpandas Seriesの全要素をシャッフルする方法を解説

    はじめにデータ分析を行っていると、Series(シリーズ)内の要素の順序をランダムに入れ替えたい場面があります。例えば、データセットをランダム化してバイアスを排除したり、サンプリングの前処理としてシャッフルを行ったりするケースです。本記事では、元のSeriesとシャッフル後のSeriesの出力例をもとに、2つの実装方法をわかりやすく解説します。元のSeries: 0 1 1 2 2 3 3 4 4 5 dtype: int64 シャッフル後のSeries: 0 2 1 1 2 3 3 5 4 4 dtype: int64方法1:ra