builtin_function_or_method' object is not subscriptableのエラーで困っています。
Pythonにて多次元ベクトルの線形回帰モデルを作成していますが、
builtin_function_or_method' object is not subscriptableのエラーで困っています。
なお、このコード自体は「機械学習のエッセンス」(加藤公一著 SB Creative)の第3版、P.286の内容です。
使用環境は、windows10, python3, jupyternotebookです。
初めての質問で不手際あれば申し訳ございません。
発生している問題・エラーメッセージ
TypeError Traceback (most recent call last) <ipython-input-68-b4eed7f0503d> in <module>() 25 26 model = linearreg.LinearRegression() ---> 27 model.fit(X, y) 28 print("係数:", model.w_) 29 print("(1,1)に対する予測値:", model.predict(np.array([1,1]))) ~\pyworks\linearreg.py in fit(self, X, t) TypeError: 'builtin_function_or_method' object is not subscriptable
該当のソースコード
まずは回帰を計算するクラスを実装しました
linearreg.py
Python
1import numpy as np 2from scipy import linalg 3 4class LinearRegression: 5 def __init__(self): 6 self.w_ = None 7 8 def fit(self, X, t): 9 Xtil = np.c_[np.ones(X.shape[0]), X] 10 A = np.dot(Xtil.T, Xtil) 11 b = np.dot(Xtil.T, t) 12 self.w_ = linalg.solve(A,b) 13 14 def predict(self, X): 15 if X.ndim == 1: 16 X = X.reshape(1, -1) 17 Xtil = np.c_[np.ones(X.shape[0]), X] 18 return np.dot(Xtil, self.w_)
2次元モデルを例として、以下のコードで回帰を実行します。
python
1import linearreg 2import numpy as np 3import matplotlib.pyplot as plt 4from mpl_toolkits.mplot3d import axes3d 5 6n=100 7scale=10 8 9np.random.seed(0) 10X = np.random.random((n, 2))*scale 11w0 = 1 12w1 = 2 13w2 = 3 14y = w0 + w1*X[:, 0] + w2*X[:, 1] +np.random.randn(n) 15 16model = linearreg.LinearRegression() 17model.fit(X, y) 18print("係数:", model.w_) 19print("(1,1)に対する予測値:", model.predict(np.array([1,1])))
試したこと
python
1Xtil = np.c_[np.ones(X.shape[0]), X] 2print(Xtil) 3A = np.dot(Xtil.T, Xtil) 4b = np.dot(Xtil.T, y) 5from scipy import linalg 6print(linalg.solve(A,b))
を実行したところ[1.11450326 1.95737004 3.00295751]が出力され、これはself.w_の値としては正解です。
Xの型が違っているような気がするのですが、何度トライしても良く分からなくて困っています。お願いします。
回答1件
あなたの回答
tips
プレビュー