如何查找 MinMaxScaler 对象中的行数和列数?

Posted

技术标签:

【中文标题】如何查找 MinMaxScaler 对象中的行数和列数?【英文标题】:How to find the number of rows and columns in a MinMaxScaler object? 【发布时间】:2021-08-20 01:19:31 【问题描述】:

我制作了一个 csv 文件的数据框并将其传递给 train_test_split,然后使用 MinMaxScaler 缩放整个 X 和 Y 数据框,但现在我想知道行和列的基本数量但不能。

df=pd.read_csv("cancer_classification.csv")
from sklearn.model_selection import train_test_split
X = df.drop("benign_0__mal_1",axis=1).values
y = df["benign_0__mal_1"].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_train = scaler.fit(X_train)
X_test = scaler.fit(X_test)
X_train.shape

这是抛出以下错误

AttributeError Traceback(最近一次调用最后一次) 在 () ----> 1 X_train.shape

AttributeError: 'MinMaxScaler' 对象没有属性 'shape'

我阅读了文档并能够使用 scale_ 找到行数,但找不到列。 这就是答案的样子,但我找不到可以提供帮助的属性

【问题讨论】:

使用fit_transform而不是fit,它会起作用。 @sandertjuh 谢谢它的工作 【参考方案1】:

MinMaxScaler 是一个对象,它可以fit 自身到某些数据,也可以transform 该数据。有

fit 方法使缩放器的参数适合该数据。然后它返回 MinMaxScaler 对象 transforms 方法根据缩放器的拟合参数转换数据。然后它返回转换后的数据。 fit_transform 方法首先将缩放器拟合到该数据,然后对其进行转换并返回数据的转换版本。

在您的示例中,您将 MinMaxScaler 对象本身视为数据! (见第一个要点)

相同的 MinMaxScaler 不应在不同的数据集上安装两次,因为它的内部值会发生变化。您永远不应该在测试数据集上安装 minmaxscaler,因为这是将测试数据泄漏到模型中的一种方式。您应该在训练数据上使用fit_transform(),在测试数据上使用transform()

这里的答案也可能有助于这个解释:fit-transform on training data and transform on test data

当您调用 StandardScaler.fit(X_train) 时,它的作用是根据 X_train 中的值计算均值和方差。然后调用 .transform() 将通过减去均值并除以方差来转换所有特征。为方便起见,这两个函数调用可以使用 fit_transform() 一步完成。

您希望仅使用训练数据来拟合缩放器的原因是您不希望使用来自测试数据的信息来偏向您的模型。

如果你 fit() 到你的测试数据,你会为每个特征计算一个新的平均值和方差。从理论上讲,如果您的测试集和训练集具有相同的分布,这些值可能非常相似,但实际上通常情况并非如此。

相反,您只想使用在训练数据上计算的参数来转换测试数据。

【讨论】:

感谢您提供如此广泛的解释。以后每次使用时,我都会牢记所有这些要点。 我的荣幸。如果此答案对您有用,请考虑按旁边的复选标记接受它。

以上是关于如何查找 MinMaxScaler 对象中的行数和列数?的主要内容,如果未能解决你的问题,请参考以下文章

选择 Count (distinct col) 查询以显示结果中的行数和列数 - postgresql

使用 jQuery 限制 textarea 中的行数和显示行数

可以决定 GridPane (JavaFX) 中的行数和列数

如何获取ResultSet的行数和列数

VBA中如何获取一个表格的行数和列数

如何在 C++ 中获取二维动态数组的行数和列数