ML算法基础——特征工程(特征处理、降维)

1. 数据的特征处理

1.1 概述

特征处理
通过特定的统计方法(数学方法)将数据转换成算法要求的数据

数值型数据
标准缩放:
1、归一化
2、标准化
3、缺失值
类别型数据:one-hot编码
时间类型:时间的切分
sklearn特征处理API
sklearn.preprocessing

1.2 归一化(MinMaxScaler语法)

1.2.1 概述

特点:通过对原始数据进行变换把数据映射到(默认为[0,1])之间,使得某⼀个特征对最终结果不会造成更⼤影响
缺点:异常点对最⼤值最⼩值影响太⼤

公式
image
注:作用于每一列,max为一列的最大值,min为一列的最小值,那么X’’
为最终结果,mx,mi分别为指定区间值默认mx为1,mi为0

1.2.2 sklearn归一化API(MinMaxScaler)

sklearn归一化API: sklearn.preprocessing.MinMaxScaler
MinMaxScaler语法

  • MinMaxScalar(feature_range=(0,1)…)
    • 每个特征缩放到给定范围(默认[0,1])
  • MinMaxScalar.fit_transform(X)
    • X:numpy array格式的数据[n_samples,n_features]
    • 返回值:转换后的形状相同的array

归一化步骤

  1. 实例化MinMaxScalar
  2. 通过fit_transform转换
    实例
from sklearn.preprocessing import MinMaxScaler
def mm():#归一化处理
    mm=MinMaxScaler()
    data=mm.fit_transform([[90,2,10,40],
[60,4,15,45],
[75,3,13,46]]
)
    print(data)
    return None
mm()
>>>
[[1.         0.         0.         0.        ]
 [0.         1.         1.         0.83333333]
 [0.5        0.5        0.6        1.        ]]

归一化总结
注意在特定场景下最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景

1.3 标准化(StandardScaler语法)

1.3.1 概述

特点:通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内
image
结合归一化来谈标准化
对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变

对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。

1.3.2 sklearn特征化API(StandardScaler)

sklearn特征化API: ``scikit-learn.preprocessing.StandardScaler`
StandardScaler语法

  • StandardScaler(…)
    • 处理之后每列来说所有数据都聚集在均值0附近方差为1
  • StandardScaler.fit_transform(X,y)
    • X:numpy array格式的数据[n_samples,n_features]
    • 返回值:转换后的形状相同的array
  • StandardScaler.mean_
    • 原始数据中每列特征的平均值
  • StandardScaler.std_
    • 原始数据每列特征的方差

标准化步骤

  1. 实例化StandardScaler
  2. 通过fit_transform转换
from sklearn.preprocessing import StandardScaler
def stand():
    std=StandardScaler()
    data=std.fit_transform([[ 1., -1., 3.],
[ 2., 4., 2.],
[ 4., 6., -1.]]
)
    print(data)

if __name__ == "__main__":
   stand()
 
>>>
[[-1.06904497 -1.35873244  0.98058068]
 [-0.26726124  0.33968311  0.39223227]
 [ 1.33630621  1.01904933 -1.37281295]]

1.4 缺失值处理

1.4.1缺失值处理方法

删除 如果每列或者行数据缺失值达到一定的比例,建议放弃整行或者整列
插补 可以通过缺失值每行或者每列的平均值、中位数来填充

1.4.2 sklearn缺失值API(Imputer)

sklearn.preprocessing.Imputer
Imputer语法

  • Imputer(missing_values='NaN',strategy='mean',axis=0)
    • 完成缺失值插补
  • Imputer.fit_transform(X,y)
    • X:numpy array格式的数据[n_samples,n_features]
    • 返回值:转换后的形状相同的array

Imputer流程
1、初始化Imputer,指定”缺失值”,指定填补策略,指定行或列
注:缺失值也可以是别的指定要替换的值
2、调用fit_transform

from sklearn.preprocessing import Imputer
def im():
    im=Imputer(missing_values="NaN",strategy='mean',axis=0)
    data=im.fit_transform([[1, 2],
[np.nan, 3],
[7, 6]])
    print(data)
    return None
>>>
[[1. 2.]
 [4. 3.]
 [7. 6.]]

1.4.3 关于np.nan(np.NaN)

1、 numpy的数组中可以使用np.nan/np.NaN来代替缺失值,属于float类型
2、如果是文件中的一些缺失值,可以替换成nan,通过np.array转化成float型的数组即可
缺失值不是nan的时候,需要先转化成nan
replace(“?”,np.nan)
删除缺失值所在的行或列:dropna
填充缺失值:fillna

2.数据降维

sklearn降维API
sklearn. decomposition

2.1 数据的特征选择

2.1.1 概述

特征选择原因

  • 冗余:部分特征的相关度高,容易消耗计算性能
  • 噪声:部分特征对预测结果有负影响

特征选择是什么
特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征,
特征在选择前和选择后可以改变值、也不改变值,但是选择后的特征维数肯
定比选择前小,毕竟我们只选择了其中的一部分特征。

2.1.2 sklearn特征选择API(VarianceThreshold)

sklearn.feature_selection.VarianceThreshold

VarianceThreshold语法
-VarianceThreshold(threshold = 0.0)
- 删除所有低方差特征

  • Variance.fit_transform(X,y)
    • X:numpy array格式的数据[n_samples,n_features]
    • 返回值:训练集差异低于threshold的特征将被删除。
    • 默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征。

** VarianceThreshold流程(代码演示)**
1、初始化VarianceThreshold,指定阀值方差
2、调用fit_transform

from sklearn.feature_selection import VarianceThreshold
def var():
    var=VarianceThreshold(threshold=1.0)#默认0.0,删除相同数据
    data=var.fit_transform([[0, 2, 0, 3],
[0, 1, 4, 3],
[0, 1, 1, 3]]
)
    print(data)
    return None
if __name__ == "__main__":
   var()

>>>
[[0]
 [4]
 [1]]

2.2 PCA(主成分分析)

2.2.1 概述

  • 本质:PCA是一种分析、简化数据集的技术
  • 目的:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
  • 作用:可以削减回归分析或者聚类分析中特征的数量

PCA : 特征数量达到上百的时候考虑数据的简化数据也会改变特征数量也会减少

2.2.2 PCA语法

  • PCA(n_components=None)
    • 将数据分解为较低维数空间
  • PCA.fit_transform(X)
    • X:numpy array格式的数据[n_samples,n_features]
    • 返回值:转换后指定维度的array

PCA流程(代码演示)

1、初始化PCA,指定减少后的维度
2、调用fit_transform

from sklearn.decomposition import PCA
def pca():
    pca=PCA(n_components=0.9)
    data=pca.fit_transform([[2,8,4,5],
[6,3,0,8],
[5,4,9,1]]
)
    print(data)
    return  None
if __name__ == "__main__":
   pca()
>>>
[[ 1.22879107e-15  3.82970843e+00]
 [ 5.74456265e+00 -1.91485422e+00]
 [-5.74456265e+00 -1.91485422e+00]]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章