- 所谓数据特征预处理即是在将文本数据转换为数值数据之后的进一步操作,归一化/标准化以及缺失值处理、特征选择。
- sklearn. preprocessing
- 归一化步骤:
- 1、实例化MinMaxScalar
- 2、通过fit_transform转换
sklearn.preprocessing.MinMaxScaler
MinMaxScalar(feature_range=(0,1)…)
#每个特征缩放到给定范围(默认[0,1])
MinMaxScalar.fit_transform(X)
#X:numpy array格式的数据[n_samples,n_features]
#返回值:转换后的形状相同的array
#demo:
data = [[90,2,10,40],[60,4,15,45],[75,3,13,46]]
from sklearn.preprocessing import MinMaxScaler
min = MinMaxScaler()
min.fit_transform(data)
array([[1. , 0. , 0. , 0. ],
[0. , 1. , 1. , 0.83333333],
[0.5 , 0.5 , 0.6 , 1. ]])
注意在特定场景下最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。
标准化通过对原始数据进行变换把数据变换到均值为0,方差为1范围内
对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然
会发生改变
对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对
于平均值的影响并不大,从而方差改变较小。
scikit-learn.preprocessing.StandardScaler
StandardScaler(…)
#处理之后每列来说所有数据都聚集在均值0附近方差为1
StandardScaler.fit_transform(X,y)
#X:numpy array格式的数据[n_samples,n_features]
#返回值:转换后的形状相同的array
StandardScaler.mean_
#原始数据中每列特征的平均值
StandardScaler.std_
#原始数据每列特征的方差
#demo
data = [[90,2,10,40],[60,4,15,45],[75,3,13,46]]
from sklearn.preprocessing import StandardScaler
std = StandardScaler()
std.fit_transform(data)
array([[ 1.22474487, -1.22474487, -1.29777137, -1.3970014 ],
[-1.22474487, 1.22474487, 1.13554995, 0.50800051],
[ 0. , 0. , 0.16222142, 0.88900089]])
在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。
缺失值处理 sklearn.preprocessing.Imputer
Imputer(missing_values='NaN', strategy='mean', axis=0)
#完成缺失值插补
Imputer.fit_transform(X,y)
#X:numpy array格式的数据[n_samples,n_features]
#返回值:转换后的形状相同的array
#demo
import numpy as np
from sklearn.preprocessing import Imputer
data = [[1, 2], [np.nan, 3], [7, 6]]
ip = Imputer()
ip.fit_transform(data)
array([[1., 2.],
[4., 3.],
[7., 6.]])
特征选择
特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征,
特征在选择前和选择后可以改变值、也不改变值,但是选择后的特征维数肯
定比选择前小,毕竟我们只选择了其中的一部分特征。
- 主要方法(三大武器):
- Filter(过滤式):VarianceThreshol
- Embedded(嵌入式):正则化、决策树
- Wrapper(包裹式)
sklearn.feature_selection.VarianceThreshold
- 1、初始化VarianceThreshold,指定阀值方差
- 2、调用fit_transform
VarianceThreshold(threshold = 0.0)
# 删除所有低方差特征
Variance.fit_transform(X,y)
#X:numpy array格式的数据[n_samples,n_features]
#返回值:训练集差异低于threshold的特征将被删除。
#默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征。
#demo
from sklearn.feature_selection import VarianceThreshold
data = [[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]]
vt = VarianceThreshold()
vt.fit_transform(data)
array([[2, 0],
[1, 4],
[1, 1]])
#注:3、3、3以及0、0、0被删除,感觉其实就是无分辨能力的特征被删除了
特征选择之降维(PCA主成分分析)
sklearn. decomposition
本质:PCA是一种分析、简化数据集的技术
目的:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
作用:可以削减回归分析或者聚类分析中特征的数量
- 流程:
- 1、初始化PCA,指定减少后的维度
- 2、调用fit_transform
PCA(n_components=None)
#将数据分解为较低维数空间
PCA.fit_transform(X)
#X:numpy array格式的数据[n_samples,n_features]
#返回值:转换后指定维度的array
#demo
from sklearn.decomposition import PCA
data = [[2,8,4,5],[6,3,0,8],[5,4,9,1]]
pca = PCA()
pca.fit_transform(data)
array([[ 1.22879107e-15, 3.82970843e+00, 2.65047672e-17],
[ 5.74456265e+00, -1.91485422e+00, 2.65047672e-17],
[-5.74456265e+00, -1.91485422e+00, 2.65047672e-17]])



