我们应该对整个数据集应用归一化还是仅对 X
Should we apply normalization on whole data set or only X
我正在做一个基于机器学习 (Python) 的项目,并在我的数据上尝试所有模型。
真的很迷茫
分类和回归
- 如果我必须对整个数据集应用归一化、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)
- 或者只需要申请特征(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到另一个)
我正在做一个基于机器学习 (Python) 的项目,并在我的数据上尝试所有模型。 真的很迷茫
分类和回归
- 如果我必须对整个数据集应用归一化、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)
- 或者只需要申请特征(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到另一个)