sklearn中的数据预处理和特征工程----【1】代码及参数解释【学习笔记】

如果数据不给力,在高级的算法都没有用

五大步骤

  • 获取数据
  • 数据预处理
    • 检测、纠正或删除损坏、不准确、不适用的数据过程
    • 例如:数据类型(文字、数字、时间序列、连续、离散、噪声、异常、缺失值、出错、量纲不一、重复偏态)
    • 目的:让数据适应模型,匹配需求。
  • 特征工程
    • 将特征转换成更能代表预测模型潜在问题的过程
    • 方法:挑选最相关的、提取特征、创造特征:降维或者计算
    • 问题:特征间有相关性、特征和标签无关、 太多或者太小、干脆无法表达或展示数据的真实面貌
    • 目的:降低计算成本、提升模型上限
  • 建模并且测试模型、预测结果
  • 上线,验证模型效果

sklearn 中的模块

  • Dimensionality reduction

在这里插入图片描述

  • Preprocessing

  • 模块:preprocessing 几乎包含所有数据预处理的内容

  • 模块:Impute 填补缺失值专用

  • 模块:feature_selection 包含特征选择的各种方法的实践

  • 模块:decomposition 在这里插入图片描述
    包含降维算法


数据预处理 (模块Preprocession & Impute)

数据无量纲化

在实践中,希望数据换到同一规格(比如 0 ~ 10 之间,或者满足标准正态分布)----这就是无量纲化。

以梯度或者矩阵核心的算法中(逻辑回归、支持向量机、神经网络)可以加快求解速度
而在距离类模型(KNN、K-means聚类)中可以提高模型的精度,避免某一个取值范围特别大的特征对距离计算造成影响

特例:决策树和树的集成算法不需要无量纲化,它对任意数据都能处理得很好

线性无量纲化
  • 包括 Zero-centered ( Mean-subtraction )(中心化)处理
    • 中心化的本质是让所有记录减去一个固定值,即让数据样本数据平移到某个位置
  • Scale(缩放)处理
    • 通过除以一个固定值,将数据固定在某个范围之中,取对数也算是一种缩放处理。(例如正态分布的图的高度,可以压缩变扁)
  1. from sklearn.preprocessing import MinMaxScaler

当数据(x)按照最小值中心化后,再按极差(最大值 - 最小值)缩放,数据移动了最小值个单位,并且会被收敛到[0,1]之间,而这个过程,就叫做数据归一化(Normalization,又称Min-Max Scaling),服从正态分布。

正则化是regularization,不是预处理手段
x ∗ = x − m i n ( X ) m a x ( X ) − m i n ( x ) x^* = \frac{x-min(X)}{max(X)-min(x)} x=max(X)min(x)xmin(X)

sklearn中代码的使用 归一化
# 调库
from sklearn.preprocessing import MinMaxScaler
# 实例化
scaler = MinMaxScaler(feature_range=[0,1])  # 这里的参数能够调整使得范围达到想要结果内  
scaler = scaler.fit(data)  # 会生成min(x) 和 max(x)
# 如果数据量太大 建议使用 scaler.partial_fit(data) 避免报错
result = scaler.transform(data)
###############################
result = scaler.fit_transform(data)  # 一步达成
###############################
# 逆转结果
scaler.inverse_transform(result)
# 复习numpy必要的语法
X.min(axis=0)  # 每一列的最小值
X.max(axis=1)  # 每一行的最大值
  1. from sklearn.preprocessing import StandardScaler

    当数据(x)按均值(μ)中心化后,再按标准差(σ)缩放

    得到均值为 0 ,方差为 1 的正态分布

    数据标准化(Standardization or Z-score nomalization)
    x ∗ = x − μ σ x^*=\frac{x-μ}{\sigma} x=σxμ

sklearn中代码的使用 标准化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(data)  # 生成均值和方差

scaler.mean_  # 均值
scaler.var_  # 方差

new_data_fted = scaler.fit_transform(data)  # 也可以分两步
scaler.inverse_transform(new_data_tfed)

new_data_fted.mean() #导出的结果是一个数组,用mean()查看均值
new_data_fted.std() #用std()查看方差

注:一维的报错

两个选哪个好?
  • 大多数标准化,因为归一化比较敏感
    • 在PCA,聚类,逻辑回归,支持向量机,神经网络这些算法中,StandardScaler往往是最好的选择
  • 不涉及距离度量、梯度、协方差计算以及数据需要被压缩到特定区间时使用
    • 比如数字图像处理中量化像素强度时,都会使用MinMaxScaler将数据压缩于[0,1]区间之中。
其他方法
  • MaxAbsScaler 只压缩数据,不影响稀疏性
  • RobustScaler 异常值多,噪声非常大 (选用分位数来无量纲化)
  • …(下方图)

在这里插入图片描述


缺失值
# 复习pandas
import pandas as pd
data = pd.read_csv("path", index_col=0)  # 以第零列当作索引	
data.info()  # 看数据整体信息
data.loc[:, "name"]  #loc表示使用索引的名字 来进行获取
data.loc[:, "name"].values.reshape(-1, 1)  # 获取值并且升维
class sklearn.impute.SimpleImputer (missing_values=nan, strategy=’mean’, fill_value=None, verbose=0,copy=True)

参数 以及 含义&输入

  • missing_values

    • 告诉SimpleImputer,数据中的缺失值长什么样,默认空值np.nan
  • strategy

    • 填补缺失值的策略,默认均值

      输入“mean”使用均值填补(仅对数值型特征可用

      输入“median"用中值填补(仅对数值型特征可用

      输入"most_frequent”用众数填补(对数值型和字符型特征都可用

      输入“constant"表示请参考参数“fifill_value"中的值对数值型和字符型特征都可用

  • fifill_value

    • 当参数startegy为”constant"的时候可用,可输入字符串或数字表示要填充的值,常用0
  • copy

    • 默认为True,将创建特征矩阵的副本,反之则会将缺失值填补到原本的特征矩阵中去。
sklearn中代码的使用
from sklearn.impute import SimpleImputer
# 实例化,具体要怎么填补
imp = SimpelImputer(strategy="median")  # 中位数填补
imp = SimpelImputer(strategy="constant", fill_value=value?, copy=True)  # 自定义填补

# 进行填补
imp_value = imp.fit_transform(data.loc[:, "name"])  # 填补并且返回一个copy副本
# 如果要覆盖
data.loc[:, "name"] = imp_value
pandas and numpy的使用进行填补
# 在DataFrame中
data.loc[:, "name"] = data.loc[:, "name"].fillna(data.loc[:, "name"].median())

# 可以删除缺失值
data.dropna(axis=0, inplace=True)  # 按行删除,axis=1时为列。
new_data = data.dropna(axis=1, inplace=False)  # 按列进行删除,生成复制对象,不进行原数据集上修改
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JamePrin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值