python機械学習プログラミング(197ページ)
197ページのプログラムについてです。
import numpy as np
np.argmax(np.bincount([0, 0, 1], weights=[0.2, 0.2, 0.6]))
np.bincount関数が何を意味するかさっぱり分からず、さらに、argmax関数も何を返してくれるのかを勘違いするという。。。
自分なりの理解
np.bincount([0, 0, 1], weights=[0.2, 0.2, 0.6])
bincount関数の意味が出てきた数字の個数を数えるという者みたいです。
つまり
>>> y1 = [10,9,8,7,6,5,4,3,2,1] >>> np.bincount(y1) array([0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int64) これは、y1の配列の各数字の個数を数えているという事です。 0は0個、1~10は1個ずつ。なので、 array([0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int64) という結果が出ているという事です。 >>> y2 = [2,2,2,2,2,2,2,2,2,2] >>> np.bincount(y2) array([ 0, 0, 10], dtype=int64) >>> の場合、y2は2が10個あります。 なので、0が0個、1が0個、2が10個という事で array([ 0, 0, 10], dtype=int64) となっているという事ですね。
では197ページのプログラムに戻ります。
np.argmax(np.bincount([0, 0, 1], weights=[0.2, 0.2, 0.6]))
np.bincount([0, 0, 1])
を考えます。
これは先ほどの例で考えると0が2個、1が1個となります。
そこでこの答えは
>>> np.bincount([0, 0, 1]) array([2, 1], dtype=int64)
という事で0が2個、1が1個と予想通りになりました。
ここに、重み(weights=[0.2, 0.2, 0.6])が入るとどうなるか。
この場合は
np.bincount([0, 0, 1])
の最初の0に0.2の重みを、2番目の0に0.2の重みを、3番目の1に0.6の重みをつけて計算するわけです。
なので、0が0.2個+0.2個、1が0.6個という感じで、計算されます。
なので、以下のような実行結果になるというわけです。
>>> np.bincount([0, 0, 1], weights=[0.2, 0.2, 0.6]) array([0.4, 0.6])
とりあえずbincountのみ自分はこう理解しました。間違っていたらすいません。