トレーニングおよびテストデータの変数が大文字で定義されているのはなぜですか(Python)。


13

この質問がこのサイトで最も適切であることを願っています...

Pythonでは、通常、クラス名は最初の文字として大文字を使用して定義されます。次に例を示します。

class Vehicle:
    ...

しかし、機械学習の分野では、しばしば回は訓練し、試験データは以下のように定義されているXY-ではないxy。たとえば、私は現在Kerasこのチュートリアルを読んでいますが、変数としてXおよびYを使用しています:

from sklearn import datasets

mnist = datasets.load_digits()
X = mnist.data
Y = mnist.target

なぜこれらは大文字として定義されているのですか?これらの変数を定義するために大文字を使用する方が良いという、機械学習分野の間に(少なくともPythonでは)慣例はありますか?

あるいは、人々は機械学習で大文字と小文字の変数を区別しますか?

実際、同じチュートリアルが後でこれらの変数を次のように区別します。

from sklearn.cross_validation import train_test_split

train_X, test_X, train_y, test_y = train_test_split(X, Y, train_size=0.7, random_state=0)

私たちのほとんどはこの質問を持っていたと確信していますが、笑うのは愚かすぎました。ありがとう:)
Ankit Bindal

回答:


19

X(場合によってはY)変数は行列です。

一部の数学表記では、ベクトル変数名を小文字で、行列変数名を大文字で記述するのが一般的です。多くの場合、これらは太字になっている、または他の注釈が付いていますが、コードにうまく変換できません。いずれにせよ、私はこの表記法から慣習が移行したと信じています。

コードで気づくかもしれませんが、ターゲット変数が値の単一の列である場合、それは書き込まれるyので、X, y

もちろん、これはPythonでは特別な意味を持つものではなく、自由にこの規則を無視できます。ただし、規約となっているため、コードを共有する場合は維持する価値があります。


8

これはPythonとは関係なく、数学と関係があると思います。Xは行列、yはベクトルです(ほとんどの場合)。通常、大文字は行列に使用され、小文字はベクトルに使用されます。

そのため、次のようなことがよくあります(sklearnの例から)。

digits = datasets.load_digits(n_class=10)
X = digits.data
y = digits.target

またはそれ(同じ例から):

x_min, x_max = np.min(X_red, axis=0), np.max(X_red, axis=0)
X_red = (X_red - x_min) / (x_max - x_min)

ここで、X_redはmxn行列(大文字)で、x_minは長さnのベクトル(小文字)です。


ああ、それは理にかなっています。忘れました。しかし、Yそれがベクトルであるにもかかわらず、なぜ大文字でもあるのでしょうか。(をY.shape返します(1797,)、FYI)
Blaszard 2017年

1
@Blaszard:その場合、誰かが慣習に従わなかったと思います。MNISTと同様のマルチクラス分類子を使用すると、ターゲット変数がクラスIDのリスト(ベクトル)とワンホットエンコーディングのリスト(マトリックス)の間で形式を変更できるという複雑さが追加されます。
Neil Slater

@NeilSlaterああ、それは理にかなっています。フォローアップありがとうございます。
Blaszard 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.