推荐文章1,其中详细分析了为什么L1正则化可以实现特征选择(特征剔除)
【王木头 · L1、L2正则化】三个角度理解L1、L2正则化的本质-CSDN博客
推荐文章2,里面详细分析了奇异值分解
【线性代数】矩阵变换-CSDN博客
本文遗留问题:(1)本文4.5中地那个巧合。(2)附录5.6方差的无偏估计的证明还需理解
目录
[(7)降维后的维数 D′ 在PCA中的影响](#(7)降维后的维数 D′ 在PCA中的影响)
前言
特征工程是原始数据与学习器的连接器。
在解决问题时,首先进行数据探索 (不属于特征工程的范畴),根据原始数据的特性初步确定学习器的类型,原始数据可能不能直接输入到学习器(例如字符串类型数据不能直接送入到线性分类模型)。然后要进行数据预处理 ,让数据更符合模型的输入类型或更适合所选择的模型,例如让数值型数据规范化或非数值型数据数值化等。数据处理完成后就要进行特征的选择,如果你是专家,一定情况下可以自己构造特征 ,但跟一般的情况是从数据中抽取特征 ,很多数据直接提供的特征的维度都是很高的,例如图像数据的每个像素值都是一个维度,但这些维度并不都是完全独立的,大部分特征都是冗余的,因此要实现降维,主要降维方式是主成分分析PCA。特征降维之后也可以进行特征选择,一些情况下可以随机选择特征,也可以可以凭借经验进行特征选择,凭借经验的选择也可以说是凭借大致的统计量进行的选择,当然也可以凭借严密的计算统计量进行特征选择,可以凭借的统计方式或统计量主要有(特征与标签之间的):相关系数、信息增益、卡方检验、互信息等。也可以通过嵌入式选择如L1正则化剔除不重要特征,在一些要求更高的问题中也可以通过包裹式更精确地选择特征。
机器学习项目的开发流程为:
项目开始时进行数据探索分析是必要的,数据探索有助于选择合适的数据预处理和学习器。数据探索包括以下几种:
- 输入特征类型、输出/标签的类型
- 输入特征分布、输出/标签的分布:统计量、直方图
- 输入特征之间的关系、输入特征与标签之间的关系
- 数据的质量:是否有缺失值、是否有噪声点
一、数据探索
下面是对数据探索的详细分析:
1、对特征类型的探索
特征类型分为以下几种:
- 连续型数值特征 (如价格、销售量)与离散型/类别型特征(如性别、教育程度)的区分。
- 特殊类型特征(如地理位置、时间特征)的特殊处理,视情况可作为连续特征或类别型特征对待。
2、缺失值
缺失值分析:
- 缺失值的统计分析:按行/列统计缺失值数量,计算整个数据集的缺失率。
- 检测缺失模式。
python
# 计算每一行有多少个缺失值的值,即按行统计缺失值
row_null = df.isnull().sum(axis=1)
# 按列统计缺失值
col_null = df.isnull().sum(axis=0)
#统计整个DataFrame的缺失值
all_null = df.isnull().sum().sum()
缺失值处理方法
- 删除缺失值严重的样本或特征。
- 对缺失值进行填补,如均值、中值填补等。
- 使用
pandas.fillna()
或Scikit-learn
中的SimpleImputer
进行灵活填充。
Pandas库的fillna函数可以对缺失值进行填补,灵活,但重用性较弱。训练集中的缺失值用训练集的统计量填补,测试集中的缺失值也要用训练集的统计量来填补
python
#用列中值填补
medians = df.median()
df = df.fillna(medians)
Scikit-learn的SimpleImputer类提供一些常见填补方法
• 均值mean(默认方法)
• 中位数median
• 众数most_frequent,可用于非数值数据
• 指定的常数,用fill_value替换缺失值,可用于非数值数据
python
#SimpleImputer类
class SimpleImputer(
missing_values = nan,
Strategy = 'mean',
fill_value = None,
verbose=0,
copy=True,
add_indicator=False )
python
#第1列第2行的的缺失值np.nan被第1列的均值3.5替代
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy="median")
data = im1.fit_transform([[1, 2],
[np.nan, 3],
[7, 6]])
3、特征/目标分布的可视化
- 使用直方图、核密度估计(KDE)等方法直观展示特征分布。(核密度估计见附录1)
- 可通过Seaborn工具包绘制分布图(
distplot
或countplot
)。
对连续特征,seaborn工具包的distplot画直方图
对离散特征,seaborn工具包的countplot画直方图条形图
dataframe的value_counts()得到每个特征取值的样本数目
4、特征/目标的分布相关的统计量
- 集中趋势:均值、中值、众数。
- 离散程度:方差、四分位数间距(IQR)、seaborn.boxplot函数。
- 数据统计方法:利用
pandas.describe()
查看数据的统计特性。
(四分位数间距见附录2 )(seaborn.boxplot函数见附录3)
5、Pandas支持的统计量
Pandas 的 describe()
方法提供了特征的基本统计量,包括均值、标准差、最小值、最大值和四分位数等。这些统计量可以用来快速总结数据的分布特点。
6、特征之间的相关性
- 通过皮尔逊相关系数(线性相关程度)衡量数值型特征之间的相关性。相关系数值在 -1 到 1 之间:
|r| > 0.5
表示强相关;r = 0
表示无线性相关。
- 使用热力图(
sns.heatmap
)直观展示特征相关矩阵,颜色深浅反映相关程度。
特征与特征之间强相关意味着信息冗余。可以通过主成分分析(PCA)去除冗余的特征。
7、特征与目标之间的关系
- 使用散点图(
sns.pairplot
)查看特征与目标变量的关系,以及特征间两两关系。 - 散点图可以直观显示分类问题中不同类别的分布差异。
通过这些分析步骤,能够更好地了解数据的结构和规律,为后续的机器学习的特征工程,模型建立奠定基础。
二、特征工程------数据预处理
不会做特征工程的 AI 研究员不是好数据科学家!上篇 - 连续数据的处理方法,
链接:
不会做特征工程的 AI 研究员不是好数据科学家!上篇 - 连续数据的处理方法 | 雷峰网 (leiphone.com)
1、数值型特征处理
虽然数值型特征输入是大多数机器学习模型能接受的输入,但有时候原始数值和模型假设不吻合。
- 如一些线性模型假设输入预输出之间是线性关系,但实际不符合线性假设。
常用的数值型特征处理方法有:
• 多项式扩展: PolynomialFeatures
• log变换: np.log1p()
• 区间量化 、二值化
• 数据预处理:缩放、规范化
(1)log变换
有时候数值特征并不能直接适用于线性模型,可以选择使用 变换来处理我们的数值特征,其中?表示数值特征。
特点:
- 可以拉伸较小的值,同时压缩大值,使数据更符合正态分布。
- 有助于稳定方差,适配线性模型或其他对正态分布有依赖的模型。
优点:
- 消除极端值对模型的影响。
- 提高与目标变量的线性相关性。
缺点:
- 对负值和零值敏感,需先平移或特殊处理。
代码示例:
python
import numpy as np
df['Feature_log'] = np.log1p(df['Feature']) # 对数变换
应用案例:
片中广告投放和销量预测的例子:
- 对
TV
和Sales
数据应用对数变换后,log(TV)
和log(Sales)
的散点图呈现更强的线性关系。 - **效果:**不同回归模型性能(R²分数(是用来评估回归模型的性能指标,在后续文章有详细的分析))均提升,显示了log变换的有效性。
(2)区间量化(分箱)
目的: 将连续型变量离散化,例如对收入、年龄等进行分段,以增强线性模型或分类模型的特征表达能力。
方法:
- 等宽分箱: 将变量划分为等宽的区间(如10个等宽)。
- 等频分箱: 每个区间样本数相等,适合样本分布不均的情况。
- 自定义分箱: 基于业务规则或统计知识人为设置分箱。
优点:
- 增强模型解释性。
- 改善非线性特征的线性拟合能力。
缺点:
- 过多分箱可能导致过拟合,过少分箱则损失信息。
代码示例:
python
# 等频分箱计算四分位数
quantile_list = [0, 0.25, 0.5, 0.75, 1.0]
quantiles = df['Income'].quantile(quantile_list)
# 添加分箱标签
df['Income_bin'] = pd.qcut(df['Income'], q=quantile_list, labels=['低', '中', '高', '非常高'])
(3)数据缩放:取值范围缩放、规范化
目的: 对数值范围进行规范化,消除特征之间量纲差异对模型性能的影响。
主要方法:
i、标准化(Standardization): 将特征值调整为均值为0、标准差为1的分布,公式:
-
适用场景:对正态分布或近似正态分布的数据效果较好。
-
代码示例:
pythonfrom sklearn.preprocessing import StandardScaler ss = StandardScaler() X_train_scaled = ss.fit_transform(X_train) X_test_scaled = ss.transform(X_test)
ii、归一化(Normalization): 将特征值缩放到[0,1]范围,公式:
-
适用场景:值域跨度大的数据(如图像像素值)。
-
代码示例:
pythonfrom sklearn.preprocessing import MinMaxScaler mm = MinMaxScaler() X_train_scaled = mm.fit_transform(X_train)
iii、最大绝对值缩放(MaxAbsScaler): 将特征值缩放到[-1, 1]范围,保留稀疏数据的零值。
-
适用场景:稀疏矩阵特征。
-
代码示例:
pythonfrom sklearn.preprocessing import MaxAbsScaler mas = MaxAbsScaler() X_train_scaled = mas.fit_transform(X_train)
iv、RobustScaler缩放
功能:基于数据的中位数和四分位数对数据进行缩放,减少异常值的影响:
其中:
- :第 列特征的中位数;
- :第 列特征的四分位间距(即 Q3 - Q1)。
v、sklearn 的缩放器 API
在 sklearn 中,缩放器属于 preprocessing
模块。所有缩放器的接口统一,主要包括以下方法:
fit():功能:计算缩放所需的统计信息(如均值、标准差、最大值等),但不实际转换数据。
transform():功能:根据 fit()
中计算的统计信息对数据进行转换。
fit_transform():功能:fit()
和 transform()
的结合,适合在训练集上同时计算统计信息并进行转换。
inverse_transform():功能:对已经缩放的数据进行反向变换,恢复原始特征值。
vi、缩放器的优缺点
缩放器 | 优点 | 缺点 |
---|---|---|
StandardScaler | 保持特征的分布特性,适合正态分布数据 | 对异常值敏感 |
MinMaxScaler | 结果范围一致,适合范围已知的非正态分布数据 | 对异常值敏感 |
MaxAbsScaler | 保持稀疏数据的特性 | 对非稀疏数据的效果不如其他方法 |
RobustScaler | 对异常值不敏感,适合有异常值的数据 | 转换后数据并不归一化到固定范围(如 [0, 1]) |
vii、示例
python
from sklearn.preprocessing import StandardScaler
# Step 1: 初始化缩放器
scaler = StandardScaler()
# Step 2: 对训练集进行 fit 和 transform
X_train_scaled = scaler.fit_transform(X_train)
# Step 3: 对测试集仅进行 transform(使用训练集的统计信息)
X_test_scaled = scaler.transform(X_test)
2、类别型特征编码
很多机器学习模型只能处理数值型数据。如果给定的数据是不同的类型,必须先将数据变成数值型。实际应用中很多特征都是离散值/类别型特征。如商品类型。
类别型特征编码有以下几种:
- 0/1编码
- 标签编码
- 独热编码
- 计数编码
(1)标签编码
功能:
- 将类别型特征映射到连续的整数值,通常按其出现顺序分配。
- 每个类别被分配一个唯一的整数。
sklearn 实现:
LabelEncoder
:适用于单个特征。OrdinalEncoder
:适用于多个特征,支持指定顺序。
- 优点 :
- 简单高效,占用存储空间小。
- 缺点 :
- 对模型会引入错误的顺序关系,例如"0"可能比"1"小,而实际上类别间可能没有大小关系。
(2)独热编码
功能:
- 将类别型特征扩展为 K 维的稀疏向量,其中 K 为类别数量。
- 每种类别对应一个独立的二进制特征。
优缺点:
- 优点 :
- 避免引入类别顺序,适合无序类别。
- 缺点 :
- 高基数特征会导致维度爆炸,增加存储与计算成本。
- 通常不适用于类别数量过多的特征(如用户 ID)。
(3)计数编码
功能:
- 将类别型特征的取值替换为其在数据集中出现的频次或概率。
- 可结合目标变量,通过条件概率 提升编码效果。
优缺点:
- 优点 :
- 对于高基数特征非常高效。
- 引入统计信息,适用于某些需要类别型特征与目标变量强相关的场景。
- 缺点 :
- 可能引入信息泄露,尤其是将目标变量直接参与编码。
- 数据不足时,统计信息不准确。
(4)稀有取值
在某些类别型特征中,可能存在样本数量非常少 的取值(稀有取值)。如果直接对这些稀有取值进行单独编码,可能会浪费空间,同时这些特征的模型参数难以充分训练。
解决方案:
- 设置阈值:只有当某个类别的样本数量超过设定的阈值时才单独编码。
- 低于阈值的类别统一归类为"其他"(back-off或后退箱)。
(5)信息泄露
问题 :在分箱或计数编码中,如果直接使用目标变量 y
的统计信息进行特征编码,可能导致信息泄漏,从而影响模型的泛化性能。
防范措施:
- 使用历史数据进行统计:对当前数据的特征编码时,仅使用之前的数据统计信息。
- 增加随机扰动:引入拉普拉斯分布的小随机噪声,以掩盖单个数据点的信息。
重要性:
- 防止模型过拟合。
- 确保编码过程严格符合数据集划分规则。
(6)哈希编码
原理:
- 使用哈希函数将大范围类别值映射到一个固定维度的有限集合中。
- 哈希冲突不可避免,但通过分配到多个"桶"(b维)后可以降低冲突对模型性能的影响。
适用场景:
- 高基数类别型特征(如IP地址、用户ID)。
- 空间或计算资源有限,无法采用独热编码。
优点:
- 内存高效:固定输出维度。
缺点:
- 哈希冲突:相同哈希值会导致信息丢失。
(7)嵌入编码
懂不了。
三、特征工程------特征构造
如何获取重要特征?
如果是领域专家,知道数据的物理意义,可能可以设计更多特征。
即**构造特征:**从原始数据构造新特征,思考业务逻辑与探索业务数据,往往需要手工创建,是科学与艺术的有机结合。
四、特征工程------特征抽取
如果不是领域专家,一些通用的规则:
- 字符串型特征:Label编码
- 时间特征:年月日、时间段(早中晚)...
- 数值型特征:加减乘除,多项式,log, exp
- 低基数类别型特征:独热编码
- 高基数类别型特征:计数编码、哈希编码、嵌入编码
- 深度学习自动学习特征:如用CNN网络提取图像特征
所有此部分主要介绍**特征抽取:**从原始数据抽取新特征,使用算法自动执行。
- 将多维的或相关的特征降低到低维,以提取主要信息或生成与目标相关性更高的信息。
- 非结构化数据:文本特征提取、音频特征提取、图像特征提取、
- 主成分分析
1、为什么要特征抽取?------维度灾难
随着空间维度的增长,数据点越来越分散,以至于距离和密度的概念变得越来越模糊。
在低维空间(如2维),可以清楚地看到点之间的距离差异;但在高维空间中,几乎所有点的距离都相似。
(1)维度增加带给距离的灾难
下图为2维情况下距离最小的点与距离最大的点,可见距离差别很大,有1500倍:
随着维度的升高,最大距离与最小距离的比值会变小,距离这个概念会变得越来越模糊,如下图:
数据点的分布趋于均匀,所有点之间的距离几乎相等。因此,高维空间中,传统的距离测度(如欧几里得距离)可能失去实际意义,因为所有点的距离都趋于一致。
(2)维度增加带给余弦相似度的灾难
没有一种距离函数或相似性函数能在避免高维带来的问题。
余弦相似度的分布:
- 示例 :随机生成的点对其余弦相似度进行统计,发现:
- 在低维空间,余弦相似度分布较为分散。
- 随着维度增加,余弦相似度的分布变得越来越集中,几乎所有点的相似度趋于相等。
原因:
- 高维数据空间中,向量的随机分布会导致点与点之间的夹角几乎相同。
结论:
- 在高维空间中,余弦相似度和距离函数的判别力下降,传统方法可能需要重新设计或修正。
2、降维概述
(1)高维空间的信息冗余
降维是将高维数据映射到低维空间,同时保留尽可能多的信息。为什么可以降维,因为高维数据通常是冗余的,内在维度可能远小于表面维度。
下面是两个例子:
例子一、手写数字识别
这几幅图是同一幅图旋转不同角度得到的,每幅图都是28×28维的向量,但是如此高维的向量对于区分这几幅图是高度冗余的,实际潜在的结构参数(如旋转方向)可能只有1维。
例子二、文本文档分析
- 文本可以用高维向量表示,每个维度代表一个词。
- 潜在的结构参数可以是"主题"或"话题",它们可能存在于一个更低维的空间中。
(2)降维的方法概述
数据集通常以矩阵的形式表示,其中每行是一个数据点,每列是一个特征。
降维方法:
- 特征选择:选择原始特征的一个子集作为新的特征。
- 特征抽取:通过组合已有特征,生成新的特征。(PCA)
- 两种方法的共同目标是将数据从高维空间映射到低维空间中,通常低维空间的维度远小于原始维度。
降维本质:
- 找到一个映射函数,其中 。
3、主成分分析(PCA)
在上文Fisher线性判别中提到对向量进行投影的方法,要让一个 维向量投影到 维,可以让这个向量左乘一个 的矩阵。要对一系列向量进行投影,只需要一系列向量组成的矩阵与 的投影矩阵相乘即可。
PCA的目的就是找到这个投影矩阵。
(1)投影后保留信息要最多------如何实现?
将高维数据投影到低维空间后,尽可能地保留数据的信息,如何来衡量保留的信息呢?这里的衡量方式是将 维原样本通过 投影到 维后,再将这个 维的一系列样本再投影回去(通过)到 维,但这里并不是可逆的,高维到低维投影的信息已经损失,无法挽回,这里第二次投影的升维并没有信息的增加,这里恢复 维的原样本的信息是比原来少的。将他们作差,那么这得到的结果就是降维的信息损失,PCA的目的是让这个损失的信息最小,即最小化重建误差:
误差函数:
定义为原始数据与重建数据之间的误差平方和:
这个最小化这个损失函数等价为最大投影后的方差,即
为什么最小重构误差等价于最大投影后的方差呢?下面是一个证明:
这里解决一个疑问:降维后的样本矩阵再升维这个过程是什么样的?
这个升维过程是用一组更高维的基去替代较低维的基,映射后的样本向量变为前 个元素为原来的值,而剩下的 个元素值都为0。
现实生活中可以形象的认为原样本矩阵是地面上一块橡皮泥,它是3维的,一个大锤从某个方向(这个方向即是投影矩阵)将他砸扁,变成了二维,此时它处于锤子和地面之间的二维空间中,然后这个锤子又收回,但橡皮泥不会再恢复三维,但由于锤子收回了,扁平的橡皮泥又回到了三维空间,仍然可通过三维空间的坐标表示橡皮泥。
(2)求解优化问题------如何解出投影矩阵W?
中心思想 :找到一个方向向量 ,使得数据投影到这个方向上的方差最大。
假设数据已中心化,协方差矩阵为 :
- 优化目标为:
- 即找到协方差矩阵 的特征值最大对应的特征向量。
使用拉格朗日乘子法,解决约束优化问题:
- 对第一个投影方向 ,得出特征值方程: 最大特征值对应的特征向量 是最佳投影方向。
- 对第二个方向 ,需满足正交性约束,类似推导得出:
(3)最终求解出的投影矩阵W
通过上面的求解可知,最终求出的投影矩阵 为:协方差矩阵 的最大的 个特征值所对应的 个特征向量组成的矩阵。
(4)PCA算法过程
所以,算法PCA的过程可总结为:
输入
- 数据矩阵 ,其中 是 维的样本数据。
- 希望降维后的目标维度为 ()。
算法过程
-
中心化数据:
-
计算协方差矩阵:
- 使用中心化后的数据计算协方差矩阵 :
- 其中 是数据矩阵,行代表特征,列代表样本。
-
特征值分解:
- 对协方差矩阵 进行特征值分解,得到特征值和特征向量。
- 特征向量表示数据在每个主成分方向上的投影方向,特征值表示该方向上的数据方差。
-
选择主成分:
- 按特征值从大到小排序,选择前 个特征值对应的特征向量。
- 将这些特征向量组成矩阵 ,其中 是对应的特征向量。
输出
投影矩阵 ,用于将高维数据投影到低维空间:
其中 是低维空间中的数据表示。
(5)PCA算法图解
(6)使用SVD后的PCA算法过程
高维情况下,协方差矩阵 的大小为 ,高维情况下计算非常复杂。
所以高维情况下PCA通过奇异值分解SVD求解,
使用SVD求解PCA算法过程如下:
(7)降维后的维数 D′ 在PCA中的影响
很显然,降维后,维数 越小,损失的信息就越多。
如何选择 呢?
i、用户指定
- 用户根据具体需求或者经验,直接指定降维后的目标维数 。
- 例如,根据先验知识选择较小的维数来加速计算或者便于可视化。
ii、通过验证选择最优维数
- 使用简单分类器(如KNN) :
- 在不同的降维维数下,通过交叉验证的方式评估分类器的性能。
- 根据分类效果选择最优的 ,即能够平衡维数降低和分类性能的点。
iii、基于累积方差贡献率
- 使用重建阈值法,即选择前 个主成分,使其累积方差贡献率达到设定的阈值(例如95%):
其中:
是主成分的特征值(对应解释的方差大小)。
是累积方差贡献率的阈值(通常为0.95或0.99)。
iv、特征值快速下降的趋势
- 从图中可以看到,特征值一般在前几个主成分快速下降,然后趋于平缓。
- 当特征值或累积方差贡献率曲线趋于平稳时,可以选择对应的 作为降维的维数。
- 如右图红色虚线对应的拐点位置,说明此时增加更多主成分的收益很小。
(8)PCA降维的优缺点
优点
- 特征向量方法
- 没有额外要调节的参数
- 没有迭代
- 没有局部最小值
缺点
- 只用了二阶统计量,不能处理高阶依赖
- 受限于线性投影
4、特征值分解
在线性代数系列中对特征值分解和奇异值分解已有分析,这里不再详细介绍。
5、奇异值分解
是 的特征向量组成的矩阵(按相应特征值由大到小排列,即谁对应的特征值大,谁排前边)
是 的特征向量组成的矩阵(按相应特征值由大到小排列,即谁对应的特征值大,谁排前边)
是 和 的特征值由大到小排列的对角矩阵,巧合的是 和 的特征值的前 个相同。
但是数学没有巧合,这个问题我还没想好。待思考
五、特征工程------特征选择
1、手工选择
通过领域知识或者经验手动选择特征,例如剔除冗余(高度相关的特征)、不相关(例如文本停用词)、质量差(缺失值超过一定比例的特征)和方差过小的特征。手工选择其实也是粗略地根据统计量的特征选择。
2、随机特征选择
从高维数据中随机选择一定数量的维度,可以通过 Johnson-Lindenstrauss 定理保证降维后的点近似保持原始距离,但这种方法缺乏理论保证,适用于简单任务。
3、基于统计量的过滤式选择
计算特征与目标变量之间的统计关联性,包括互信息、信息增益、卡方检验等。例如:
- 信息增益通过熵的变化量衡量特征的重要性。
- 卡方检验用于判断分类变量的独立性。
(1)基于信息增益
当特征出现或者不出现时,预测的熵的减少,即计算:
其中, 是目标标签的熵,表示未考虑特征时的不确定性; 是在特征 给定条件下的熵,表示引入特征后剩余的不确定性。
展开公式为:
优缺点:
- 优点:简单直观,能够很好地度量特征与目标标签之间的相关性。
- 缺点:对特征值较多的变量有偏好,可能导致过拟合。
(2)基于卡方检验
概念:
- 卡方统计量 () 用于检测两个分类变量之间的独立性。
- 特征选择中,通过检验特征 与目标 是否独立,来判断该特征是否有助于分类。
卡方统计量的计算公式为:
其中:
- 是观察值(即列联表中的实际值:A、B、C、D)。
- 是期望值,表示在假设变量独立的情况下,每个单元格的理论频率。
具体来说,期望值的计算方式是:
当特征和标签都只有两种取值时
| | t=0 | t=1 |
| c=0 | A=36 | B=30 |
c=1 | C=14 | D=25 |
---|
卡方统计量的计算公式为:
卡方统计量越小,特征与标签越独立。
(3)基于互信息
互信息 的数学表达式为:
- :特征值 和标签值 同时出现的联合概率。
- :特征值 的边际概率。
- :标签值 的边际概率。
互信息的核心思想
- 如果 和 是完全独立的,则 ,此时互信息为 0。
- 互信息越大,说明 和 之间的依赖关系越强。
互信息可以被理解为:
- 测量特征值出现后,对标签熵(不确定性)的减少程度。
- 也就是说,它衡量了特征值 对于预测标签 的信息贡献。
- 它与信息增益类似。
(4)三种方法对比
方法 | 是否能捕获非线性依赖 | 数据类型适用性 | 计算复杂度 | 对特征间关系考虑 |
---|---|---|---|---|
互信息 | 是 | 连续/分类 | 较高 | 否 |
卡方检验 | 否 | 分类 | 较低 | 否 |
信息增益 | 是 | 分类 | 较低 | 否 |
4、嵌入式选择
嵌入式特征选择将特征选择与模型训练结合,能够在模型训练的过程中自动选择重要的特征。这种方法的核心思想是通过模型的权重或重要性得分来评估特征的重要性。常用的嵌入式方法包括:
(1)基于L1正则化的特征选择
至于为什么L1正则化能特征选择,在王木头三种角度分析正则化中有详细分析,如下图
L1正则化时极值点可能会被拉到坐标轴上,不太重要的特征会直接失去作用,实现了特征选择。
(2)基于树模型的特征选择
- 方法:树模型(如CART、随机森林、GBDT等)通过特征的重要性(如分裂节点的贡献)来筛选特征。
- 特点:特征的重要性由模型自动给出,不需要额外计算。
- 示例:在鸢尾花分类任务中,决策树仅用花瓣长度和花瓣宽度两个特征,就能够完成分类任务。
5、包裹式选择
包裹式特征选择通过指定一个学习器(如KNN、决策树)反复地训练模型并评估特征子集的性能,从而找到最佳的特征集合。这种方法通常比过滤式更准确,但计算成本较高。
(1)前向搜索
- 方法 :从零开始,每次迭代添加一个对性能提升最大的特征。
- 一次性完成(one pass)或通过迭代式方法逐步优化。
- 特点:适合需要高性能的场景,但可能会导致过拟合。
(2)后向搜索
- 方法:从所有特征开始,每次迭代移除一个对性能影响最小的特征。
- 特点:通过递归式删除,最终只保留对模型性能提升显著的特征。
六、⭐⭐全文总结⭐⭐
机器学习项目的开发流程为:
1、数据探索
通过数据的统计量进行可视化,并定性分析数据的特性,对缺失值进行处理,评估特征与特征,特征与标签之间的大致关系。
2、数据与处理
完成数据探索之后要对数据进行预处理,本文主要介绍了对数值型特征进行log变换、对连续型数值特征进行区间量化,还有就是对数值型特征进行缩放等然后就是对非数值型数据进行编码,介绍了7种编码方式,每种都有其自己的适用范围。
3、特征构造
特征构造需要强大的先验知识和对问题的深入理解。
4、特征抽取
特征抽取的原因主要是因为维度升高引发的维度灾难,高维度使得两个样本之间的区别变得模糊。所有的距离函数或相似性函数都不能避免维度升高带来模糊化。所有要进行降维,本文主要讲了主成分分析PCA,即D维的一系列样本向量被将为 维,他乘的投影矩阵的构成为:每个特征都中心化后的样本组成的矩阵的协方差矩阵的特征值按大小排列的前 个所对应的特征向量组成的矩阵即为投影矩阵。本文还提到了特征值分解和奇异值分解。
5、特征选择
模型训练前也可以进行特征选择,一些情况下可以随机选择特征,也可以可以凭借经验进行特征选择,凭借经验的选择也可以说是凭借大致的统计量进行的选择,当然也可以凭借严密的计算统计量进行特征选择,可以凭借的统计方式或统计量主要有(特征与标签之间的):相关系数、信息增益、卡方检验、互信息等。也可以通过嵌入式选择如L1正则化剔除不重要特征,在一些要求更高的问题中也可以通过包裹式更精确地选择特征。
附录
1、核密度估计
核密度估计是概率密度函数的平滑化。
核密度估计的表达式为:
其中:
- :估计密度的点。
- :样本数据点。
- :样本数量。
- :带宽(bandwidth),控制平滑程度的参数,值越小,估计越贴近数据。
- :核函数,通常是一个对称的概率密度函数,用于平滑数据。
常见的核函数包括:
- 高斯核:
- 均匀核:
- 三角核:
KDE的核心思想
核密度估计通过将每个数据点视为一个核函数的中心,对每个数据点的计算都依赖该点左右对称的一些列点通过核函数的平均,生成一个平滑的密度曲线。这与直方图不同,直方图依赖于固定的分箱,而核密度估计的平滑性由核函数和带宽参数决定。
KDE的优点
- 平滑性:相比直方图,核密度估计生成的分布更平滑,避免了由于分箱边界造成的离散性。
- 适用于连续数据:能够很好地表示连续变量的分布。
- 无分箱偏差:直方图的结果依赖于分箱的数量和位置,而KDE不依赖分箱。
2、四分位数间距
四分位数间距是统计学中用来描述数据分布离散程度的一个重要指标。它表示数据集中中间 50% 的范围,是上四分位数(Q3)与下四分位数(Q1)之间的差值。四分位数间距对于检测异常值、评估数据的变异性非常有用,尤其适合非对称分布的数据。
四分位数间距的定义
四分位数间距的公式为:
其中:
- 下四分位数(Q1):将数据按升序排列后,位于 25% 位置的数据值(第一分位数)。
- 上四分位数(Q3):将数据按升序排列后,位于 75% 位置的数据值(第三分位数)。
- 中间的 50% 数据范围就是 和 之间的数据。
四分位数间距的意义
- 反映数据的离散程度 :
- IQR 直接反映了中间 50% 数据的分布范围,数值越大,数据的离散程度越高;数值越小,数据越集中。
- 鲁棒性(Robustness) :
- IQR 不受极端值或异常值的影响,因为它只关注数据中间部分,而忽略两端的分布。
- 相较于标准差,IQR 更适合用于分布偏态或存在异常值的数据。
- 数据分布对称性分析 :
- 如果数据对称分布,IQR 的范围会相对均衡。
- 如果数据偏态(如右偏或左偏),IQR 的上下部分可能会不对称。
四分位数间距的优缺点
优点:
- 抗干扰能力强 :
- 不受异常值或极端值影响,适合偏态分布数据。
- 简单直观 :
- 描述中间 50% 数据的集中趋势,提供对数据离散程度的有效衡量。
缺点:
- 信息丢失 :
- 仅关注中间 50% 数据,忽略了两端数据的分布。
3、余弦相似度
余弦相似度是一种用于衡量两个向量之间相似性的指标,通过计算它们夹角的余弦值来反映相似程度。
公式为:
即余弦定理求向量夹角。
4、样本中心化
即按特征进行中心化,每个特征的所有值减去这个特征所有值的均值。
5、协方差矩阵
(1)定义
协方差矩阵是一种描述多维数据(即多个随机变量)间线性关系的矩阵,用于量化不同变量间的协方差。它是统计学和数据科学中常见的数据表示形式。
对于一个 的数据矩阵 ( 表示样本数, 表示特征数),协方差矩阵是一个 的矩阵,记为 ,定义为:
其中,协方差矩阵中的每个元素 表示第 个特征和第 个特征之间的协方差。
(2)公式推导
假设数据矩阵 的维度为 :
- 是样本数。
- 是特征数。
数据的中心化
在计算协方差之前,通常需要先对数据中心化,即将每个特征减去它的均值
协方差矩阵公式
协方差矩阵 的每个元素定义为:
其中:
- 是第 个特征和第 个特征的协方差。
- 是第 个样本在第 个特征上的值。
- 是第 个特征的均值。
最终可以用矩阵形式简化为:
其中 是中心化后的数据矩阵。
(3)协方差矩阵的意义
- 协方差矩阵中的每个元素 表示第 和第 个特征之间的线性相关性。
- :两个变量正相关。
- :两个变量负相关。
- :两个变量不相关。
- 协方差矩阵不仅揭示变量之间的关系,还反映了数据的整体分布,特别是特征的协同变化情况。
- 协方差矩阵是 PCA 中的核心,用于提取数据的主方向(特征向量)。
(4)协方差矩阵的几何意义
- 分布的形状和范围:
- 协方差矩阵描述了数据的分布形状(如椭球形)及其在每个维度上的伸展程度。
- 如果协方差矩阵是单位矩阵 ,表示数据分布是球形且各维度之间独立。
- 方向性:
- 协方差矩阵的特征向量表示数据分布的主要方向(主轴)。
- 特征值表示沿这些主轴的扩展程度。
- 变换的意义:
- 协方差矩阵可以被用来通过仿射变换(如旋转或拉伸)将数据标准化或白化。
如果协方差矩阵的一个特征值远大于其他特征值,说明数据在某个方向上的分布显著延伸。
(5)协方差矩阵的本质
本质上,协方差矩阵是数据分布的二阶统计量,描述了数据的第二阶统计特性(即两个变量间的协方差)。
-
统计意义: 协方差矩阵总结了多维数据之间的线性相关性。
-
线性代数意义: 协方差矩阵是一种对称正定矩阵,其特征值和特征向量定义了数据分布的形状和方向。
-
几何意义: 协方差矩阵刻画了数据在高维空间中的几何结构。协方差矩阵的特征向量确定了数据的主方向,而特征值的大小则描述了分布在该方向上的扩展程度。
(6)为什么协方差公式中除以的是(n-1)而不是n
通过样本估计总体的方差,应该是样本围绕总体均值 的离散程度,但是总体的均值没有,只有样本的均值 ,样本数据点偏离 的程度通常会小于它偏离真实的总体均值 的程度,因此正常估计方差会偏小。如果按照除以n算的话算出的结果会为按照总体均值算出的倍。
定量计算证明如下:
错误地用除以 计算样本方差的公式
定义样本数据为 ,样本均值为:
错误地用分母 计算样本方差为:
我们需要计算 。
将样本方差展开
展开 :
将求和分开,得到:
注意到 ,代入后可简化为:
样本方差的期望值
为了计算期望值 ,我们分别计算 和 。
计算
每个 的期望值满足:
因此:
计算
样本均值 的期望值满足:
其中 ,且 。因此:
于是:
代入计算
化简得:
得证。