美文网首页数据分析那点事儿🙈
数据处理和特征工程(一)

数据处理和特征工程(一)

作者: 于饼喵 | 来源:发表于2020-07-26 23:48 被阅读0次

1. 数据挖掘五大流程

数据挖掘有4大步骤,分别为

  • 获取数据
  • 数据预处理
  • 特征工程
  • 建模
    其中特征工程是指将原始数据转换为更能代表预测模型的潜在问题的特征的过程,通过挑选特征提取特征以及创造特征来实现。其中创造特征又经常以降维算法的方式实现。

下面总结下特征工程的知识点以及相关代码


2. sklearn的数据预处理和特征工程

2.1 数据无量纲化

将不同规格的数据转换到同一量纲范围
数据的无量纲化可以是线性的,也可以是非线性的,线性的无量纲化包括中心化处理和缩放处理。中心化的本质是让所有记录减去一个固定值,让数据样本数据平移到某个位置。缩放的本质是除以一个固定值,将数据固定在某个范围之中,取对数也算是一种缩放处理

2.1.1 sklearn中的归一化

processing.MinMaxScaler的使用

  • 当数据按照最小值中心化后,再按极差(最大值 - 最小值)缩放,数据移动了最小值个单位,并且会被收敛到[0,1]之间,而这个过程,就叫做数据归一化Normalization。
    x_ = (x - min(x)) / (max(x) - min(x))

  • 在sklearn中,我们使用preprocessing.MinMaxScaler实现这个功能,MinMaxScaler有一个重要参数feature_range,控制我们需要把数据压缩到的范围,默认是[0,1]

2.1.2 代码示例

from sklearn.preprocessing import MinMaxScaler  # 导入MinMaxScaler
import pandas as pd

data = [[5,6],[-4,6],[10,1],[-1,1.8]]
pd.DataFrame(data)

# 实现归一化
scaler = MinMaxScaler()                   # 实例化
result_ = scaler.fit_transform(data)      # fit 本质是生成min(x)和max(x) 通过trensform接口导出结果

# 数据归一化到[5,10]
scaler = MinMaxScaler(feature_range=[5,10])  
result = scaler.fit_transform(data)  # 训练和导出结果一步达成

#当x中的特征数量非常多的时候,fit会报错并表示,此时使用partial_fit作为训练接口
#scaler =  scaler.partial_fit(data)

2.2 数据标准化

当数据x按均值μ中心化后,再按标准差σ缩放,数据就会服从均值为0,方差为1的分布【注意,不会改变原数据分布】,而这个过程就叫做数据标准化,又称Z-score-normalization
标准化公式:x_ = (x - μ) / σ

2.2.1 sklearn中的数据标准化

使用StandardScaler来完成数据的标准化
StandardScaler(copy=True, with_mean=True, with_std=True),默认情况下参数都为True,因此不需要输入参数进调整

2.2.2 代码示例

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()   # 实例化
x = scaler.fit_transform(data)  # 导出标准化结果

# 重要接口
scaler.mean_  # 查看标准化所使用的均值
scaler.var_   # 查看标准化所使用的标准差

scaler.inverse_transform(x_std)  # 逆标准化

2.3 缺失值

一般来说,pandas和numpy都可以处理缺失值(dropna 和 fillna ) ,sklearn中也有填充缺失值的功能
在sklearn中使用impute.SimpleImputer来填充缺失值

2.3.1 sklearn中的缺失值处理

impute.SimpleImputer,有missing_values、strategy、fill_value、copy四个参数

  • missing_values:缺失值,默认是np.nan
  • strategy:填充缺失值的方法
    • mean:均值填充
    • median:中值填充
    • most_frequent:众数填充
    • constant:参考参数fill_value中的值
  • fill_value: 当strategy为constant时可用,输入要填充的值,常用0
  • copy: 默认为True,创建特征矩阵的副本

2.3.2 代码示例

from sklearn.impute import SimpleImputer
imp_mean = SimpleImputer()

"""
imp_median = SimpleImputer(strategy="median")
imp_median = SimpleImputer(strategy="constant",fill_value=0)
imp_mean = imp_mean.fit_transform(data)  # 完成调取结果
"""

3. 处理分类特征

3.1 处理文字型特征

特征很多时候包含文字,比如性别:男女 ,我们在建模前需要将这些带文字的特征量化,转化为数值型

3.1.1 标签专用 LabelEncoder

