金泉网做网站找谁,重庆搜索引擎优化seo,门户网站个人可以做吗,微网站建设及微信推广方案ppt一、引言 特征选择在机器学习领域中扮演着至关重要的角色#xff0c;它能够从原始数据中选择最具信息量的特征#xff0c;提高模型性能、减少过拟合#xff0c;并加快模型训练和预测的速度。在大规模数据集和高维数据中#xff0c;特征选择尤为重要#xff0c;因为不必要的… 一、引言 特征选择在机器学习领域中扮演着至关重要的角色它能够从原始数据中选择最具信息量的特征提高模型性能、减少过拟合并加快模型训练和预测的速度。在大规模数据集和高维数据中特征选择尤为重要因为不必要的特征会增加计算复杂性并引入冗余信息。 Lasso回归是一种强有力的特征选择方法通过引入L1正则化来推动部分特征系数稀疏化。相比于其他方法Lasso回归具有良好的解释性和可解释性能够自动选择与目标变量相关的重要特征同时将不相关或冗余特征的系数置零。这使得Lasso回归成为特征选择和维度约简的首选方法。 本文旨在介绍Lasso回归在精确特征选择中的应用。首先我们将探讨特征选择的重要性包括如何提高模型性能和降低计算成本。接着我们将深入解析Lasso回归的原理和算法并说明其在特征选择中的优势。为了支撑我们的观点我们将引用相关文献提供的实证结果和案例分析。 二、Lasso回归简介 2.1 Lasso回归的基本原理 Lasso回归也称为最小绝对收缩和选择算子回归是一种线性回归方法。其基本原理是在普通最小二乘法的基础上引入L1正则化项通过最小化目标函数来实现模型的特征选择和系数稀疏化。 Lasso回归的目标函数如下所示 minimize ||Y - Xβ||^2 λ||β||₁ 其中Y是观测值向量X是特征矩阵β是待估计的回归系数向量λ是控制正则化强度的超参数。 L1正则化项λ||β||₁在目标函数中起到了关键作用。它引入了稀疏性即使得一些特征的系数被压缩为零从而实现了自动的特征选择。因此Lasso回归不仅可以进行预测还可以识别出对目标变量有重要影响的特征。 2.2 Lasso回归与普通最小二乘法区别 Lasso回归与普通最小二乘法之间存在着几个重要的区别。 首先Lasso回归通过引入L1正则化项使得部分特征的系数变为零。这种特性使得Lasso回归能够实现特征选择从而减少了模型的复杂度和噪声的影响。而普通最小二乘法并没有引入正则化项无法直接进行特征选择。 其次Lasso回归的估计结果更具有解释性。由于L1正则化的存在Lasso回归可以将不相关或冗余的特征系数置为零只保留与目标变量相关的重要特征。这样一来Lasso回归得到的模型更简洁、更易解释。而普通最小二乘法则会给出所有特征的系数估计值无法过滤掉不相关特征。 此外Lasso回归适用于高维数据集。在高维情况下特征的数量远大于样本的数量Lasso回归能够通过特征选择来缓解维度灾难的问题。而普通最小二乘法在高维数据集中容易出现过拟合的情况。 综上所述Lasso回归通过引入L1正则化项实现了特征选择和系数稀疏化与普通最小二乘法相比在模型解释性和适应高维数据等方面具有一定的优势。 三、特征选择的方法 3.1 过滤方法 过滤方法是一种常见的特征选择方法它通过在训练模型之前对特征进行筛选选择那些与目标变量相关性较高的特征。以下是几种常用的过滤方法 方差阈值方差阈值方法是通过计算特征在样本中的变化程度来进行特征选择。具体来说计算每个特征的方差并将方差低于某个阈值的特征排除。这种方法适用于对离散特征进行选择。 互信息互信息是衡量两个随机变量之间相互依赖程度的度量指标。在特征选择中可以计算每个特征与目标变量之间的互信息然后选择互信息高于某个阈值的特征。互信息方法适用于对离散或连续变量之间的关系进行选择。 相关性系数相关性系数是衡量两个变量之间线性相关程度的指标。常用的相关性系数包括皮尔逊相关系数和斯皮尔曼等级相关系数。通过计算每个特征与目标变量之间的相关性系数可以选择与目标变量具有较高相关性的特征。相关性系数方法适用于对连续变量之间的关系进行选择。 这些过滤方法都是基于统计学原理和度量指标来进行特征选择的它们简单直观计算效率高并且可以帮助筛选出与目标变量相关性较强的特征。但是过滤方法忽略了特征之间的相互作用和非线性关系可能会无法捕捉到一些重要的特征。因此在实际应用中可以结合其他特征选择方法如包裹方法和嵌入方法以获得更准确和鲁棒的特征选择结果。 3.2 包装方法 包装方法是一种更为复杂和耗时的特征选择方法它通过使用某个学习模型来评估特征的重要性并根据重要性进行特征选择。以下是两种常见的包装方法 递归特征消除Recursive Feature Elimination, RFE递归特征消除是一种迭代的特征选择方法。它通过反复训练一个学习模型并在每次迭代中排除对目标变量影响较小的特征。具体步骤如下首先训练一个学习模型根据特征的重要性进行排序。然后删除最不重要的特征重新训练模型并继续迭代直到达到指定的特征数目或达到停止条件。递归特征消除适用于任何学习模型并且可以通过交叉验证来选择最佳的特征子集。 基于遗传算法的特征选择基于遗传算法的特征选择是一种优化算法通过模拟生物进化过程来搜索最佳特征子集。这种方法将特征作为个体通过交叉、变异和选择等操作来生成新的特征子集并利用评估函数如模型准确率来评估特征子集的质量。遗传算法根据评估函数的反馈进行迭代优化直到找到最佳的特征子集为止。基于遗传算法的特征选择可以全局搜索特征空间并且具有较强的鲁棒性和适应性。 包装方法相对于过滤方法更为精确能够考虑特征之间的相互作用和非线性关系。然而由于包装方法需要多次训练模型计算复杂度较高并且对于大规模数据集可能不太适用。因此在应用包装方法时需要权衡计算资源和模型性能的平衡。同时选择合适的学习模型和评估函数也是非常重要的以确保得到准确和稳定的特征选择结果。 3.3 嵌入方法 嵌入方法是一种将特征选择与模型训练过程相结合的方法它通过在学习模型中嵌入特征选择来选择最佳的特征子集。以下是一个常见的嵌入方法 基于Lasso回归的特征选择LassoLeast Absolute Shrinkage and Selection Operator回归是一种线性回归的扩展它利用L1正则化项对模型的系数进行约束从而实现特征选择。具体来说Lasso回归通过最小化目标函数其中包括了平方损失和L1正则化项。在优化过程中Lasso回归会使得部分特征的系数变为0从而实现了特征的稀疏性剔除了对目标变量影响较小的特征。通过调节正则化参数可以控制特征选择的程度。基于Lasso回归的特征选择适用于线性模型它能够同时进行特征选择和模型训练并且能够处理高维数据。 嵌入方法将特征选择与模型训练过程融合在一起能够自动选择与目标变量相关性较强的特征。相比于过滤方法和包装方法嵌入方法更加灵活能够考虑到特征之间的相互作用。然而嵌入方法通常需要更多的计算资源和时间并且对于非线性模型可能效果不如包装方法或过滤方法。因此在选择嵌入方法时需要根据具体问题和数据集的特点进行权衡和选择合适的方法。 四、Lasso的特征选择流程 「数据预处理」 收集并整理原始数据集。 处理缺失值、异常值和离群点。 对特征进行标准化或归一化确保它们具有相似的尺度。 「划分训练集和测试集」 将数据集划分为训练集和测试集通常采用交叉验证的方式。 「搭建Lasso回归模型」 使用训练集拟合Lasso回归模型。 在拟合过程中通过调节正则化参数来控制特征的稀疏性。可以使用交叉验证或网格搜索等方法找到最佳的正则化参数。 「特征系数选择」 根据训练好的Lasso回归模型获取所有特征的系数。 对系数进行排序按照绝对值从大到小排序。 「特征选择」 设置一个阈值保留系数大于阈值的特征。 可以根据先验知识和实际需求来选择阈值也可以通过交叉验证确定最佳的阈值。 「模型评估」 使用保留的特征重新训练Lasso回归模型。 使用测试集评估模型的性能比较选择特征和原始全特征的模型性能。 五、实例演示 5.1 数据集载入 library(survival)str(gbsg) 结果展示 str(gbsg)data.frame: 686 obs. of 10 variables: $ age : int 49 55 56 45 65 48 48 37 67 45 ... $ meno : int 0 1 1 0 1 0 0 0 1 0 ... $ size : int 18 20 40 25 30 52 21 20 20 30 ... $ grade : int 2 3 3 3 2 2 3 2 2 2 ... $ nodes : int 2 16 3 1 5 11 8 9 1 1 ... $ pgr : int 0 0 0 0 0 0 0 0 0 0 ... $ er : int 0 0 0 4 36 0 0 0 0 0 ... $ hormon : int 0 0 0 0 1 0 0 1 1 0 ... $ rfstime: int 1838 403 1603 177 1855 842 293 42 564 1093 ... $ status : Factor w/ 2 levels 0,1: 1 2 1 1 1 2 2 1 2 2 ...age患者年龄meno更年期状态0表示未更年期1表示已更年期size肿瘤大小grade肿瘤分级nodes受累淋巴结数量pgr孕激素受体表达水平er雌激素受体表达水平hormon激素治疗0表示否1表示是rfstime复发或死亡时间以天为单位status事件状态0表示被截尾1表示事件发生 5.2 Lasso和特征选择 「数据预处理」 colSums(is.na(gbsg))set.seed(1234)gbsg$status - as.factor(gbsg$status)# 拆分训练集和测试集trainIndex - sample(1:nrow(gbsg), 0.8 * nrow(gbsg))train - gbsg[trainIndex,]test - gbsg[-trainIndex,] 「搭建Lasso回归模型」 # 安装并加载所需的R包install.packages(glmnet)library(glmnet)x - as.matrix(train[, c(-1,-11)]) y - as.numeric(train$status)# 计算标准化前的均值和标准差colMeans(x)apply(x,2,sd)# 标准化x scale(x,center T,scale T)# 构建模型la_md - glmnet(x, y, lambda0.1, familygaussian, intercept F, alpha1) glmnet函数是用于构建弹性网络模型的函数具体解释如下 x自变量矩阵包含训练数据的特征。每一行代表一个样本每一列代表一个特征。 y因变量向量包含训练数据的响应变量。 lambda正则化参数控制模型的复杂度。较大的lambda值会导致更多的系数为0从而减小模型的复杂度和过拟合的风险。 family指定了回归模型的误差分布。对于高斯分布正态分布的响应变量可以选择gaussian。还有其他可选的分布类型如二项分布binomial和泊松分布poisson等。 intercept是否包括截距项。设置为TRUE表示包括截距项设置为FALSE表示不包括截距项。 alpha弹性网络的混合参数介于0和1之间。当alpha为1时模型为Lasso回归当alpha为0时模型为岭回归。 关于如何设置lambda和alpha以及family的选择这需要根据具体问题和数据来进行调整。一般来说 lambda可以通过交叉验证法cross-validation来选择合适的lambda值。函数cv.glmnet可以帮助我们进行交叉验证选择最优的lambda值。 alpha如果你对注意力集中在少数变量上倾向于使用Lasso回归那么可以选择较大的alpha值。如果你更希望模型保留更多有用的变量可以选择较小的alpha值。 family根据响应变量的性质和概率分布选择合适的误差分布类型。例如如果响应变量是二分类变量可以选择二项分布binomial如果响应变量是计数数据可以选择泊松分布poisson。多项分布multinomial适用于多分类问题。 需要注意的是这只是一些一般性的指导原则。具体的选择还要考虑数据的特点和分析目标。 「Lasso筛选变量动态过程图」 # Lasso筛选变量动态过程图la.md - glmnet(x, y, familygaussian, intercept F, alpha1) # plotplot(la.md,xvar lambda, label F) 从图中我们可以看出随着lambda增大各特征相应的也被压缩得更小而当lambda达到一定值以后一部分不重要的特征将被压缩为0代表该变量已被剔除出模型图中从左至右不断下降的曲线如同被不断增大的lambda一步一步压缩直到压缩为0。 「对于特征的系数大小」 正的系数表示该特征与响应变量之间存在正相关关系。当特征的取值增加时响应变量的期望值也会增加。 负的系数表示该特征与响应变量之间存在负相关关系。当特征的取值增加时响应变量的期望值会减少。 「对于特征的非零系数个数」 当某个特征的非零系数个数为正数时表示该特征在模型中被选择为重要特征并且对预测结果有显著影响。 当某个特征的非零系数个数为零时表示该特征在模型中被排除或被忽略对预测结果没有显著影响。 需要明确的是特征的系数大小和非零系数个数仅反映特征与响应变量之间的关系并不能直接推断特征的实际影响或取值。具体特征对应的实际取值以及与响应变量之间的关系还需要根据具体问题和数据背景进行进一步分析和解释。 「计算出合适的lambda值」 可以通过交叉验证法cross-validation来选择合适的lambda值。函数cv.glmnet可以帮助我们进行交叉验证选择最优的lambda值. mod_cv - cv.glmnet(xx, yy, familygaussian, # 默认nfolds 10 intercept F, alpha1)plot(mod_cv) # 最小误差对应的lambda和最小误差print(paste(mod_cv$lambda.min, log(mod_cv$lambda.min)))print(paste(mod_cv$lambda.1se, log(mod_cv$lambda.1se)))# 这里我们以lambda.min为最优 λbest_lambda - mod_cv$lambda.minbest_lambda 结果显示 print(paste(mod_cv$lambda.min, log(mod_cv$lambda.min)))[1] 0.093983735301881 -2.36463354038672 print(paste(mod_cv$lambda.1se, log(mod_cv$lambda.1se)))[1] 0.217114618245629 -1.52732987020707 通过交叉验证我们可以选择平均误差最小的那个λ即mod_cv 也 可 以 选 择 平 均 误 差 在 一 个 标 准 差 以 内 的 最 大 的 λ 即 lambda.1se。从图中可以看出λ在-3和-2之间最低大概是-2.3左右的样子误差最小。然后从打印出的最佳lambda是0.09398374。 「特征选择」 best_model - glmnet(x, y, alpha 1, lambda best_lambda)coef(best_model) 结果展示 10 x 1 sparse Matrix of class dgCMatrix s0(Intercept) 1.4489051age . meno . size . grade . nodes . pgr . er . hormon . rfstime -0.1232434 如变量没有显示系数即lasso回归收缩系数为零。这意味着它完全被排除在模型之外因为它的影响力不够。系数非0的变量即为我们筛选的重要特征。 「使用最终模型进行预测」 x_test - as.matrix(test[, c(-1,-11)]) y_test - as.numeric(test$status)# 标准化x_test scale(x_test,center T,scale T)#使用 lasso 回归模型预测y_predicted - predict(best_model, s best_lambda, newx x_test)sst - sum((y_test - mean(y_test))^2)sse - sum((y_predicted - y_test)^2)rsq - 1 - sse/sstrsq 结果展示 rsq[1] 0.1607887 rsq即是R² 当R²接近0时模型无法解释响应变量的变异性拟合程度较差意味着模型对数据的解释能力很弱。 当R²接近0.5时模型能够解释部分响应变量的变异性但还有很大一部分变异不能被模型解释拟合程度一般。 R²大于0.6或者0.7可以作为一个相对较好的指标在医学领域但还需要综合考虑其他因素来评估模型的优劣 当R²为1时表示该预测模型完全解释了响应变量的变异性即模型能够完美拟合数据 这里解释一下为什么这次的R²只有0.16远远低于0.5更是低于医学可接受的值我使用的数据是二分类数据即只有0和1是离散型变量不是连续型的数值。所以使用R²来评价是不合理的。所以这个偏差是合理的。 六、总结 6.1 适用于连续性因子变量 Lasso回归是一种用于特征选择和预测建模的线性回归方法通常用于连续型的数值响应变量。对于因子类型的离散响应变量Lasso回归通常不直接适用。 对于因子类型的响应变量通常需要使用适合离散型数据的回归模型例如逻辑回归Logistic Regression或多项式回归Multinomial Regression。这些模型可以应用于分类问题或多类别预测问题。 逻辑回归Logistic Regression用于二分类问题将因子型的响应变量映射为概率值表示某个类别的概率。多项式回归Multinomial Regression则用于多分类问题将因子型的响应变量映射为多个类别的概率分布。 需要注意的是无论是使用Lasso回归还是其他回归方法对于因子类型的响应变量都需要进行适当的编码和转换将因子变量映射为数值型变量以便模型的计算和分析。 6.2 如何使二分类0和1如何使用Lasso回归 如果因子类型的响应变量只有两个取值0和1可以将问题看作是二分类问题。在这种情况下Lasso回归可以被用于选择与响应变量相关性最强的特征并建立一个预测模型。 在使用Lasso回归时需要对因子型的响应变量进行适当的编码。一种常见的编码方法是使用虚拟变量Dummy Variable编码。将因子型的响应变量转化为两个虚拟变量如0表示一个类别1表示另一个类别然后使用Lasso回归进行建模。 虽然Lasso回归原本是用于处理连续型的数值响应变量但通过将因子型的响应变量进行适当的编码我们可以将其扩展到处理二分类问题。这是因为Lasso回归对特征的选择性质仍然适用。 需要注意的是在使用Lasso回归进行二分类建模时我们通常使用的评估指标是准确率、精确率、召回率或F1分数等而非均方误差Mean Squared Error等用于度量连续型响应变量的指标。 这里是不是解释了刚才我们计算出的R²的偏低情况。如果想了解如何使用Lasso回归如何对离散型的因子变量进行特征筛选欢迎关注和私信我我们一起讨论学习。原创不易如果觉得写的还行的话请留下您的赞和再看谢谢 *「未经许可不得以任何方式复制或抄袭本篇文章之部分或全部内容。版权所有侵权必究。」