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の配列の各数字の個数を数えているという事です。
00個、1101個ずつ。なので、
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は210個あります。
なので、00個、10個、210個という事で
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のみ自分はこう理解しました。間違っていたらすいません。