我一直在学习一门机器学习课程,在回归课的最后一个额外的循环作业是
从波士顿定价数据集 TensorFlow tf.keras.datasets导入并对其建模。
在课程中,我了解到规范化数据集对训练模型是有益的,所以我想在波士顿数据集上试一试。指导员给出的关于规范化的示例使用了sklearn库,但是在我的搜索过程中,我发现TensorFlow还有一个规范化实用程序tf.keras.utils.normalize。
TensorFlow解决方案要简单得多,这让我们怀疑为什么讲师没有在sklearn方法上使用该方法。这就引出了我的问题:
当我应该选择一种规范化方法而不是另一种方法时,是否有特定的原因/用例,还是仅仅是一个偏好的问题?
我在代码中使用的TensorFlow规范化:
X_train_normalized = tf.keras.utils.normalize(X_train)
X_test_normalized = tf.keras.utils.normalize(X_test)正如课程中所演示的那样,sklearn正常化:
# Create column transformer (this will help us normalize/preprocess our data)
ct = make_column_transformer(
(MinMaxScaler(), ["age", "bmi", "children"]), # get all values between 0 and 1
(OneHotEncoder(handle_unknown="ignore"), ["sex", "smoker", "region"])
)
# Create X & y
X = insurance.drop("charges", axis=1)
y = insurance["charges"]
# Build our train and test sets (use random state to ensure same split as before)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Fit column transformer on the training data only (doing so on test data would result in data leakage)
ct.fit(X_train)
# Transform training and test data with normalization (MinMaxScalar) and one hot encoding (OneHotEncoder)
X_train_normal = ct.transform(X_train)
X_test_normal = ct.transform(X_test)发布于 2022-09-01 18:51:46
注意,甚至您也可以在训练模型之前定义规范化层并对训练数据进行调整,然后在模型结构中使用计算的均值、方差来实现该层。
norm_layer = tf.keras.layers.Normalization(axis=-1)
norm_layer.adapt(X_train)因此,我认为这将取决于您正在处理的案例,特别是当您的数据集只需要规范化时。正如你所知道的,神经网络和线性模型一样,在规范化数据集上有最好的性能。
https://stackoverflow.com/questions/73573226
复制相似问题