質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

194閲覧

python, リストの取り扱い

TakayukiYamada

総合スコア13

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/09/19 13:07

編集2018/09/19 13:17

pythonの初歩的な質問です。

今、機械学習の本でパーセプトロンの実装するところを
勉強しておりますが、その中の記述で分からないところがあり
質問しました。

重みwを更新するところで、このソースだと
self.w_[1:] += update*xi
と正解値との誤差に説明変数のベクトルをかけて+=で
重みベクトルを更新しておりますが、
pythonのリストの説明には+=はappendと同じ機能があるとの事で、こちらでも
実際に行うと下記のような結果になっております。
In :a = [1,2,3]
b = [4,5]
a += b
a
out:
a = [1,2,3,4,5]

このソースはどのようにして
それぞれの重みの要素に値を追加しているのでしょうか?
初歩的ですがよろしくお願いします。

ソース

class Perceptron(object): def __init__(self,eta=0.01,n_iter=50,random_state=1): self.eta = eta self.n_iter = n_iter self.random_state = random_state def fit(self,X,y): rgen = np.random.RandomState(self.random_state) self.w_ = rgen.normal(loc = 0.0,scale = 0.01,size = 1 + X.shape[1]) self.errors_ = [] for _ in range(self.n_iter): errors = 0 for xi,target in zip(X,y): #updateはスカラー update = self.eta*(target - self.predict(xi)) self.w_[1:] += update*xi self.w_[0] += update*1 errors += int(update != 0.0) self.errors_.append(errors) return self def net_input(self,X): return np.dot(X,self.w_[1:]) + self.w_[0] def predict(self,X): return np.where(self.net_input(X) >= 0.0,1,-1)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2018/09/19 13:13

<code>ボタンで挿入できるコードブロックを活用して見た目を綺麗にしてください
TakayukiYamada

2018/09/19 13:17

すいません。修正いたしました。
guest

回答1

0

ベストアンサー

In :a = [1,2,3]
a += 4
a
out:
a = [1,2,3,4]

これは間違いでは?

python

1>>> a = [1,2,3] 2>>> a += 4 3Traceback (most recent call last): 4 File "<stdin>", line 1, in <module> 5TypeError: 'int' object is not iterable 6>>> a 7[1, 2, 3] 8

また、型がlistなのかnumpy配列なのかによってそのコードは動作が変わってきます。

python

1>>> a = [1,2,3] 2>>> a += [4] # appendの代わりにしたければ右辺は要素数1のlist等のイテレータにしておく。つまり本当はextendとして機能する 3>>> a 4[1, 2, 3, 4] 5>>> import numpy as np 6>>> a = np.array([1,2,3]) 7>>> a += 4 # numpy配列の場合は全要素に対して演算される 8>>> a 9array([5, 6, 7])

投稿2018/09/19 13:12

編集2018/09/19 13:17
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2018/09/19 13:20

ソースコードを見た限りだと、self.w_はnumpy配列(np.array型)だと思いますが
TakayukiYamada

2018/09/19 13:42

勘違いしておりました。。。 ありがとうございます。
hayataka2049

2018/09/19 13:53

numpy配列ということで、この部分の動作は理解できたでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問