《Machine Learning for OpenCV》学习笔记:数据预处理

本文是《Machine Learning for OpenCV》的学习笔记,主要介绍了特征标准化、特征归一化和特征缩放到特定范围的方法。通过scikit-learn的preprocessing模块,使用scale()函数进行特征标准化,normalize()函数实现特征归一化,并利用MinMaxScaler类将特征缩放到0到1之间。验证方法包括检查标准化和归一化后的数据特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.特征标准化

1.1特征标准化:

标准化是指把数据缩放到拥有零均值(均值为0)和单位方差(方差为1)的过程。可以手动标准化我们的数据:每个数据点减去所有数据的平均值  (μ) , 然后除以数据的方差(σ) 。即对于每个特征值,计算(x - μ) / σ 。

1.2scikit-learn代码实现

使用preprocessing模块的scale()函数实现。

1.3验证

一个实现了标准化后的特征矩阵应该每行的均值等于(或接近于),每一行的方差都为1。可以查看矩阵的mean属性和std属性进行验证。

# -*- coding:utf-8 -*-
from sklearn import preprocessing
import numpy as np

X = np.array(
	[[1., -2., 2.], [3., 0., 0.], [0., 1., -1]]
)   # 创建一个三行三列的二维数组
x_scaled = preprocessing.scale(X)
print(x_scaled)
"""
输出结果:
[[-0.26726124 -1.33630621  1.33630621]
 [ 1.33630621  0.26726124 -0.26726124]
 [-1.06904497  1.06904497 -1.06904497]]
"""
# 方差验证
print(x_scaled.mean(axis=0))  # [7.40148683e-17 0.00000000e+00 0.00000000e+00]
print(x_scaled.std())   # 1.0

 

二.特征归一化

归一化是缩放单个样本以使它们拥有单位范数的过程。在scikit-learn中,数据可以使用normalize()函数进行归一化。

# -*- coding:utf-8 -*-
from sklearn import preprocessing
import numpy as np

X = np.array(
	[[1., -2., 2.], [3., 0., 0.], [0., 1., -1]]
)   # 创建一个三行三列的二维数组
x_normalize_ll = preprocessing.normalize(X, norm='l1')  # L1范数(曼哈顿距离)
print(x_normalize_ll)
"""
输出结果:
[[ 0.2 -0.4  0.4]
 [ 1.   0.   0. ]
 [ 0.   0.5 -0.5]]
"""

三.将特征缩放到一定范围

3.1将特征缩放到一定范围

将特征缩放到最大值和最小值之间。一般来说,这两个值是0和1.这样每个特征值的最大绝对值就缩放到单位尺寸了。

3.2scikit-learn代码实现

使用sklearn.preprocessing.MinMaxScaler类,通过向MinMaxScaler类的构造函数传入关键字参数feature_range来指定不同的范围。

3.3验证

# -*- coding:utf-8 -*-
from sklearn import preprocessing
import numpy as np


X = np.array(
	[[1., -2., 2.], [3., 0., 0.], [0., 1., -1]]
)   # 创建一个三行三列的二维数组
min_max_scaler = preprocessing.MinMaxScaler()
x_min_max = min_max_scaler.fit_transform(X)

# 默认情况
print(x_min_max)
"""
[[0.33333333 0.         1.        ]
 [1.         0.66666667 0.33333333]
 [0.         1.         0.        ]]
"""

# 指定范围
min_max_range = (-10, 10)
min_max_scaler2 = preprocessing.MinMaxScaler(feature_range=min_max_range)
x_min_max2 = min_max_scaler2.fit_transform(X)
print(x_min_max2)
"""
[[ -3.33333333 -10.          10.        ]
 [ 10.           3.33333333  -3.33333333]
 [-10.          10.         -10.        ]]
"""

 

 

 

参考资料

[1].Michael Beyeler《Machine Learning for OpenCV》,https://github.com/mbeyeler/opencv-machine-learning

[2].MinMaxScaler类:https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html#sklearn-preprocessing-minmaxscaler 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值