我们应该对整个数据集应用归一化还是仅对 X

Should we apply normalization on whole data set or only X

我正在做一个基于机器学习 (Python) 的项目,并在我的数据上尝试所有模型。 真的很迷茫

分类和回归

  1. 如果我必须对整个数据集应用归一化、Z 分数或标准偏差,然后设置特征 (X) 和输出 (y) 的值。
    def normalize(df):
        from sklearn.preprocessing import MaxAbsScaler
        scaler = MaxAbsScaler()
        scaler.fit(df)
        scaled = scaler.transform(df)
        scaled_df = pd.DataFrame(scaled, columns=df.columns)
        return scaled_df
    
data=normalize(data)
X=data.drop['col']
y=data['col']

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

  1. 或者只需要申请特征(X)
X=data.drop['col']
y=data['col']

def normalize(df):
    from sklearn.preprocessing import MaxAbsScaler
    scaler = MaxAbsScaler()
    scaler.fit(df)
    scaled = scaler.transform(df)
    scaled_df = pd.DataFrame(scaled, columns=df.columns)
    return scaled_df

X=normalize(X)

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

TLDR; 对输入数据进行归一化,但不对输出进行归一化。

从逻辑上讲,归一化既依赖于算法又基于特征。

有些算法不需要任何规范化(如决策树)。

对数据集应用归一化:您应该对每个特征执行归一化,但如果您的数据集中有多个特征,则对整个数据集中存在的所有示例执行归一化。

例如,假设您有 X 和 Y 两个特征。特征 X 始终是 [0,10] 范围内的小数。另一方面,Y 在 [100K,1M] 范围内。如果对 X 和 Y 进行一次归一化,对 X 和 Y 合并进行一次归一化,您会看到特征 X 的值如何变得无关紧要。

对于输出(标签):

通常,没有必要为任何回归或 class化任务规范化输出或标签。但是,请确保在训练时间和推理时间对训练数据进行归一化。

如果任务是 class化,常见的方法就是编码 class 数字(如果你有 classes 狗和猫。你将 0 分配给 1 和1到另一个)