#前提・実現したいこと
表題のアルゴリズムの動きを簡単なデータで確認しています。
きちんと回帰計算ができているのでアルゴリズムに問題はないことはわかるのですが、アルゴリズムでよくわからない部分があるので教えて頂けるとありがたいです。
#該当のソースコード
html
1import numpy as np 2import pandas as pd 3import matplotlib.pyplot as plt 4 5class LinearRegressionGD(object): 6 def __init__(self, eta = 0.001, n_iter = 10): 7 self.eta = eta 8 self.n_iter = n_iter 9 10 def fit(self, X, y): 11 self.w_ = np.zeros(1 + X.shape[1]) 12 self.cost_ = [] 13 for i in range(self.n_iter): 14 15 output = self.net_input(X) 16 errors = (y - output) 17 18 self.w_[1:] += self.eta * X.T.dot(errors) 19 self.w_[0] += self.eta * errors.sum() 20 cost = (errors**2).sum() / 2.0 21 self.cost_.append(cost) 22 print("output:", output) 23 print("errors:",errors) 24 print('-'*40) 25 return self 26 27 def net_input(self, X): 28 return np.dot(X, self.w_[1:]) + self.w_[0] 29 30 def predict(self, X): 31 return self.net_input(X) 32 33X =np.arange(1,11).reshape(-1 , 1) 34y =np.array([1,3, 2, 5, 4, 7, 6, 8, 8, 10]) 35 36lr = LinearRegressionGD() 37lr.fit(X, y) 38a = np.array([1, 11]) 39b = a.reshape(-1, 1) 40 41plt.scatter(X, y) 42plt.plot(a, lr.predict(b)) 43plt.show() 44
#わからないところ
今回の場合、y = ax + b のaとbを求めるアルゴリズムだと思うのですが、
以下の部分では、b 1個と a 10個の要素からなるndarrayを作成しています。
各yの入力値と予測値を比較して、ずれ分を補正して次の計算に使用してaとbを求めるアルゴリズムというのはわかるのですが、
最終的に10個のaがどのように1つのaになるかがわかりません。
(計算最後の各a(w[1:])をみても同じ値にもなっていませんのでなぜ、これでうまく計算ができているのかがわからず困っています)
self.w_ = np.zeros(1 + X.shape[1])
お忙しい中恐縮ですが、教えて頂けると非常に助かります。
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー