为什么使用大写字母定义训练和测试数据的变量(在Python中)?


15

我希望这个问题最适合本网站...

在Python中,通常使用大写字母作为第一个字符来定义类名,例如

class Vehicle:
    ...

但是,在机器学习领域,通常将训练和测试数据定义为Xand Y-not xy。例如,我现在正在阅读有关Keras的教程,但是它使用XY作为变量:

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

Answers:


20

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,),仅供参考)
Blaszard

1
@布拉泽德:我希望在那种情况下有人没有遵守惯例。使用MNIST和类似的多类分类器,会增加复杂性,因为目标变量可以在类ID列表(向量)和一键编码(矩阵)列表之间改变形式。
尼尔·斯莱特

@NeilSlater嗯,这很有道理。感谢您的跟进。
布拉萨德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.