机器学习sklearn-特征工程

数据挖掘的5大流程:

1、获取数据

2、数据预处理

3、特征工程

将原始数据转换为更能代表预测模型的潜在问题的特征的过程,可以通过挑选最相关的特征,提取特征以及创建特征来是想

4建模、测试模型并预测结果

5、上线模型

特征工程

sklearn的预处理模块Preprocessing、 Dimensionality reduction

Preprocessing 基本包含数据预处理所有内容

Impute 填补缺失值

feature_selection 包含特征选择的各种方法的实践

fit_transform()  fit 接口中只允许导入至少二维数组,一维会报错,输入的是特征矩阵,现实案例中不会是一维

inverse_transform()

Preprocessing 

数据无量纲化

线性无量纲化包括去中心化处理和缩放处理

preprocessing.MinMaxScaler  数据归一化 Normalization 归一化之后的数据服从正态分布

        feature_range 控制我们希望把数据压缩到的范围 默认[0,1]

preprocessing.StandardScaler 转换为标准正太分布

建议先使用StandardScaler 效果不好换MinMaxScaler

Impute.SimpleImputer  填补缺失值  实例化、fit_transform()

missing_values  数据缺失值长什么样,默认空值np.nan

strayegy 填充策略 均值 终止 众数 constant 

data.loc[].values.reshape(-1,1)  类为特征专用不能接受一维数组 reshape(-1,1)升维

处理分类型特征: 编码与哑变量

处理文字

preprocessing.LabelEncoder 标签专用将分类标签转换成分类数值

要输入的是标签,不是特征矩阵,允许iloc输入后是一维,然后可以fit_transform一步到位

.classes_ 属性 查看究竟有多少类别

直接这样写 data.iloc[:,-1] = LabelEncoder.().fit_transform(data.iloc[:,-1])

OrdinalEncoder().fit().categories_

preprocessing.OneHotEncoder 独热编码,创建哑变量

变量之间没有联系 相互独立的 不能使用 0,1,2这种表达类的编码方式

 .get_feature_names() 返回稀疏矩阵每列的含义

 

preprocessing.LabelBinarizer 对标签做哑变量

处理连续性特征:二值化 分段(分箱)

preprocessing.Binarizer   根据阈值将数据二值化,用于处理连续型变量 大于阈值的映射为1 小于的映射为0 

preprocessing.KBinsDiscretizer 分箱

将连续性变量划分为分类变量得到类,能够将连续性变量排序后按顺序分箱后编码

n_bins 每个特征中分箱的个数,默认5

encode 编码的方式默认onehot

strategy用来定义箱宽额方式,默认quantile 等位分箱,每个特征中每个箱内的样本数量相同 

                                                         uniform 等宽分箱

                                                        kmeans 按聚类分箱,每个箱中的值到最近的一维K均值聚类簇心的距离都相同

特征工程:特征提取(从非结构化数据中提取新信息作为特征)、特征创造、特征选择

特征选择 feature_selection

理解业务 理解数据

Filter 过滤法  通常用做预测力步骤,特征选择完全独立于任何机器学习算法,根据各种统计检验的各项指标来选择特征

方差过滤 VarianceThreshold 

优先消除方差为0的特征  这样特征对于样本区分没有什么用 

方差过滤对模型产生的影响

可以使用knn randomforest 进行方差过滤

%%timeit 计算运行这个cell所需要的时间 会运行多次

KNN特别慢

过滤法的主要对象是:需要遍历特征或升维的算法们,而过滤法的主要目的是: 在维持算法表现的前提下,帮助算法们降低计算成本。

方差过滤不一定帮助性能表现更好,因为可能过滤到有效特征

选取超参数threshold 尝试,太浪费时间,  现实中:只会使用阈值为0或者阈值很小的方差过滤,优先消除一些明显用不到的特征,然后我们会选择更优的特征选择方法继续削减特征数量。

相关性过滤 卡方过滤 F检验 互信息

卡方过滤 针对分类问题的相关性过滤 

卡方检验类,计算特征和标签之间的卡方统计量并依照卡方统计量高到低为特征排名,再结合feature_selection来特征选择。

卡方检验的本质是推测两组数据之间的差异,检验的原假设是两组数据是相互独立的,

feature_selection  SelectKBest.chi2

画学习曲线 确定超参数

F检验 用于连续变量的数据 用于捕捉每个特征与标签之间的线性关系的过滤方法

SelectKBest.f_classif  可以通过输出的统计量来设置K,寻找两组数据之间的线性关系,原假设是数据不存在显著的线性关系 

互信息法  用来捕捉每个特征与标签之间的任意关系(包括线性和非线性关系)的过滤方法。

feature_selection.mutual_info_classif

feature_selection.mutual_info_regression

互信息不输出统计量 输出的是互信息量的估计,互信息量都大于0,说明没有特征与标签无关。

过滤法总结:先试用方差过滤然后使用互信息法来捕捉相关性。

嵌入法 Embedded

算法依赖于模型评估完成特征子集选择

 找出模型贡献更大的特征,过滤法的进化版

嵌入法引入了算法来挑选特征,并且每次挑选都会使用全部特征,计算速度与模型相关,在选择完毕之后我们还是需要自己来评估模型。

权值系数没有范围可以找很难去界定一个有效的临界值,模型权值系数就是超参数

feature_selection.SelectFromModel

重要的参数 estimator 使用的模型评估其

threshold 特征重要性的阈值,重要性低于这个阈值的特征都被删除

属性 feature_importances_

包装法Wrapper

包装法 结合了过滤和嵌入法的方法

包装法也是特征选择和模型训练结合的方法

 

 图中的算法不是我们最终用来导入数据的分类或回归算法,而是专业的数据挖掘算法,即目标函数,这些数据挖掘算法的核心功能就是选择最佳特征子集

典型的目标函数 递归特征消除法RFE 一种贪心算法找到性能最佳的特征子集 

sklearn.feature_selection.RFE  参数estimator n_features_to_select 属性_ranking_     support_

特征选择总结 过滤法更快速,更粗糙,包装法嵌入法更精确,计算量比较大,运行时间长。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值