1. 数据准备与十折交叉验证基础在开始建模之前我们需要先准备好实验数据。这里我们使用经典的mg数据集它包含1个因变量和6个自变量可以从台湾大学林智仁教授维护的libsvm数据集网站获取。这个数据集经常被用于回归问题的基准测试。数据处理的关键步骤包括下载原始数据后用Excel进行分列处理按空格分隔删除多余的x:字符添加变量名行后保存为CSV格式在R中使用read.csv()函数导入十折交叉验证是评估模型泛化能力的重要方法。它的核心思想是将数据集随机分成10份轮流用其中9份训练模型1份测试模型重复10次后取平均误差。这样做的好处是每个数据点都会被用于测试一次评估结果更加可靠。在R中实现十折交叉验证的关键代码如下# 定义交叉验证划分函数 CV - function(n, Z10, seed888){ z - rep(1:Z, ceiling(n/Z))[1:n] set.seed(seed) z - sample(z, n) mm - list() for (i in 1:Z) mm[[i]] - (1:n)[zi] return(mm) } # 执行交叉验证 w - read.csv(mg.csv) n - nrow(w); Z - 10; mm - CV(n, Z); D - 1 MSE - rep(0, Z) for(i in 1:Z){ m - mm[[i]] M - mean((w[m,D]-mean(w[m,D]))^2) a - lm(y~., w[-m,]) # 这里可以替换为其他模型 MSE[i] - mean((w[m,D]-predict(a,w[m,]))^2)/M } mean(MSE)2. 决策树模型及其变体2.1 单棵决策树决策树是最直观的机器学习算法之一它通过递归地将数据分割成更纯的子集来进行预测。在R中我们可以使用rpart包来构建决策树library(rpart) library(rpart.plot) # 构建决策树 tree_model - rpart(y~., dataw) rpart.plot(tree_model, type2)决策树的优势在于模型可解释性强我们可以直接看到每个节点的分裂规则。但单棵决策树容易过拟合泛化能力有限。在mg数据集上单棵决策树的十折交叉验证NMSE约为0.36。2.2 Bagging回归Bagging(Bootstrap Aggregating)是一种通过构建多个模型并取平均来降低方差的技术。对于决策树而言Bagging的具体做法是对训练集进行Bootstrap抽样有放回抽样对每个抽样样本构建一棵决策树对所有树的预测结果取平均在R中可以使用ipred包实现library(ipred) MSE - rep(0, Z) set.seed(1010) for(i in 1:Z){ m - mm[[i]] M - mean((w[m,D]-mean(w[m,D]))^2) a - bagging(y~., dataw[-m,]) MSE[i] - mean((w[m,D]-predict(a,w[m,]))^2)/M } mean(MSE) # 约0.316Bagging通过模型平均有效降低了方差使NMSE从单棵树的0.36降低到0.316。2.3 随机森林回归随机森林是Bagging的扩展在构建每棵树时不仅对样本进行抽样还对特征进行抽样。这种双重随机性进一步增强了模型的多样性通常能获得更好的性能。library(randomForest) MSE - rep(0, Z) set.seed(1010) for(i in 1:Z){ m - mm[[i]] M - mean((w[m,D]-mean(w[m,D]))^2) a - randomForest(y~., dataw[-m,]) MSE[i] - mean((w[m,D]-predict(a,w[m,]))^2)/M } mean(MSE) # 约0.279随机森林的NMSE进一步降低到0.279是当前表现最好的模型。我们还可以查看变量的重要性rf_model - randomForest(y~., dataw, importanceTRUE) importance(rf_model)3. Boosting方法与模型对比3.1 Boosting回归原理Boosting是另一种集成学习方法与Bagging不同它是通过序列化地构建模型每个新模型都专注于修正前一个模型的错误。Boosting的核心思想是初始时所有样本权重相同每次迭代后增加预测错误样本的权重最终预测是所有弱学习器的加权和在R中可以使用mboost包实现library(mboost) MSE - rep(0, Z) set.seed(1010) for(i in 1:Z){ m - mm[[i]] M - mean((w[m,D]-mean(w[m,D]))^2) a - mboost(y~btree(x1)btree(x2)btree(x3) btree(x4)btree(x5)btree(x6), dataw[-m,]) MSE[i] - mean((w[m,D]-predict(a,w[m,]))^2)/M } mean(MSE) # 约0.3413.2 模型性能对比让我们将各模型的NMSE结果进行对比模型NMSE相对提升线性回归0.41基准单棵决策树0.36211.7%Boosting0.34116.8%Bagging0.31622.9%随机森林0.27931.9%从结果可以看出集成学习方法相比单模型有明显提升其中随机森林表现最佳。但要注意的是这些结果都是在默认参数下得到的如果进行参数调优各模型的性能可能还会有提升空间。4. 支持向量机回归(SVR)实现4.1 SVR基本原理支持向量机回归(SVR)是支持向量机在回归问题上的应用。它的核心思想是找到一个超平面使得大部分数据点落在以该超平面为中心的ε带内同时保证超平面尽可能平坦。SVR的主要特点包括通过核函数处理非线性关系对异常值鲁棒性强适合高维数据4.2 R语言实现在R中有多个包可以实现SVR下面以e1071包为例library(e1071) MSE - rep(0, Z) set.seed(1010) for(i in 1:Z){ m - mm[[i]] M - mean((w[m,D]-mean(w[m,D]))^2) a - svm(y~., dataw[-m,], kernelradial) MSE[i] - mean((w[m,D]-predict(a,w[m,]))^2)/M } mean(MSE) # 约0.29SVR的表现(NMSE≈0.29)介于Bagging和随机森林之间。我们可以尝试不同的核函数和参数组合来优化性能# 参数调优 tune_result - tune(svm, y~., dataw, kernelradial, rangeslist(costc(0.1,1,10,100), gammac(0.1,0.01,0.001))) best_model - tune_result$best.model5. 模型优化与选择建议在实际项目中我们还需要考虑以下几个方面来进一步提升模型性能特征工程尝试不同的特征组合、多项式特征或交互项参数调优使用网格搜索或随机搜索寻找最优参数模型集成将不同模型的预测结果进行加权平均异常值处理检测并处理可能的异常值对于mg数据集随机森林表现最好但这并不意味着它在所有情况下都是最佳选择。模型选择应考虑数据规模随机森林适合中小型数据对于大数据集计算成本较高特征数量当特征非常多时随机森林的特征抽样机制更有优势可解释性要求如果需要解释模型单棵决策树可能更合适最后提醒一点交叉验证的结果会受到数据划分随机性的影响建议多次运行取平均来获得更稳定的评估结果。