数据挖掘的五大流程:
- 获取数据
- 数据预处理
数据预处理是从数据中检测,纠正或删除损坏,不准确或不适用于模型的记录的过程。
数据预处理的目的:让数据适应模型,匹配模型的需求 - 特征工程
特征工程是将原始数据转换为更能代表预测模型的潜在问题的特征的过程,可以通过挑选最相关的特征,提取特征以及创造特征来实现。
特征工程的目的:降低计算成本,提升模型上限。 - 建模,测试模型并且预测出结果
- 上线,验证模型效果
1.数据预处理 Preprocessing & Impute
1.1 数据无量纲化
我们往往有着将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布的需求,这种需求统称为将数据“无量纲化”。
数据的无量纲化可以是线性的,也可以是非线性的。线性的无量纲化包括中心化(Zero-centered或者Meansubtraction)处理和缩放处理(Scale)。中心化的本质是让所有记录减去一个固定值,即让数据样本数据平移到某个位置。缩放的本质是通过除以一个固定值,将数据固定在某个范围之中.
线性数据和非线性数据:
https://blog.csdn.net/qq_40061206/article/details/127764690
sklearn用法
preprocessing.MinMaxScaler
当数据(x)按照最小值中心化后,再按极差(最大值 - 最小值)缩放,数据移动了最小值个单位,并且会被收敛到[0,1]之间,而这个过程,就叫做数据归一化(Normalization,又称Min-Max Scaling)。
注意,Normalization是归一化,不是正则化,真正的正则化是regularization,不是数据预处理的一种手段。归一化之后的数据服从正态分布
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
preprocessing.StandardScaler
当数据(x)按均值(μ)中心化后,再按标准差(σ)缩放,数据就会服从为均值为0,方差为1的正态分布(即标准正态分布),而这个过程,就叫做数据标准化(Standardization,又称Z-score normalization)
z = (x - u) / s
1.2 缺失值
impute.SimpleImputer
参数
(1)missing_values
数据中的缺失值长什么样,默认空值np.nan
(2)strategy
填补缺失值的策略,默认均值。
输入“mean”使用均值填补(仅对数值型特征可用)
输入“median"用中值填补(仅对数值型特征可用)
输入"most_frequent”用众数填补(对数值型和字符型特征都可用)
输入“constant"表示请参考参数“fill_value"中的值(对数值型和字符型特征都可用)
(3)fill_value
当参数startegy为”constant"的时候可用,可输入字符串或数字表示要填充的值,常用0
(4)copy
默认为True,将创建特征矩阵的副本,反之则会将缺失值填补到原本的特征矩阵中去。
1.3 处理分类型特征:编码和哑变量
数值型数据
文字型数据(分类型数据)
比如说,学历的取值可以是[“小 学”,“初中”,“高中”,“大学”],付费方式可能包含[“支付宝”,“现金”,“微信”]等等。
preprocessing.LabelEncoder:标签专用,能够将分类转换为分类数值
preprocessing.OrdinalEncoder:特征专用,能够将分类特征转换为分类数值
preprocessing.OneHotEncoder:独热编码,创建哑变量
名义变量
比如说,付费方式可能包含[“支付宝”,“现金”,“微信”](简称为S,C,Q)。彼此之间完全没有联系,表达的是是S≠C≠Q的概念。这是名义变量。
有序变量
学历的取值可以是[“小 学”,“初中”,“高中”,“大学”]。
三种取值不是完全独立的,我们可以明显看出,在性质上可以有高中>初中>小学这样的联系,学历有高低,但是学历取值之间却不是可以计算的,我们不能说小学 + 某个取值 = 初中。这是有序变量。
有距变量
体重(>45kg,>90kg,>135kg)。
各个取值之间有联系,且是可以互相计算的,比如120kg - 45kg = 90kg,分类之间可以通过数学计算互相转换。这是有距变量。
其中名义变量和有序变量统称为分类变量。类别OrdinalEncoder可以用来处理有序变量,但对于名义变量,我们只有使用哑变量的方式来处理,才能够尽量向算法传达最准确的信息
1.4 处理连续型特征:二值化与分段
sklearn.preprocessing.Binarizer
根据阈值将数据二值化(将特征值设置为0或1),用于处理连续型变量。大于阈值的值映射为1,而小于或等于阈值的值映射为0。默认阈值为0时,特征中所有的正值都映射到1。
preprocessing.KBinsDiscretizer
这是将连续型变量划分为分类变量的类,能够将连续型变量排序后按顺序分箱后编码。
2.特征选择
特征提取
从文字,图像,声音等其他非结构化数据中提取新信息作为特征。比
如说,从淘宝宝贝的名称中提取出产品类别,产品颜色,是否是网红
产品等等。
特征创造
把现有特征进行组合,或互相计算,得到新的特征。比如说,我们有一列特征是速度,一列特征是距离,我们就可以通过让两列相处,创造新的特征:通过距离所花的时间。
特征选择
从所有的特征中,选择出有意义,对模型有帮助的特征,以避免必须
将所有特征都导入模型去训练的情况。
2.1 Filter过滤法
2.1.1 方差过滤
VarianceThreshold。这是通过特征本身的方差来筛选特征的类。无论接下来特征工程要做什么,都要优先消除方差为0的特征。
2.1.2 相关性过滤
有三种常用的方法来评判特征与标签之间的相关性:卡方,F检验,互信息。
(1)卡方过滤
卡方过滤是专门针对离散型标签(即分类问题)的相关性过滤。卡方检验类feature_selection.chi2计算每个非负特征和标签之间的卡方统计量,并依照卡方统计量由高到低为特征排名。再结合feature_selection.SelectKBest
这个可以输入”评分标准“来选出前K个分数最高的特征的类,我们可以借此除去最可能独立于标签,与我们分类目的无关的特征。
(2)F检验
F检验,又称ANOVA,方差齐性检验,是用来捕捉每个特征与标签之间的线性关系的过滤方法。它即可以做回归也可以做分类,因此包含feature_selection.f_classif(F检验分类)和feature_selection.f_regression(F检验回归)两个类。其中F检验分类用于标签是离散型变量的数据,而F检验回归用于标签是连续型变量的数据。
(3)互信息法
互信息法是用来捕捉每个特征与标签之间的任意关系(包括线性和非线性关系)的过滤方法。互信息法比F检验更加强大,F检验只能够找出线性关系,而互信息法可以找出任意关系。
互信息法不返回p值或F值类似的统计量,它返回“每个特征与目标之间的互信息量的估计”,这个估计量在[0,1]之间取值,为0则表示两个变量独立,为1则表示两个变量完全相关。
2.2 Embedded嵌入法
使用算法进行特征选择
2.3 Wrapper包装法
使用算法进行特征选择
2.4 特征选择总结
过滤法更快速,但更粗糙。包装法和嵌入法更精确,比较适合具体到算
法去调整,但计算量比较大,运行时间长。当数据量很大的时候,优先使用方差过滤和互信息法调整,再上其他特征选择方法。使用逻辑回归时,优先使用嵌入法。