以下のpythonの記述を実行させると、38行目のと41行目のprint文の結果が下記のような結果のなってしまって、リストのtheta_valuesにtheta_currentをアペンドできずに全てtheta_currentの最後の値で
書き変わってしまうようなのですが、理由が分かりかねています。何かアドバイスいただけると助かります。
[38行目のprint文の結果]
[[0.05839135]
[0.6532885 ]]
[[0.06289175]
[0.77000978]]
[[0.05782293]
[0.79134812]]
[[0.05106363]
[0.79572981]]
[[0.04401438]
[0.79709618]]
[41行目のprint文の結果]
[array([[0.04401438],
[0.79709618]]), array([[0.04401438],
[0.79709618]]), array([[0.04401438],
[0.79709618]]), array([[0.04401438],
[0.79709618]]), array([[0.04401438],
[0.79709618]])]
ここから、
1 import numpy as np
2 import matplotlib.pyplot as plt
3
4 # Xの一番左の列に1を挿入する
5 def add_column(X):
6 return np.insert(X, 0, 1, axis=1)
7
8 # 予測を行う(h(x; θ)を計算する)
9 def predict(X, theta):
10 X_prime = add_column(X)
11 return np.dot(theta.T, X_prime.T).T
12
13 # 損失を計算する (J(θ)をコードに落とし込む)
14 def loss(X, y, theta):
15 return (1 / (2 * X.shape[0])) * np.sum((predict(X, theta) - y) ** 2)
16
17 food_truck_data = np.loadtxt('food_truck.txt', delimiter=',')
18 X = food_truck_data[:, 0, np.newaxis]
19 y = food_truck_data[:, 1, np.newaxis]
20
21 theta_init = np.zeros((2, 1))
22 loss(X, y, theta_init)
23
24 # 勾配降下法におけるJ(θ)の微分を計算する
25 def loss_gradient(X, y, theta):
26 X_prime = add_column(X)
27 return (1 / X.shape[0]) * np.dot((predict(X, theta) - y).T, X_prime).T
28
29 # 勾配降下法
30 def run_gd(loss, loss_gradient, X, y, theta_init, lr=0.01, n_iter=5):
31 theta_current = theta_init.copy()
32 loss_values = []
33 theta_values = []
34
35 for i in range(n_iter):
36 loss_value = loss(X, y, theta_current)
37 theta_current -= lr * loss_gradient(X, y, theta_current)
38 print(theta_current)
39 loss_values.append(loss_value)
40 theta_values.append(theta_current)
41 print(theta_values)
42
43 return theta_current, loss_values, theta_values
44
45 theta_est, loss_values, theta_values = run_gd(loss, loss_gradient, X, y, the ta_init)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 物理の斜方投射のシミュレーションにおける位置や速度の単位について 4 2023/05/31 09:50
- その他(プログラミング・Web制作) 物理の斜方投射で目盛りに数値を入れたい 2 2023/05/27 06:32
- その他(プログラミング・Web制作) Pythonにおける物理のシミュレーションでの単位変換について 2 2023/06/02 17:11
- その他(プログラミング・Web制作) Pythonによる物理の斜方投射の位置座標表示について 2 2023/06/05 12:46
- その他(プログラミング・Web制作) 物理の斜方投射の目盛り線とx軸、y軸の追加について 3 2023/05/26 21:11
- その他(プログラミング・Web制作) Pythonでのかんたんな物理シミュレーションについての書籍 5 2023/06/02 07:37
- その他(プログラミング・Web制作) ボールの動きがスムーズに動いてかつ目盛り線描画を維持するためには 4 2023/05/31 10:01
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- 工学 Pythonの3Dグラフ表示に関する質問です。 1 2022/12/06 15:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックスの日本語をロ...
-
2次元配列の値の受け渡しについ...
-
プルダウンメニューにDBの内容...
-
phpとmysqlで「あいまい検索」...
-
PHPで配列をPOSTデータで送った...
-
マッチング処理(1:N)
-
$_SESSIONに二次元配列を使える...
-
バイナリファイルの内容を、そ...
-
スカラーのベクトル微分
-
複数行のデータのPOST処理に関して
-
配列をループでたくさん宣言し...
-
PHPでCSVの一部の行を編集したい
-
Perlで重複行を削除したい
-
CSVファイルの最終行のデー...
-
配列を回すとき、最後の要素だ...
-
file_existsでファイル名の部分...
-
【Smarty】foreach関数やsectio...
-
C言語 最大値と最小値を求めて...
-
C言語の配列をPush(追加)する...
-
PHPのセレクトボックスの初期値...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンメニューにDBの内容...
-
QuickForm createElement での ...
-
phpのin_array()でわからない事...
-
バッチでFTPコマンド
-
NGワード設定もしくはテキス...
-
2次元配列の値の受け渡しについ...
-
file_get_contents()にて文字化け
-
Zend_Form_Element_Hash
-
日付、時間の2段階でソート
-
サイト名を取得するPHP
-
codeigniterのページネーション...
-
しりとり 無限ループ?
-
phpとmysqlで「あいまい検索」...
-
listへのappendが出来ない件
-
テキストボックスの日本語をロ...
-
usortで3つの項目を昇順・降順...
-
1~100の数字の9の倍数だけ同じ...
-
pukiwikiのユーザ認証の設定で...
-
cakephp2.6でfindを使い合計値...
-
PHP5の外部コマンド実行で、バ...
おすすめ情報
38行目のtheta_currentも(2, 1)のndarrayです。
40行目のtheta_values.append(theta_current)をtheta_values.append(theta_current.tolist())
にしてリストでappendするとうまくいく様です。でもインターラクティブモードで実験してみるとリストへのndarrayのappendは問題なくできる様なのですが、何故この場合はうまくいかないのでしょうか?