苏州网站建设自学,公司加盟代理,dw制作网页的步骤,微信分享按钮wordpress高级版#x1f388;个人主页#xff1a;豌豆射手^ #x1f389;欢迎 #x1f44d;点赞✍评论⭐收藏 #x1f917;收录专栏#xff1a;机器学习 #x1f91d;希望本文对您有所裨益#xff0c;如有不足之处#xff0c;欢迎在评论区提出指正#xff0c;让我们共同学习、交流进… 个人主页豌豆射手^ 欢迎 点赞✍评论⭐收藏 收录专栏机器学习 希望本文对您有所裨益如有不足之处欢迎在评论区提出指正让我们共同学习、交流进步 【机器学习】特征选择之过滤式特征选择法 一 概念二 步骤三 优点三 方差选择法Variance Thresholding3.1 步骤3.2 示例 四 互信息Mutual Information4.1 步骤4.2 示例 五 卡方检验Chi-Square Test5.1 步骤5.2 示例 六 皮尔逊相关系数Pearson Correlation Coefficient6.1 步骤6.2 示例 七 信息增益Information Gain7.1 步骤7.2 示例 八 各种方法的优缺点及适用场景8.1 方差选择法8.2 互信息法8.3 卡方检验法8.4 皮尔逊相关系数法8.5 信息增益法 总结 引言:
在机器学习领域特征选择是一个至关重要的步骤它可以帮助我们从原始数据中筛选出最具有代表性和信息量的特征从而提高模型的性能和泛化能力。 而过滤式特征选择法是特征选择的一种常用方法它在训练模型之前通过评估特征的某些统计属性或与目标变量之间的关系来进行特征筛选。 本文将介绍几种常见的过滤式特征选择方法包括方差选择法、互信息、卡方检验、皮尔逊相关系数和信息增益。 我们将详细讨论每种方法的概念、步骤以及通过示例演示它们的应用。 此外我们还会分析各种方法的优点、缺点以及适用场景帮助读者在实际应用中选择合适的特征选择方法。 一 概念
过滤式特征选择是一种机器学习中的特征选择方法它在模型训练之前通过对特征进行评估和排序 即针对每个特征使用某种度量方法对其进行评估然后根据评估结果对特征的好坏进行排序。 再选择出与目标变量相关性较高的特征子集。 这种方法独立于具体的学习算法通过对特征进行初步的过滤提高了模型的泛化能力、降低了过拟合的风险并且在计算效率上具有优势。 类比
假设你是一位拥有一家小餐馆的业主想要提高菜单的质量和效率。你决定使用过滤式特征选择方法来选择最适合的菜品。 首先你收集了各种关于菜品的数据包括菜品的成本、制作时间、受欢迎程度等特征。 接着你对每个菜品的这些特征进行评估比如成本与价格的比率、制作时间与受欢迎程度之间的关系等。 然后根据评估结果你对每个菜品的好坏进行排序将最具潜力的菜品排在前面。 最后在选择菜单时你选择了与盈利相关性较高的特定菜品子集这些菜品不仅在成本、制作时间上效率高而且在受欢迎程度上也较好从而提高了菜单的质量和效率降低了成本增加了盈利空间。 这种过滤式特征选择方法使得你的餐馆在不同的条件下都能保持竞争力。 二 步骤
其步骤可以分为以下几个阶段
**1 数据收集 **
首先收集包含特征和目标变量的数据集。 确保数据集经过清洗和预处理以排除缺失值、异常值等干扰因素。 2 特征评估
针对每个特征使用合适的评估方法来衡量其与目标变量之间的关系或特征本身的重要性。 常用的评估方法包括方差选择法、互信息、卡方检验、皮尔逊相关系数、信息增益等。 3 特征排序
根据评估的结果对每个特征进行排序将重要性高的特征排在前面。 这有助于后续选择最具代表性的特征子集。 4 阈值设定可选
可以设定一个阈值只选择排名在阈值之上的特征或者选择前N个特征。 这有助于进一步筛选特征减少模型复杂度。 5 特征选择
根据设定的标准选择最终的特征子集。 可以是按照排名选择前几个特征也可以是根据阈值选择高于该阈值的特征。 过滤式特征选择的优点在于其独立于具体的学习算法可以在任何模型训练之前对特征进行初步的筛选从而提高模型的泛化能力、降低过拟合风险并在计算效率上具有优势。
三 优点
过滤式特征选择是机器学习中常用的特征选择方法之一其优点主要体现在以下几个方面
1 简单而高效
过滤式特征选择的算法通常简单而直观不需要深入训练模型或进行复杂的计算。 这使得过滤式方法的实现非常高效特别是对于大规模数据集它们能够在相对较短的时间内完成特征选择。 2 独立于具体模型
过滤式特征选择方法与具体的机器学习模型无关因此可以在任何模型之前应用。 这种独立性使得它们成为预处理阶段的理想选择可以在模型训练之前快速减小特征空间的维度。 3 降低计算成本
由于过滤式方法在特征选择阶段并不涉及对模型的训练其计算成本相对较低。 这对于资源受限或需要快速迭代的场景非常有利。 4 易解释性强
过滤式方法通常基于统计学或信息论的原理选择特征的依据较为清晰和可解释。 这有助于理解为什么选择了某些特征从而增加了对特征选择过程的可信度。 5 有效防止过拟合
过滤式特征选择可以在模型训练之前排除掉对预测目标贡献较小的特征从而降低模型过拟合的风险。 通过减少噪声和不相关信息过滤式方法有助于提高模型的泛化能力。 6 适用于高维数据
当面对高维数据集时过滤式特征选择是一个强有力的工具因为它能够快速识别和保留对目标变量最具影响力的特征减轻了维度灾难的影响。
总体而言过滤式特征选择在简化问题、降低计算复杂性、提高模型的解释性和防止过拟合等方面具有显著的优点使其成为机器学习中常用的特征选择策略之一。
三 方差选择法Variance Thresholding
方差选择法是过滤式特征选择方法中的一种常用技术用于评估特征的重要性。 它基于特征的方差来判断特征的变化程度认为方差较小的特征对目标变量的影响较小因此可以将这些特征过滤掉。 3.1 步骤
1 数据准备
首先准备包含特征和目标变量的数据集。 确保数据集经过清洗和预处理以排除缺失值、异常值等干扰因素。 2 计算特征的方差
对于每个特征计算其在数据集中的方差。 方差是衡量数据分布离散程度的一种度量方差较小表示数据点之间的差异较小而方差较大则表示数据点之间的差异较大。 3 设定阈值
根据实际需求设定一个方差的阈值。 这个阈值可以是根据领域知识或者经验来设定的也可以是通过交叉验证等技术来确定的。 4 特征选择
将方差小于阈值的特征过滤掉保留方差大于阈值的特征作为最终的特征子集。 方差小的特征意味着其取值变化不大可能缺乏足够的信息来对目标变量做出预测因此可以考虑将其过滤掉。 方差选择法适用于连续型特征对于离散型特征需要先进行编码转换。 虽然方差选择法简单易用但也存在一些局限性例如对特征之间的相关性不敏感可能会忽略掉某些重要的特征。 因此在使用时需要根据具体情况进行调整和综合考虑。
3.2 示例
import numpy as np
from sklearn.feature_selection import VarianceThreshold# 生成示例数据集
X np.array([[0, 2, 0, 3],[0, 1, 4, 3],[0, 1, 1, 3]])# 创建方差选择器对象设定方差阈值
selector VarianceThreshold(threshold0.6)# 拟合数据并进行特征选择
X_selected selector.fit_transform(X)# 查看选择后的特征
print(原始数据集\n, X)
print(经过方差选择后的数据集\n, X_selected)
print(选择的特征索引, selector.get_support(indicesTrue))
print(选择的特征的方差, selector.variances_) 这段代码首先导入了NumPy库和VarianceThreshold类然后创建了一个简单的数据集X。 接着创建了一个VarianceThreshold对象并将阈值设为0.6。然后使用fit_transform方法拟合数据并进行特征选择。 最后打印了原始数据集、经过特征选择后的数据集、选择的特征索引以及选择的特征的方差。 值得注意的是方差选择法是一种单变量特征选择方法它仅根据特征的方差来进行选择因此不考虑特征与目标变量之间的关系。 四 互信息Mutual Information
互信息Mutual Information是一种常用于过滤式特征选择的方法它用于衡量两个变量之间的相关性或依赖性。 在特征选择中互信息用于衡量特征与目标变量之间的相关性从而确定哪些特征对于预测目标变量是最有用的。 4.1 步骤
1 数据准备
首先准备包含特征和目标变量的数据集。 确保数据集经过清洗和预处理以排除缺失值、异常值等干扰因素。 2 计算互信息
对于每个特征计算其与目标变量之间的互信息。 互信息是一种衡量两个变量之间关联性的方法表示一个变量中包含的关于另一个变量的信息量。 通常使用以下公式计算两个随机变量X和Y之间的互信息 3 特征排序
根据计算得到的互信息值对特征进行排序将互信息值较大的特征排在前面。 互信息值越大表示特征与目标变量之间的相关性越强对于模型预测目标变量更有帮助。 4 选择特征
根据设定的阈值或者选择前N个特征的策略确定最终的特征子集。 通常情况下可以选择互信息值大于某个阈值的特征或者选择互信息值排名前几的特征作为最终的特征子集。 互信息法适用于连续型和离散型特征对于离散型特征需要使用离散化方法进行处理。 与方差选择法相比互信息法考虑了特征之间的非线性关系因此更适用于不同类型的数据集。 然而互信息法也可能受到样本数量的影响因此在使用时需要注意样本量的大小。
4.2 示例
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import mutual_info_classif
from sklearn.datasets import load_iris# 加载示例数据集
iris load_iris()
X, y iris.data, iris.target# 创建互信息选择器对象设定选择的特征数量
selector SelectKBest(mutual_info_classif, k2)# 拟合数据并进行特征选择
X_selected selector.fit_transform(X, y)# 查看选择后的特征
print(原始数据集的形状, X.shape)
print(经过互信息选择后的数据集的形状, X_selected.shape)
print(选择的特征索引, selector.get_support(indicesTrue)) 这段代码首先导入了SelectKBest类和mutual_info_classif函数以及load_iris函数来加载一个示例数据集。 然后创建了一个SelectKBest对象使用互信息函数mutual_info_classif作为评分函数并设定选择的特征数量为2。 接着使用fit_transform方法拟合数据并进行特征选择。 最后打印了原始数据集的形状、经过特征选择后的数据集的形状以及选择的特征索引。 互信息法是一种基于信息论的特征选择方法它可以衡量两个变量之间的信息共享程度从而找到与目标变量具有高互信息的特征。
五 卡方检验Chi-Square Test
过滤式特征选择方法中的卡方检验Chi-Square Test法是用于衡量分类变量之间关联性的一种统计方法。 在机器学习中卡方检验常用于评估特征与目标变量之间的独立性从而确定哪些特征对于分类任务是最为相关的。 5.1 步骤
1 数据准备
准备包含分类特征和目标变量的数据集。 确保数据集经过清洗和预处理以排除缺失值、异常值等干扰因素。 2 构建列联表Contingency Table
对于每一对分类特征和目标变量构建一个列联表。 列联表是一个二维表格展示了两个分类变量之间的频数分布。 3 计算期望频数Expected Frequencies
对于每个单元格计算其期望频数即在特征和目标变量独立的情况下该单元格的预期值。
4 计算卡方统计量
对于每个单元格计算卡方统计量Chi-Square Statistic
5 计算自由度
计算自由度自由度的计算为 ( df (m-1) \times (k-1) )其中m是特征的类别数k是目标变量的类别数。
6 确定显著性水平
选择显著性水平通常设定为0.05并根据卡方分布表查找临界值。 比较计算得到的卡方统计量与临界值以判断特征与目标变量之间是否存在显著性关联。 7 特征选择
根据卡方统计量的显著性水平选择特征。 通常情况下如果卡方统计量大于临界值则认为特征与目标变量之间存在显著性关联可以选择保留该特征。 卡方检验法主要适用于分类问题特别是当特征和目标变量都是分类变量时。 需要注意的是卡方检验法基于对独立性的假设因此在使用时需要注意其局限性特别是在特征之间存在非线性关系或者其他复杂关系的情况下。 5.2 示例
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
from sklearn.datasets import load_iris# 加载示例数据集
iris load_iris()
X, y iris.data, iris.target# 创建卡方选择器对象设定选择的特征数量
selector SelectKBest(chi2, k2)# 拟合数据并进行特征选择
X_selected selector.fit_transform(X, y)# 查看选择后的特征
print(原始数据集的形状, X.shape)
print(经过卡方检验选择后的数据集的形状, X_selected.shape)
print(选择的特征索引, selector.get_support(indicesTrue)) 这段代码首先导入了SelectKBest类和chi2函数以及load_iris函数来加载一个示例数据集。 然后创建了一个SelectKBest对象使用卡方检验函数chi2作为评分函数并设定选择的特征数量为2。 接着使用fit_transform方法拟合数据并进行特征选择。 最后打印了原始数据集的形状、经过特征选择后的数据集的形状以及选择的特征索引。 卡方检验法是一种用于衡量两个分类变量之间关联性的统计方法用于特征选择时可以帮助找到与目标变量之间显著关联的特征。
六 皮尔逊相关系数Pearson Correlation Coefficient
过滤式特征选择中的皮尔逊相关系数法是一种用于衡量连续型特征之间线性关系的方法。 它通过计算特征与目标变量之间的皮尔逊相关系数来评估特征与目标变量之间的线性相关性。 6.1 步骤
1 数据准备
准备包含连续型特征和目标变量的数据集。 确保数据集经过清洗和预处理以排除缺失值、异常值等干扰因素。 2 计算皮尔逊相关系数
对于每个特征计算其与目标变量之间的皮尔逊相关系数。 皮尔逊相关系数Pearson correlation coefficient是一个衡量两个变量之间线性关系强度和方向的统计量。 3 确定特征的重要性
根据计算得到的皮尔逊相关系数的绝对值大小确定特征与目标变量之间的线性关系强度。 绝对值越大表示关系越强正负号表示关系的方向正相关或负相关。 4 设定阈值
根据问题的具体情况可以设定一个相关系数的阈值。 超过该阈值的特征被认为与目标变量具有较强的线性关系。 5 特征选择
根据计算得到的皮尔逊相关系数选择与目标变量相关性较强的特征。 可以选择保留超过阈值的特征或者根据相关系数的大小排序选择前k个特征。 需要注意的是皮尔逊相关系数主要适用于线性关系的检测对于非线性关系的敏感度相对较低。 在存在非线性关系的情况下其他非线性关系的度量方法可能更为适用。此外相关系数是一种衡量变量之间关系的方法不一定能捕捉到所有与目标变量的复杂关系。 因此在使用过滤式特征选择方法时需谨慎考虑特征之间的实际关系和问题的特点。
6.2 示例
import numpy as np
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_regression# 生成示例数据集
np.random.seed(0)
X np.random.rand(100, 5) # 100个样本5个特征
y X[:, 0] 2 * X[:, 1] np.random.normal(0, 0.1, 100) # y与前两个特征相关# 创建皮尔逊相关系数选择器对象设定选择的特征数量
selector SelectKBest(f_regression, k2)# 拟合数据并进行特征选择
X_selected selector.fit_transform(X, y)# 查看选择后的特征
print(原始数据集的形状, X.shape)
print(经过皮尔逊相关系数选择后的数据集的形状, X_selected.shape)
print(选择的特征索引, selector.get_support(indicesTrue)) 这段代码首先导入了SelectKBest类和f_regression函数。 然后生成了一个简单的示例数据集X其中包含100个样本和5个特征目标变量y与前两个特征相关。 接着创建了一个SelectKBest对象使用f_regression函数作为评分函数并设定选择的特征数量为2。 然后使用fit_transform方法拟合数据并进行特征选择。 最后打印了原始数据集的形状、经过特征选择后的数据集的形状以及选择的特征索引。 皮尔逊相关系数法是一种用于衡量两个连续变量之间线性相关性的方法在特征选择中可以帮助找到与目标变量高度相关的特征。 七 信息增益Information Gain
信息增益法是一种常用的过滤式特征选择方法通常用于处理分类问题。 它通过计算特征与目标变量之间的信息增益来评估特征的重要性。 7.1 步骤
1 数据准备
准备包含特征和目标变量的标记数据集。 确保数据集已经经过清洗和预处理特征已经被编码为可用于计算信息增益的形式例如数值型特征可能需要进行离散化。 2 计算目标变量的初始熵
首先计算目标变量的初始熵即在未进行特征划分之前的不确定性度量。
3 计算每个特征的信息增益
对于每个特征计算其与目标变量之间的信息增益。 信息增益是特征对目标变量带来的不确定性减少程度。 其计算公式为
[ IG(X) H(Y) - H(Y|X) ]其中(H(Y)) 是目标变量的初始熵(H(Y|X)) 是在特征 (X) 条件下目标变量的条件熵表示在特征 (X) 已知的情况下目标变量的不确定性。 4 选择信息增益最大的特征
从所有特征中选择具有最大信息增益的特征作为最优特征。 这意味着该特征能够在最大程度上减少目标变量的不确定性。 5 重复步骤3和步骤4
可以选择重复计算信息增益并选择下一个最优特征。 这样可以建立一个特征选择的顺序可以选择特定数量的特征或直到满足某个条件为止。 6 特征选择
根据计算得到的信息增益选择具有最大信息增益的特征或按照一定的阈值选择重要性较高的特征。 这些特征被认为对于预测目标变量是最具有信息量的。 信息增益法是一种简单而直观的特征选择方法特别适用于处理分类问题并且对于离散型目标变量更为有效。然而它也有一些局限性例如对于连续型特征的处理可能不够优雅而且可能会忽略特征之间的相关性。
7.2 示例
import numpy as np
from sklearn.feature_selection import mutual_info_classif# 生成示例数据集
np.random.seed(0)
X np.random.rand(100, 5) # 100个样本5个特征
y np.random.randint(2, size100) # 二分类目标变量# 计算每个特征的信息增益
information_gains []
for feature_idx in range(X.shape[1]):# 计算特征与目标变量的互信息mutual_info mutual_info_classif(X[:, feature_idx].reshape(-1, 1), y)[0]# 计算信息增益在这个简化的例子中我们假设类别的熵为常数information_gain mutual_infoinformation_gains.append(information_gain)# 根据信息增益对特征进行排序
selected_feature_indices np.argsort(information_gains)[::-1][:2]# 查看选择后的特征
X_selected X[:, selected_feature_indices]
print(原始数据集的形状, X.shape)
print(经过信息增益选择后的数据集的形状, X_selected.shape)
print(选择的特征索引, selected_feature_indices) 这段代码首先导入了mutual_info_classif函数然后生成了一个简单的示例数据集。 接着对每个特征计算了其与目标变量的互信息然后将特征根据信息增益进行排序选择了排名前两的特征。 最后打印了原始数据集的形状、经过特征选择后的数据集的形状以及选择的特征索引。 请注意这只是一个简单的演示实际应用中可能需要更复杂的方法并且使用决策树等模型时特征选择往往是嵌入式的一部分。
八 各种方法的优缺点及适用场景
以下是几种常见的过滤式特征选择方法及其优缺点以及适用场景
8.1 方差选择法
优点 简单易实现仅需计算特征的方差即可。 适用于在特征方差较小的情况下快速识别并删除低方差特征可以减少数据维度。 缺点 只考虑了特征的方差忽略了特征与目标变量之间的关系。 对特征之间的相关性不敏感。 适用场景 当特征方差较小或者特征稀疏时可以考虑使用方差选择法。 8.2 互信息法
优点 考虑了特征与目标变量之间的非线性关系。 对于特征与目标变量之间的任何关系形式都是一种通用方法。 缺点 计算复杂度较高需要对每个特征进行计算因此在大规模数据集上可能效率较低。 在数据集较小的情况下可能过拟合。 适用场景 数据集规模较小且特征与目标变量之间的关系复杂时可以考虑使用互信息法。 8.3 卡方检验法
优点 适用于分类问题可以快速识别特征与目标变量之间的相关性。 对类别型的特征选择效果较好。 缺点 对于连续型特征不太适用。 对特征之间的相关性不敏感。 适用场景 在处理分类问题并且特征为类别型变量时可以考虑使用卡方检验法。 8.4 皮尔逊相关系数法
优点 能够有效衡量特征与目标变量之间的线性相关性。 简单易懂计算速度较快。 缺点 仅适用于线性关系的特征选择对于非线性关系效果较差。 对异常值敏感。 适用场景 当特征与目标变量之间存在线性关系并且数据集没有太多异常值时可以考虑使用皮尔逊相关系数法。 8.5 信息增益法
优点 适用于分类问题可以在决策树等树型模型中进行特征选择。 考虑了特征与目标变量之间的信息量。 缺点 通常需要使用决策树等模型来计算信息增益计算复杂度较高。 对连续型特征不太适用。 适用场景 在处理分类问题且希望使用决策树等树型模型时可以考虑使用信息增益法。 总结 特征选择在机器学习中扮演着至关重要的角色它可以提高模型的效率、降低过拟合风险并且在处理大规模数据集时可以减少计算成本。 本文介绍了过滤式特征选择的几种常见方法包括方差选择法、互信息、卡方检验、皮尔逊相关系数和信息增益。 通过详细讨论每种方法的步骤和示例读者可以更加深入地理解这些方法的原理和应用场景。 此外我们还分析了各种方法的优缺点帮助读者根据实际情况选择最合适的特征选择方法。 在实际应用中需要综合考虑数据集的特点、模型的要求以及计算资源等因素来选择最适合的特征选择方法从而提高模型的性能和泛化能力。 通过合理的特征选择我们可以更好地理解数据、提取数据的有效信息并建立更加精确和高效的机器学习模型。 这篇文章到这里就结束了 谢谢大家的阅读 如果觉得这篇博客对你有用的话别忘记三连哦。 我是甜美的江让我们我们下次再见