python機械学習プログラミング(43ページ)

今回は少し進んで、43ページになります。

毎回プログラムのところでつまずいていますが、ちょっとずつでも進んでいきます。

さて、43ページの下の方で今回は詰まりました。というよりもまずここでつまずいて、他のところでもつまると思います。

つまずいた個所はここ

def _shuffle(self, X, y):
"""トレーニングデータをシャッフル"""
r = np.random.permutation(len(y))
return X[r], y[r]

トレーニングデータをシャッフルするというコメントがるのでとりあえずシャッフルするんだという理解まではしましたが具体的にどうなの??というところですね。

疑問になった点は、
permutation
というプログラムと引数に
len(y)
というプログラム
return X[r], y[r]
returnのあとが配列になっている。

プログラム初心者の僕はこの書き方がよくわかっていません。
returnもよく見るけど使い方もわかっていません。なので、確かめてみました。

実行プログラム
import numpy as np

def _shuffle(X,y):
    r = np.random.permutation(len(y))
    print("r")
    print(r)
    print("X[r]")
    print(X[r])
    print("y[r]")
    print(y[r])
    return X[r], y[r]
X = np.arange(40,60).reshape(4,5)
y = np.arange(8,12).reshape(4,1)
print("X")
print(X)
print("y")
print(y)
X, y = _shuffle(X, y)
print("shuffle X")
print(X)
print("shuffle y")
print(y)

<実行結果>


X
[[40 41 42 43 44]
 [45 46 47 48 49]
 [50 51 52 53 54]
 [55 56 57 58 59]]
y
[[ 8]
 [ 9]
 [10]
 [11]]
r
[2 1 3 0]
X[r]
[[50 51 52 53 54]
 [45 46 47 48 49]
 [55 56 57 58 59]
 [40 41 42 43 44]]
y[r]
[[10]
 [ 9]
 [11]
 [ 8]]
shuffle X
[[50 51 52 53 54]
 [45 46 47 48 49]
 [55 56 57 58 59]
 [40 41 42 43 44]]
shuffle y
[[10]
 [ 9]
 [11]
 [ 8]]

という感じです。
これでは説明しにくいのでもっとシンプルにします。

実行プログラム
import numpy as np   
def _shuffle(X,y):
    r = np.random.permutation(len(y))    ←len(y)は[0,1,2,3]なのでそれを並び替えてrに代入
    return X[r], y[r]            ←配列X[r]を返す。rがランダムなのでランダムなXが返される。
X = np.arange(40,60).reshape(4,5)
y = np.arange(8,12).reshape(4,1)
X, y = _shuffle(X, y)           ←XにシャッフルされたXを代入、yにシャッフルされたyを代入

なるほどぉ。