我正在做一个基于机器学习(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的值是如何变得不重要的。
For Output (labels):
一般来说,不需要对任何回归或分类任务的输出或标签进行规范化。但是,请确保在训练时间和推理时间对训练数据进行归一化。
如果任务是分类,通常的方法是只编码类号(如果有类dog和cat)。你把0赋给一个,把1赋给另一个)