机器学习数据预处理与特征工程、归一化
目录
数据集分割
特征工程:预处理
最小最大归一化
标准化
归一化处理的API
数据集分割
采用train_test_split函数来进行数据集分割,并导入自sklearn.model_selection模块中的该函数API
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=1)
参数的设置包括输入数据特征值x、数据标签值y,并将测试集比例设定为test_size=0.2。这表示测试集中占比为20%,而训练集则占据80%。同时,并指定随机种子为random_state=某个整数值。
分割完成后返回的数据集中包含四个关键组成部分。其中一部分为训练用例集合(Training Data Set),另一部分为测试用例集合(Test Data Set)。这些数据用于模型的学习与训练;而测试用例集合则未被模型接触过,并为此分配了x_train、x_test、y_train、y_test等变量以供后续操作。这些用例集合将被用来评估模型在学习阶段达到的学习效果水平。
x_train:表示训练集的特征数据 x_test:表示测试集的特征数据
y_train:表示训练集的标签值 y_test:表示测试集的标签值
特征工程:预处理
什么是数据归一化,为什么要进行数据归一化?
简单来说,在数据处理时会将各个变量的数值范围统一规定在一个特定的区间内:例如,在实际应用中常采用的范围是0至1之间。

如图所示,在原始数据集中覆盖了90至2的范围,并呈分散状态分布。通过归一化处理后,则均匀地分布在[0,1]区间内。
为什么要进行数据归一化?
特征的量纲或数值范围存在显著差异(即某个特性与其它特性的方差相差较大),可能导致结果受到显著影响,并且某些算法难以有效提取其他特性)。
归一化主要分为最小最大归一化,标准化。
最小最大归一化
原始数据如下:

最小最大化的过程:
首先指定归一化的区间,如归一化到[0,1]区间。
确定该列的最大和最小主特征根:例如,在这一列中存在两个主特征根分别为90和60
具体来说,我们对特征1的每个子特征执行转换操作。通过以下公式实现这一目标:将每个子特征的数值转化为\frac{X_{i} - \text{min}}{\text{max} - \text{min}}。

每一列特征都做这样的处理,得到转换后的特征:

在此前已完成第一步的基础上

至此已完成最小最大归一化过程的所有计算工作。所有特征值将在指定区间内进行归一化处理。

标准化
标准化可被视为归一化的一种替代方法,在实际应用中相比最小最大化的适用范围更为广泛。原因在于最小最大化的归一化过程中涉及两个关键参数——特征的最大值与最小值。这两个参数通常被视为噪声数据或干扰因素,在这种情况下可能会显著影响其效果而不理想的结果。而标准化不受此影响
标准化的步骤比较简单:
第一步求出特征n这一列所有特征的平均值
第二步求解特征n这一列的特征标准差。
运用公式进行归一化:

例如,在处理第一组变量时:首先计算该组变量的均值;然后计算每个样本在该组变量上的标准差;接着对每个样本的数据进行标准化处理(即数据减去均值后除以该组变量的标准差)。随后转而处理第二组变量,并重复上述步骤处理剩余各组变量。
标准化受异常值的影响较小,适合现代嘈杂大数据场景。
归一化处理的API
#最小-最大化
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)
#标准化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_standardized = scaler.fit_transform(X)
#如果特征数据经过数据分割 则:
x_train_standardized=scaler.fit_transform(x_train)
x_test_standardized=scaler.fit_transform(x_test)
