机器学习--标准化和缺失值处理、数据降维

swazerz 2019-12-01

标准化和缺失值的处理

标准化 : 

特点 : 通过对原始数据进行变换把数据变换到均值为0, 标准差为1的范围内.

机器学习--标准化和缺失值处理、数据降维

 ## 对于归一化来说:如果出现异常点,影响了大值和小值,那么结果显然会发生改变 对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从 而方差改变较小。在已有样本足够多的情况下比较稳定,适合现代嘈杂的大数据场景。 ##

标准化API :

API : sklearn.preprocessing.StandarScaler
StandardScaler() 
    处理之后每列所有数据都聚集在均值为0标准差为1附近
    StandarScaler.fit_transform(x) 
        x:numpy array格式的数据(n_samples,n_features) 
        返回值:转换后的形状相同的array 
    StandarScaler.mean_ 
        原始数据中每列的平均值中位数 
    StandarScaler.std_ 
        原始主句每列特征的方差 
步骤 
    实例化 StandarScaler 
    通过 fit_transform 转换

案例 :案例 :案例 :案例 :

import numpy as np
from sklearn.preprocessing import StandardScaler
ss = StandardScaler()  # 实例化
data = np.array([[5000,2,10,40],[6000,3,15,45],[50000,5,15,40]])  # 数据
res = ss.fit_transform(data)
print(res)

机器学习--标准化和缺失值处理、数据降维


 缺失值的处理方法 : 

删除 : 如果每列或者行数据达到一定比例, 建议放弃整行或整列 .

  插补 : 可以通过缺失值每行或每列的平均值/中位数来填充.

缺失值处理API :

sklearn缺失值接口 : sklearn.impute.SimpleImputer
   SimpleImputer(missing_values=‘NaN‘,strategy=‘mean‘,axis=0) 
       完成缺失值插补
   SimpleImputer.fit_transform(x) 
        x:numpy array格式的数据 
        返回值:转换后形状相同也即是的array 
步骤
    初始化SimpleImputer,指定缺失值,指定填补策略,指定行或列。 注:缺失值也可以是别的指定要替换的值 
    调用 ?t_transform

案例:案例:案例:案例:

import numpy as np
from sklearn.impute import SimpleImputer
data = np.array([[1,2],[np.NaN,3],[7,6]])
si = SimpleImputer()
# si = SimpleImputer(missing_values=6,strategy=‘most_frequent‘)  
# missing_values : 指定值填充,默认为NaN. 
# strategy : 填充数值计算方法  [‘mean‘, ‘median‘, ‘most_frequent‘, ‘constant‘]
res = si.fit_transform(data)
print(res)

机器学习--标准化和缺失值处理、数据降维  ## ??  列avg,不包含NaN,不计算NaN行 ## 



数据降维

数据降维 :这里的维度指定是特征数量,这里的降维是指减少特征的数量。

数据降维有2种,分别是特征选择 和 主成分分析.


特征选择

  特征选择的原因 :

    冗余 : 部分特征的相关度搞,容易消化计算性能.

    噪声 : 部分特征对预测结果有影响.

  概念 :

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

  主要方法:

    Filter(过滤式): VarianceThreshold

    Embedded(嵌入式): 正则化 , 决策树

特征选择API (降维):

类:sklearn.feature_selection.VarianceThreshold 
VarianceThreshold(threshold=0.0) 
    删除所有低方差特征 
Variance.?t_transform(x) 
    x:numpy array格式的数据 
    返回值:删除方差低于threshold的特征之后的数据集 
    默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征 
流程 
    初始化VarianceThreshold,指定阈值方差
    调用 ?t_transform

案例:案例:案例:案例:

# 案例演示
import numpy as np
from sklearn.feature_selection import VarianceThreshold
data = np.array([[0,2,0,3],[0,1,4,3],[0,1,2,3]])
print(‘降维前:‘,data)
vt = VarianceThreshold(threshold=0.0)  #过滤方差为0 , 数据不变
res = vt.fit_transform(data)   # 少部分数据
print(‘降维后:‘,res)

机器学习--标准化和缺失值处理、数据降维


主成分分析 :

本质 : PCA是一种分析,简化数据集的技术.

目的 : 是数据维度压缩,尽可能降低原数据的维数(复杂度),尽可能的减少损失信息

作用 : 可以消减回归分析或者聚类分析中特征的数量

使用场景 : 特征数量达到上百的时候,考虑数据的简化.

主成分分析API(降维) :

类 sklearn.decompositon.PCAPCA(n_componets=None) 
    将数据分解为较低维数据 
    PCA.?t_transform(x) 
        x:numpy array格式 
        返回值:转换后降低维度的array 
    n_componets参数: 
        小数:表示将信息保存到原信息的百分比,例如0.95表示降维后信息量是原来的95%。一般制定到0.9-0.95 
        整数:较少到的特征数量,一般不使用 
    流程
        实例化 PCA 
        调用 ?t_transform

案例:案例:案例:案例: 

from sklearn.decomposition import PCA
pca = PCA(n_components=0.95)
data = np.array([[2,8,4,5],[6,3,0,8],[5,4,9,1]])
print(‘主成分分析降维前:\n‘,data)
res = pca.fit_transform(data)
print(‘主成分分析降维后:\n‘,res)
# 维度下降,不损失信息

机器学习--标准化和缺失值处理、数据降维


真实案例演示 :

机器学习--标准化和缺失值处理、数据降维

 案例代码 :

# 代码
import pandas as pd from sklearn.decomposition import PCA 
# 读取四张表的数据 
prior = pd.read_csv(r‘D:\dataanalysis\Felix\week7\instacart\order_products__prior.csv‘)   # 没有数据,只有代码.....
product = pd.read_csv(r‘D:\dataanalysis\Felix\week7\instacart\products.csv‘) 
orders = pd.read_csv(r‘D:\dataanalysis\Felix\week7\instacart\orders.csv‘) 
aisles = pd.read_csv(r‘D:\dataanalysis\Felix\week7\instacart\aisles.csv‘)
# 合并四张表到一张表,(用户-物品类别) 
data = pd.merge(prior, product, on=‘product_id‘) 
data = pd.merge(data, orders, on=‘order_id‘ ) 
data = pd.merge(data, aisles, on=‘aisle_id‘)
# 建立一个以用户为行,产品为列的表 # 即用户和产品进行交叉
table = pd.crosstab(data[‘user_id‘], data[‘aisle‘])
# 数据结构为(206209, 134),需要做主成分分析,进行降维 
pca = PCA(n_components=0.9)

res = pca.fit_transform(table)  # 最后降维成: (206209, 27)

API总结 :

1. fit_transform() : 输入数据直接转换

2. fit() : 输入数据,计算一些中间值,但是不能转换

  3. transform() : 进行数据转换

  4. fit_transform() = fit() + transform()

相关推荐