Menu
CoddyTech

ブロードキャスト

CoddyのMachine Learningジャーニー「データとプロット」セクションの一部。レッスン 13/60。

すべての特徴量が0付近にあると、モデルはよりよく学習します。そこで、各列の平均値をその列から引くと、NumPyが平均値をすべての行にコピーします。

身長と体重の3行2列の表から、平均値の行170と70を3行すべてにコピーしたものを引くと、中心化された表になる:0と-10、10と10、-10と0

コードでは、3人の身長と体重について次のようになります。

data = np.array([[170, 60],
                 [180, 80],
                 [160, 70]])
print(data - data.mean(axis=0))

これは次のように出力されます:

[[  0. -10.]
 [ 10.  10.]
 [-10.   0.]]

このコピーはブロードキャストです。表は中心化され、各値は列の平均からどれだけ離れているかを示しています。

平均値の形状は(2,)です。(3, 2)の表の各列に1つの値があります。長さがそれ以外の場合はエラーで停止します。

challenge icon

チャレンジ

簡単

フィットネスアプリでは、トレーニング前に各テーブルの中心化を行います。スターターコードは2つのテーブル、users(3つの特徴量)とworkouts(2つ)に対してcenterを呼び出し、結果を出力します。現在、centerはテーブルを変更せずに返します。

centerを完成させ、列数にかかわらず、各列の平均をその列から引くようにしてください。その下の行は変更しないでください。

ユーザーが2人、ワークアウトが2つの場合、出力は次のようになります。

Centered users:
[[-6.  7. -5.]
 [ 6. -7.  5.]]
Column means after centering: [0. 0. 0.]
Centered workouts:
[[-10. -90.]
 [ 10.  90.]]
Column means after centering: [0. 0.]

自分で試してみよう

import numpy as np


def center(table):
    # 各列の平均値を引いたtableを返す
    # 以下にコードを書いてください
    return table


# ユーザーごとに1行:年齢、安静時心拍数、1日あたりの運動時間(分)
users = np.array([[25, 62, 30],
                  [31, 70, 45],
                  [40, 58, 20],
                  [29, 66, 25]])
# ワークアウトごとに1行:運動時間(分)、消費カロリー
workouts = np.array([[30, 240],
                     [45, 410],
                     [20, 150],
                     [60, 520],
                     [35, 300]])

# 以下の行は変更しないでください
print("Centered users:")
print(center(users))
print("Column means after centering:", np.round(center(users).mean(axis=0), 2))
print("Centered workouts:")
print(center(workouts))
print("Column means after centering:", np.round(center(workouts).mean(axis=0), 2))
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

データとプロットのすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