码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-12-01 00:18:36      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:span   int   from   products   接口   missing   目的   分数   回归分析   

标准化和缺失值的处理

标准化 : 

  特点 : 通过对原始数据进行变换把数据变换到均值为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.PCA
PCA(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(rD:\dataanalysis\Felix\week7\instacart\order_products__prior.csv)   # 没有数据,只有代码.....
product = pd.read_csv(rD:\dataanalysis\Felix\week7\instacart\products.csv) 
orders = pd.read_csv(rD:\dataanalysis\Felix\week7\instacart\orders.csv) 
aisles = pd.read_csv(rD:\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()

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

标签:span   int   from   products   接口   missing   目的   分数   回归分析   

原文地址:https://www.cnblogs.com/luowei93/p/11946640.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!