赞
踩
数据挖掘的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_
特征选择总结 过滤法更快速,更粗糙,包装法嵌入法更精确,计算量比较大,运行时间长。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。