重庆建设工程信息网最新网站,注册个人网站要多少钱,网页qq登录手机版网址,wordpress课堂归一化与标准化 前言一、最小最大值归一化1.1 原理#xff08;公式#xff09;1.2 API 介绍1.2.1 参数介绍1.2.2 属性介绍1.2.3 注意事项1.2.4 代码演示 1.3 举例说明 二、标准化2.1 原理#xff08;公式#xff09;2.2 API 介绍2.2.1 参数介绍2.2.2 属性介绍2.2.3 注意事项… 归一化与标准化 前言一、最小最大值归一化1.1 原理公式1.2 API 介绍1.2.1 参数介绍1.2.2 属性介绍1.2.3 注意事项1.2.4 代码演示 1.3 举例说明 二、标准化2.1 原理公式2.2 API 介绍2.2.1 参数介绍2.2.2 属性介绍2.2.3 注意事项2.2.4 代码演示 2.3 举例说明 三、案例代码利用KNN算法进行鸢尾花分类总结 前言
特征的单位或者大小相差较大或者某特征的方差相比其他的特征要大出几个数量级容易影响支配目标结果使得一些模型算法无法学习到其它的特征。所以我们需要对特征进行预处理让不同特征在同一尺度下进行比较从而避免因特征值大小差异而导致的模型训练偏倚。 一、最小最大值归一化
1.1 原理公式
这种方法将特征值缩放到指定的区间内默认是0到1之间。计算公式如下 x n o r m x − m i n ( x ) m a x ( x ) − m i n ( x ) x_{norm} \frac{x-min(x)}{max(x)-min(x)} xnormmax(x)−min(x)x−min(x)如果需要缩放至其他区间[a, b]则可以使用 x n o r m a ( x − m i n ( x ) m a x ( x ) − m i n ( x ) ) ⋅ ( b − a ) x_{norm} a (\frac{x-min(x)}{max(x)-min(x)}) \cdot (b-a) xnorma(max(x)−min(x)x−min(x))⋅(b−a)
1.2 API 介绍
sklearn.preprocessing.MinMaxScaler ( )
1.2.1 参数介绍
feature_rangetuple (min, max), default(0, 1) 描述这个参数用于设定缩放的范围。默认情况下数据会被缩放到 [0, 1] 范围内。但用户可以根据需要设定其他范围例如 [-1, 1]。作用通过调整缩放范围可以对数据的分布进行更精细的控制以适应不同的机器学习算法和数据特点。 copyboolean, optional, defaultTrue 描述这个参数用于指定是否将转换后的数据覆盖原数据。如果设置为 True则不会修改原始数据而是返回一个新的缩放后的数据数组。如果设置为 False则会在原地修改原始数据。作用通过控制是否覆盖原数据可以保护原始数据的完整性避免在数据处理过程中发生数据丢失或修改。 clipboolean, optional, defaultFalse 描述clip 参数是一个布尔值用于控制是否对变换后的数据进行裁剪。作用当 clipTrue 时变换后的数据将被裁剪到指定的范围内确保数据的一致性和有效性当 clipFalse 时变换后的数据可能超出指定的范围这需要根据具体情况来决定是否启用裁剪功能。
1.2.2 属性介绍
在 MinMaxScaler 类中还有一些重要的属性用于存储缩放过程中的相关信息
min_ndarray of shape (n_features,) 描述存储每个特征调整后的最小值。 scale_ndarray of shape (n_features,) 描述存储每个特征数据缩放的比例。这个比例是通过计算特征的最大值和最小值之差然后除以指定的缩放范围feature_range来得到的。 data_min_ 和 data_max_ndarray of shape (n_features,) 描述分别存储每个特征在训练数据中的最小值和最大值。这些值是在调用 fit 或 fit_transform 方法时计算得到的。
1.2.3 注意事项
归一化受到最大值与最小值的影响这种方法容易受到异常数据的影响, 鲁棒性较差适合传统精确小数据场景
1.2.4 代码演示 代码如下示例 # 导包
from sklearn.preprocessing import MinMaxScaler # 归一化的类# 1. 准备特征数据. 每个子列表 1个样本(Sample)
data [[90, 2, 10, 40], [60, 4, 15, 45], [75, 3, 13, 46]]# 2. 创建归一化对象.
transfer MinMaxScaler()# 3. 具体的 归一化动作.
# fit_transform(): 训练 转换 适用于 训练集.
# transform(): 直接转换 适用于 测试集.
new_data transfer.fit_transform(data)# 4. 打印 归一化后的结果
print(f归一化后, 数据集为: {new_data}) # [[1. 0. 0. 0. ]# [0. 1. 1. 0.83333333]# [0.5 0.5 0.6 1. ]]1.3 举例说明
1.有以下一个数据集包含两个特征年龄Age和收入Income。我们希望这两个特征进行归一化处理。
AgeIncome20300002232000355500045750005085000 2.我们将年龄和收入都归一化到0到1的范围内。 2.1 年龄归一化 A g e n o r m A g e − m i n ( A g e ) m a x ( A g e ) − m i n ( A g e ) Age_{norm} \frac{Age-min(Age)}{max(Age)-min(Age)} Agenormmax(Age)−min(Age)Age−min(Age) A g e n o r m 20 − 20 50 − 20 0 Age_{norm} \frac{20-20}{50-20} 0 Agenorm50−2020−200 A g e n o r m 22 − 20 50 − 20 0.0667 Age_{norm} \frac{22-20}{50-20} 0.0667 Agenorm50−2022−200.0667 A g e n o r m 35 − 20 50 − 20 0.5 Age_{norm} \frac{35-20}{50-20} 0.5 Agenorm50−2035−200.5 A g e n o r m 45 − 20 50 − 20 0.8333 Age_{norm} \frac{45-20}{50-20} 0.8333 Agenorm50−2045−200.8333 A g e n o r m 50 − 20 50 − 20 1 Age_{norm} \frac{50-20}{50-20} 1 Agenorm50−2050−201 2.2 收入归一化 I n c o m e n o r m I n c o m e − m i n ( I n c o m e ) m a x ( I n c o m e ) − m i n ( I n c o m e ) Income_{norm} \frac{Income-min(Income)}{max(Income)-min(Income)} Incomenormmax(Income)−min(Income)Income−min(Income) I n c o m e n o r m 30000 − 30000 85000 − 30000 0 Income_{norm} \frac{30000-30000}{85000-30000} 0 Incomenorm85000−3000030000−300000 I n c o m e n o r m 32000 − 30000 85000 − 30000 0.0364 Income_{norm} \frac{32000-30000}{85000-30000} 0.0364 Incomenorm85000−3000032000−300000.0364 I n c o m e n o r m 55000 − 30000 85000 − 30000 0.4545 Income_{norm} \frac{55000-30000}{85000-30000} 0.4545 Incomenorm85000−3000055000−300000.4545 I n c o m e n o r m 75000 − 30000 85000 − 30000 0.8182 Income_{norm} \frac{75000-30000}{85000-30000} 0.8182 Incomenorm85000−3000075000−300000.8182 I n c o m e n o r m 85000 − 30000 85000 − 30000 1 Income_{norm} \frac{85000-30000}{85000-30000} 1 Incomenorm85000−3000085000−300001 3 原数据集就会变成下面这样
AgeIncome000.06670.03640.50.45450.83330.818211
二、标准化
2.1 原理公式
标准化是将特征值转换为具有零均值和单位方差的形式。计算公式如下 x s t d x − μ σ x_{std} \frac{x-μ}{σ} xstdσx−μ其中 μ μ μ 是特征的平均值 σ σ σ 是特征的标准差。
2.2 API 介绍
sklearn.preprocessing.StandardScaler( )
2.2.1 参数介绍
copy类型布尔值Boolean默认值True 说明如果设置为 True则会在操作后创建数据的副本不会修改原始数据。如果设置为 False则不会创建副本操作后会直接替换原始数据。 with_mean类型布尔值Boolean默认值True 说明如果设置为 True则在转换数据时会减去均值即进行中心化。如果设置为 False则不会在转换时减去均值但 fit 操作仍然会计算均值并可以通过 mean_ 属性查看。 with_std类型布尔值Boolean默认值True 说明如果设置为 True则在转换数据时会除以标准差即进行缩放。如果设置为 False则不会在转换时除以标准差但 fit 操作仍然会计算标准差并可以通过 scale_ 属性查看。
2.2.2 属性介绍
scale_ 存放每个特征的标准差是一个列表长度为特征数。 mean_ 存放每个特征的均值是一个列表长度为特征数。 var_ 存放每个特征的方差是一个列表长度为特征数。 feature_names_in_ 存放特征的名字只有导入的数据中有特征名字时才会被定义。 n_samples_seen_ 导入样本数据的个数。
2.2.3 注意事项
对于标准化来说如果出现异常点由于具有一定数据量少量的异常点对于平均值的影响并不大。
2.2.4 代码演示 代码如下示例 from sklearn.preprocessing import StandardScaler# 1. 准备特征数据. 每个子列表 1个样本(Sample)
data [[90, 2, 10, 40], [60, 4, 15, 45], [75, 3, 13, 46]]# 2. 创建 标准化 对象.
transfer StandardScaler()# 3. 具体的 标准化 动作.
# fit_transform(): 训练 转换 适用于 训练集.
# transform(): 直接转换 适用于 测试集.
new_data transfer.fit_transform(data)# 4. 打印 标准化 后的结果
print(f标准化后, 数据集为: {new_data})# 5. 打印每个特征列的 平均值 和 方差 和 标准差
print(f均值: {transfer.mean_})
print(f方差: {transfer.var_})
print(f标准差: {transfer.scale_})
print(f样本数: {transfer.n_samples_seen_})2.3 举例说明
1.有以下一个数据集包含两个特征年龄Age和收入Income。我们希望这两个特征进行归一化处理。
AgeIncome20300002232000355500045750005085000 2.我们将年龄和收入标准化到具有零均值和单位方差的形式。 2.1 年龄标准化 x s t d x − μ σ x_{std} \frac{x-μ}{σ} xstdσx−μ μ A g e 20 22 35 45 50 5 34.4 μ_{Age} \frac{2022354550}{5} 34.4 μAge5202235455034.4 σ A g e ( 20 − 34.4 ) 2 ( 22 − 34.4 ) 2 ( 35 − 34.4 ) 2 ( 45 − 34.4 ) 2 ( 50 − 34.4 ) 2 5 142.8856 ≈ 11.9536 σ_{Age} \sqrt{\frac{(20-34.4)^2(22-34.4)^2(35-34.4)^2(45-34.4)^2(50-34.4)^2}{5}} \sqrt{142.8856} ≈ 11.9536 σAge5(20−34.4)2(22−34.4)2(35−34.4)2(45−34.4)2(50−34.4)2 142.8856 ≈11.9536 A g e s t d 20 − 34.4 11.9536 ≈ − 1.2047 Age_{std} \frac{20-34.4}{11.9536} ≈ -1.2047 Agestd11.953620−34.4≈−1.2047 A g e s t d 22 − 34.4 11.9536 ≈ − 1.037 Age_{std} \frac{22-34.4}{11.9536} ≈ -1.037 Agestd11.953622−34.4≈−1.037 A g e s t d 35 − 34.4 11.9536 ≈ 0.0502 Age_{std} \frac{35-34.4}{11.9536} ≈ 0.0502 Agestd11.953635−34.4≈0.0502 A g e s t d 45 − 34.4 11.9536 ≈ 0.8868 Age_{std} \frac{45-34.4}{11.9536} ≈ 0.8868 Agestd11.953645−34.4≈0.8868 A g e s t d 50 − 34.4 11.9536 ≈ 1.3050 Age_{std} \frac{50-34.4}{11.9536} ≈ 1.3050 Agestd11.953650−34.4≈1.3050 2.2 收入标准化 μ I n c o m e 30000 32000 55000 75000 85000 5 55 , 400 μ_{Income} \frac{3000032000550007500085000}{5} 55,400 μIncome5300003200055000750008500055,400 σ I n c o m e ( 30000 − 55400 ) 2 ( 32000 − 55400 ) 2 ( 55000 − 55400 ) 2 ( 75000 − 55400 ) 2 ( 85000 − 55400 ) 2 5 486176800 ≈ 22049 σ_{Income} \sqrt{\frac{(30000-55400)^2(32000-55400)^2(55000-55400)^2(75000-55400)^2(85000-55400)^2}{5}} \sqrt{486176800} ≈ 22049 σIncome5(30000−55400)2(32000−55400)2(55000−55400)2(75000−55400)2(85000−55400)2 486176800 ≈22049 I n c o m e n o r m 30000 − 55400 22049 − 1.1520 Income_{norm} \frac{30000-55400}{22049} -1.1520 Incomenorm2204930000−55400−1.1520 I n c o m e n o r m 32000 − 55400 22049 − 1.0613 Income_{norm} \frac{32000-55400}{22049} -1.0613 Incomenorm2204932000−55400−1.0613 I n c o m e n o r m 55000 − 55400 22049 − 0.0181 Income_{norm} \frac{55000-55400}{22049} -0.0181 Incomenorm2204955000−55400−0.0181 I n c o m e n o r m 75000 − 55400 22049 0.8889 Income_{norm} \frac{75000-55400}{22049} 0.8889 Incomenorm2204975000−554000.8889 I n c o m e n o r m 85000 − 55400 22049 1.3425 Income_{norm} \frac{85000-55400}{22049} 1.3425 Incomenorm2204985000−554001.3425 3 原数据集就会变成下面这样
AgeIncome-1.2047-1.1520-1.037-1.06130.0502-0.01810.88680.88891.30501.3425
三、案例代码利用KNN算法进行鸢尾花分类 代码如下示例 # 0.导入工具包
from sklearn.datasets import load_iris
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score# 1.加载数据集
iris_data load_iris()
# print(iris_data)
# print(iris_data.target)# 2.数据展示
iris_df pd.DataFrame(iris_data[data], columnsiris_data.feature_names)
iris_df[label] iris_data.target
# print(iris_data.feature_names)
# sns.lmplot(xsepal length (cm),ysepal width (cm),data iris_df,huelabel)
# plt.show()# 3.特征工程(预处理-标准化)
# 3.1 数据集划分
x_train, x_test, y_train, y_test train_test_split(iris_data.data, iris_data.target, test_size0.3, random_state22)
print(len(iris_data.data))
print(len(x_train))
# 3.2 标准化
process StandardScaler()
x_train process.fit_transform(x_train)
x_test process.transform(x_test)
# 4.模型训练
# 4.1 实例化
model KNeighborsClassifier(n_neighbors3)
# 4.2 调用fit法
model.fit(x_train,y_train)
# 5.模型预测
x [[5.1, 3.5, 1.4, 0.2]]
xprocess.transform(x)
y_predict model.predict(x_test)
print(model.predict_proba(x))# 6.模型评估(准确率)
# 6.1 使用预测结果
acc accuracy_score(y_test,y_predict)
print(acc)# 6.2 直接计算
acc model.score(x_test,y_test)
print(acc)总结
文章总结了特征预处理中的归一化和标准化并对每一种方法做了详细讲解最后用一个综合案例使用前面学过的的KNN算法来验证预处理的必要性。