ソースの説明
ソースは【Python自前実装】曲線フィッティングとほぼ同じです。
違いは、LinearRegression が sklearn.linear_model.LinearRegression になっただけです。
ソース
import matplotlib.pyplot as plt import numpy as np from sklearn import linear_model # 計画行列クラス(※成分が1の列は作成しない) class DesignMatrix: def __init__(self, degree): self.degree = degree def transform(self, x): return np.hstack([x**(m+1) for m in range(self.degree)]) # 訓練データ作成のための真の関数 def true_func(x): return np.sin(2 * np.pi * x) # ランダムシードを設定する(乱数を固定する) np.random.seed(1) # 訓練データ数 N = 10 # 特徴空間の次元(モデルのパラメータ数) M = 4 # 訓練データxの列ベクトル(入力空間) x = np.linspace(0, 1, N).reshape(-1, 1) # 特徴空間作成のためのインスタンスを作成(※成分が1のみの列は作成しないため、M-1を渡す) dm = DesignMatrix(M-1) # 入力空間から特徴空間へ写す # 行列Phi(特徴空間)を作成(※成分が1のみの列は作成していない) Phi = dm.transform(x) # 訓練データt=sin(x)の列ベクトルに正規分布に従うノイズを加える t = true_func(x) + np.random.normal(0, 0.2, N).reshape(-1, 1) # 線形回帰のモデルを作成 model = linear_model.LinearRegression() # 学習する model.fit(Phi, t) # 係数、切片、決定係数を表示 print('係数', model.coef_) print('切片', model.intercept_) r2 = model.score(Phi, t) print('決定係数', r2) # 予測直線表示のためのxを作成 予測するために行列にする(reshape) x2 = np.linspace(0, 1, 100).reshape(-1,1) # 行列Phi2(特徴空間)を作成(※成分が1のみの列は作成していない) Phi2 = dm.transform(x2) # 予測する y2 = model.predict(Phi2) # グラフ表示 plt.scatter(x, t, marker ='+') plt.plot(x2, y2, color='orange') plt.show()
偉人の名言
人生とは結局、ハードルの連続だ。
ひとたび飛び越えてしまえば、考えていたよりもずっと簡単に見える。
ジョセフ・グルー
動画
なし