栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

sklearn数据标准化的4个问题

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

sklearn数据标准化的4个问题

sklearn数据标准化的4个问题

    数据标准化是机器学习建模之前的常见操作,可以减小不同特征的数据量纲的影响。在机器学习数据处理过程中,笔者整理了4个常见的问题:

  • 问题1:fit和transform的流程
  • 问题2:标准化,归一化和鲁棒化的三种处理方式的运算方式和手动代码编写。
  • 问题3:面对K折交叉验证时,先对所有数据集统一标准化,还是在每一折内,分别对训练集标准化作用到各自测试集。
  • 问题4:数据标准化场景。
1.标准化流程

在sklearn中,数据标准化与模型类似。
可以通过fit再transform的方法对数据进行处理,例如,对训练集进行fit(X_train),使得标准化模型可以在训练中学习到相应的参数,之后将参数运用到测试集中进行transform(X_test)。此时,训练集的数据是不会变化的(还是标准化之前的数据)。
而fit_transform(X),同样是进行模型的训练,但会把训练集数据同时进行标准化处理,即改变初始的X。

2.三种标准化比较
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import RobustScaler

X是df.values,即建模之前不含标签的数据。
下面以X的第一个特征(第一列数据)为例,手动编写代码,实现与sklearn中的三种标准化相同的结果。

2.1 Z-Score标准化

即将某一列数据处理成均值为0,方差为1的数据。优点是受异常值影响较小。公式为:(X-μ)/σ

# Z-score标准化
l0 = [i[0] for i in X]
print('均值:',np.mean(l0),'标准差:',np.std(l0))
l0_ss = [(i-np.mean(l0))/np.std(l0) for i in l0]
l0_ss
# 同:
ss = StandardScaler()
X_ss = ss.fit_transform(X)
[i[0] for i in X_ss]
2.2 0-1归一化

即将某一列数据缩放到[0,1]范围内,缺点是受极值影响。公式为(X-min)/(max-min)。

# 0-1归一化
l1 = [i[0] for i in X]
print('最大值:',np.max(l1),'最小值:',np.min(l1))
l1_ss = [(i-np.min(l1))/(np.max(l1)-np.min(l1)) for i in l1]
l1_ss
# 同:
ss = MinMaxScaler()
X_ss = ss.fit_transform(X)
[i[0] for i in X_ss]
2.3 RobustScaler鲁棒化

通过中位数和四分位距来缩放,使用于对异常值较多的情况。公式为(X-中位数)/四分位距。

# 鲁棒归一化
l1 = [i[0] for i in X]
med = np.percentile(l1,50)
iqr = np.percentile(l1,75)-np.percentile(l1,25)
l1_ss = [(i-med)/iqr for i in l1]
l1_ss
# # 同:
ss = RobustScaler()
X_ss = ss.fit_transform(X)
[i[0] for i in X_ss]

以上三种标准化方法的优劣,最好也要根据实际的数据情况和模型的效果来确定,但总体来说,第一种最常见。

3 数据标准化和交叉验证的顺序

笔者目前对于该问题没有好的解决方案,可能需要根据最后的模型效果视情况而定。

4 数据标准化场景

网传XGB在所有特征数据都是连续值的情况下不需要进行标准化,目前有待进一步学习。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/316145.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号