在sklearn中,使用preprocessing.LabelEncoder来将分类标签转换为分类数值

from sklearn.preprocessing import LabelEncoder

 # data.iloc[:,-1]为标签
data.iloc[:,-1] =  LabelEncoder().fit_transform(data.iloc[:,-1])

3.1.2 特征专用 OrdinalEncoder

在sklearn中,使用OrdinalEncoder将分类特征转换为分类数值

from sklearn.preprocessing import OrdinalEncoder

# data_.iloc[:,1:-1]表示特征
OrdinalEncoder().fit(data_.iloc[:,1:-1]).categories_   # 用于查看特征中都有哪些类
data_.iloc[:,1:-1] = OrdinalEncoder().fit_transform(data_.iloc[:,1:-1])

3.2 创建哑变量

  • 名义变量:取值之间完全没有联系,比如A门、B门、C门
  • 有序变量:取值之间完全独立,有顺序关系,但是不可以计算 高中>初中>小学
  • 有距变量:各取值之间有联系,而且可以相互计算 120kg - 45kg = 75kg
    我们把分类转换成数字的时候,忽略了数字中自带的数学性质,会给算法传达了一些不准确的信息,这会影响我们的建模。对于名义变量,我们需要使用哑变量进行处理
    在sklearn库中,使用OneHotEncoder来创建哑变量
from sklearn.processing import OneHotEncoder

# 选取特征
x = data.iloc[:,1:-1]
result = OneHotEncoder(categories="auto").fit_transform(x).toarry()

# 还原
pd.DataFrame(enc.inverse_transform(result))
enc.get_feature_names()    # 返回哑变量特征矩阵对于的列标题

3.3 连续型变量划分为分类变量

比如,有时候我们需要将不同年龄段的人分为不同的群体,这时候我们就需要将连续型变量划分为分类变量

在sklearn中,使用KBinsDiscretizer来进行此操作

KBinsDiscretizer有以下三个重要参数

  • n_bins:分箱的个数
  • encode: 编码方式,默认是onehot
  • strategy: 定义箱宽的方式 默认是quantile
from sklearn.preprocessing import KBinsDiscretizer

x = data.iloc[:,0].values.reshape(-1,1)
est = KBinsDiscretizer(n_bins=3,encode='onehot',strategy='uniform')
est.fit_transform(x).toarry()   # 查看转换后分的箱

特征选择降维算法部分请看<数据处理和特征工程 (二) >

相关文章

  • 数据处理和特征工程(一)

    1. 数据挖掘五大流程 数据挖掘有4大步骤,分别为 获取数据 数据预处理 特征工程 建模其中特征工程是指将原始数据...

  • #Python3组数据挖掘实战总结 6、7章#

    数据挖掘实战 特征工程 数据处理 Data vs Feature 列:特征 从原始数据中提取特征供算法和模型使用 ...

  • 6.more_about_feature_engineering

    1.数据处理、特征工程、特征选择内容 数据处理分析数据的分布模式 - 发现异常值/噪声(boxplot,quant...

  • 数据处理和特征工程(二)

    4. 特征选择 一般有四种方法用来选择特征:过滤法、嵌入法、包装法、降维算法 4.1 Filter过滤法** 根据...

  • 09 特征工程 - 总结

    08 特征工程 - 特征降维 - IDA 数据清洗常见流程 异常数据处理 案例 - 车辆数据预处理 每个样本具有7...

  • 数据挖掘过程常用函数总结

    1. 数据处理 2. 数据可视化 3.特征工程 4. 创建模型 5. 其他

  • Task 2:EDA

    EDA目标 熟悉数据集 了解变量间的相互关系 为数据处理和特征工程做准备 内容介绍 载入数据科学库和可视化库 数据...

  • 个人信贷系统之Spark工具准备

    的确太容易懂了,就不解释了。 的确我们在用Spark做了几件事:数据处理与分析,特征工程和模型结果的预测与分析以及...

  • 信贷风控实战(五)——特征工程

      特征工程通常指的是通过数据处理方法,从数据源进行数据抽取和整合,并在此基础上挖掘出更深层次的数据来补充和完善数...

  • Task3-特征工程

    这一部分是特征工程,主要是数据处理以及变量衍生两大块内容。机器学习比赛中,发现一个好的特征,往往就能带来非常大的提...

网友评论

    本文标题:数据处理和特征工程(一)

    本文链接:https://www.haomeiwen.com/subject/rdyglktx.html