您的位置:首页 > 其它

sklearn中的数据预处理和特征工程

2020-01-13 04:01 190 查看

 

背景:由于特征之间的量纲不同,使得不同的指标之间没有可比性,不处于同一数量级的指标,无法进行分析。

解决方案:将所有的数据映射到同一个尺度中。

重要性:处于区间范围差异较大的特征,当采用随即梯度下降法学习时,学习速率相比同一区间更低。

适用于:通过梯度下降法求解的模型,如:线性回归,逻辑回归,SVM,神经网络等。

不适用于:树形结构

一、最值归一化 normalization

即:把所有数据映射到0-1之间

适用于:分布有明显边界的情况,如:学生分数/图像像素

缺点:受outlier影响较大,如:收入

python实现:

[code]import numpy as np
x = np.random.randint(0,100,size=100)

(x - np.min(x)) / (np.max(x) -  np.min(x))

X = np.random.randint(0,100,(50,2))

X = np.array(X, dtype=float)

# X[:,0]第一列,第一个特征
X[:,0] = (X[:,0] - np.min(X[:,0])) / (np.max(X[:,0]) - np.min(X[:,0]))

X[:,1] = (X[:,1] - np.min(X[:,1])) / (np.max(X[:,1]) - np.min(X[:,1]))

# n个特征时
for i in range(0,n):
X[:,i] = (X[:,i]-np.min(X[:,i])) / (np.max(X[:,i] - np.min(X[:,i])))

二、均值方差归一化 standardization

即:把所有数据归一到均值为0方差为1的分布中

适用于:分布无明显边界,有可能存在极端数据值 (除分数/像素等之外,基本都考虑有均值方差归一化)

python实现:

[code]X2 = np.array(np.random.randint(0,100,(50,2)),dtype=float)

for i in range(0,2):
X2[:,i]=(X2[:,i]-np.mean(X2[:,i])) / np.std(X2[:,i])

三、在sklearn中专门的用来数据归一化的方法:StandardScaler

[code]from sklearn.preprocessing import StandardScaler
standardScaler = StandardScaler()

standardScaler.fit(X_train)
standardScaler.mean_
standardScaler.scale_

X_train_standard = standardScaler.transform(X_train)
X_test_standard = standardScaler.transform(X_test)

注:测试数据集的均值和方差,依然使用训练集的

 

参考:https://www.cnblogs.com/juanjiang/p/10948849.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
Aries_楊小欣� 发布了17 篇原创文章 · 获赞 0 · 访问量 249 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: