服务热线
135-6963-3175
什么是归一化?
归一化是一种数据预处理技术,旨在将特征数据缩放到一个特定的范围内,通常是 0 到 1 或 -1 到 1 之间。这样做的目的是消除特征之间的量纲差异,以便更好地适应某些机器学习算法。
举个例子来说明归一化的意思。假设你有一个包含房屋面积(以平方英尺为单位)和房价(以美元为单位)的数据集,数据如下:
房屋面积 房价 1500 200000 2000 250000 1200 180000
在这个例子中,房屋面积的范围是 1200 到 2000 平方英尺,而房价的范围是 180,000 到 250,000 美元。这两个特征的量纲差异很大,可能会对某些机器学习算法产生影响。
为了解决这个问题,你可以使用归一化将两个特征缩放到 0 到 1 或 -1 到 1 的范围内。使用 Min-Max 归一化方法可以实现这一目标。经过归一化处理后的数据如下:
房屋面积 房价 0.333 0.444 1.000 1.000 0.000 0.000
在归一化后的数据中,房屋面积和房价的值都位于 0 到 1 的范围内,消除了量纲差异。这样,在使用归一化后的数据进行机器学习模型的训练时,模型能够更好地处理这些特征,不会因为量纲差异而对特征产生不恰当的权重影响。
归一化是预处理数据的一种常见方法,可以应用于各种机器学习任务,包括回归问题、分类问题等。
特征之间的量纲差异是什么呢?
特征之间的量纲差异是指不同特征的取值范围或单位之间的差异。当特征之间的量纲差异很大时,可能会对某些机器学习算法产生影响,导致模型无法准确地学习特征之间的关系。
举个例子来说明特征之间的量纲差异。假设你有一个汽车数据集,其中包含以下两个特征:车速(以公里/小时为单位)和车龄(以年为单位)。数据如下所示:
车速 车龄 100 3 60 5 120 1
在这个例子中,车速的范围是 60 到 120 公里/小时,而车龄的范围是 1 到 5 年。这两个特征的量纲差异很大,车速的值通常在 60 到 120 之间,而车龄的值通常在 1 到 5 之间。
如果不对这两个特征进行归一化处理,某些机器学习算法可能会受到量纲差异的影响。例如,如果你使用基于欧几里德距离的算法(如 KNN)来计算样本之间的相似度,车速这个特征的影响将远大于车龄,因为车速的数值范围更大。这可能导致模型过度依赖车速特征,而无法正确地学习车速和车龄之间的关系。
通过归一化处理,将车速和车龄缩放到相同的范围内,可以消除特征之间的量纲差异,使得模型能够更好地学习特征之间的关系,减少量纲差异对模型的影响。
如何进行归一化计算处理?
归一化计算处理可以使用不同的方法,其中最常见的方法是使用最小-最大归一化(Min-Max Normalization)和标准化(Standardization)。
1、最小-最大归一化(Min-Max Normalization):
最小-最大归一化将数据缩放到指定的范围内,通常是 0 到 1 或 -1 到 1。具体计算步骤如下:
对于每个特征,找到最小值(min)和最大值(max)。
对于每个特征的每个值,使用以下公式进行归一化计算:
normalized_value = (value - min) / (max - min)
归一化后的值将在指定范围内,例如 0 到 1 或 -1 到 1。
举例:
假设你有一个包含房屋面积和房屋价格的数据集,如下所示:
面积 价格 150 500000 200 600000 120 400000
要对这些数据进行最小-最大归一化计算,可以按照以下步骤进行操作:
1.1 找到每个特征的最小值(min)和最大值(max)。
import numpy as np # 创建一个包含面积和价格数据的 NumPy 数组 data = np.array([[150, 500000], [200, 600000], [120, 400000]]) # 找到面积和价格的最小值和最大值 min_value = np.min(data, axis=0) max_value = np.max(data, axis=0)
在这个例子中,min_value 是一个包含面积和价格的最小值数组,max_value 是一个包含面积和价格的最大值数组。
1.2 对每个特征的每个值进行最小-最大归一化计算。
# 对每个特征的每个值进行最小-最大归一化计算 normalized_data = (data - min_value) / (max_value - min_value)
在这个例子中,normalized_data 是一个与原始数据具有相同形状的数组,其中的值经过最小-最大归一化处理。
最小-最大归一化后的数据如下所示:
面积 价格 0.375 0.5 1.0 1.0 0.0 0.0
在最小-最大归一化后的数据中,面积和价格的值都被缩放到 0 到 1 的范围内。
通过最小-最大归一化处理,可以将不同特征的值缩放到相同的范围内,消除量纲差异,使得数据更适合某些机器学习算法的使用。
2、标准化(Standardization):
标准化将数据转换为具有零均值和单位方差的分布。具体计算步骤如下:
对于每个特征,计算均值(mean)和标准差(standard deviation)。
对于每个特征的每个值,使用以下公式进行标准化计算:
standardized_value = (value - mean) / standard_deviation
标准化后的值将具有均值为 0,标准差为 1 的分布。
这些归一化方法可以使用各种编程语言和库来实现,例如 Python 中的 sklearn.preprocessing 模块。你可以根据自己的需求和数据特点选择适合的归一化方法。
值得注意的是,在进行归一化处理之前,你应该先确定是否需要对数据进行归一化,以及选择合适的归一化方法,这取决于数据的分布和机器学习算法的要求。
例子:
假设你有一个包含身高(以厘米为单位)和体重(以千克为单位)的数据集,如下所示:
身高 体重 170 65 165 60 180 75
要对这些数据进行标准化计算,可以按照以下步骤进行操作:
2.1 计算每个特征的均值和标准差。
import numpy as np # 创建一个包含身高和体重数据的 NumPy 数组 data = np.array([[170, 65], [165, 60], [180, 75]]) # 计算均值和标准差 mean = np.mean(data, axis=0) std = np.std(data, axis=0)
在这个例子中,mean 是一个包含身高和体重的均值数组,std 是一个包含身高和体重的标准差数组。
2.2 对每个特征的每个值进行标准化计算。
#对每个特征的每个值进行标准化计算 normalized_data = (data - mean) / std
在这个例子中,normalized_data 是一个与原始数据具有相同形状的数组,其中的值经过标准化处理。
标准化后的数据如下所示:
身高 体重 -0.267 -0.267 -1.069 -1.069 1.336 1.336
在标准化后的数据中,身高和体重的值都具有均值为 0,标准差为 1 的分布。
通过标准化处理,数据的单位和范围被转换为相对的标准差单位,使得不同特征之间具有可比性,更适合某些机器学习算法的使用。