96SEO 2026-02-19 08:47 0
保序回归、多项式回归、多输出回归、多输出K近邻回归、决策树回归、多输出决策树回归、AdaBoost回归、梯度提升决策树回归、人工神经网络、…前言

本文将介绍回归模型算法并总结了一些常用的除线性回归模型之外的模型其中包括一些单模型及集成学习器。
保序回归、多项式回归、多输出回归、多输出K近邻回归、决策树回归、多输出决策树回归、AdaBoost回归、梯度提升决策树回归、人工神经网络、随机森林回归、多输出随机森林回归、XGBoost回归。
需要面试或者需要总体了解/复习机器学习回归模型的小伙伴可以通读下本文理论总结加代码实操有助于理解模型。
保序回归或单调回归是一种将自由形式的直线拟合到一系列观测值上的技术这样拟合的直线在所有地方都是非递减(或非递增)的并且尽可能靠近观测值。
如果预测输入与训练中的特征值完全匹配则返回相应标签。
如果一个特征值对应多个预测标签值则返回其中一个具体是哪一个未指定。
如果预测输入比训练中的特征值都高或者都低则相应返回最高特征值或者最低特征值对应标签。
如果一个特征值对应多个预测标签值则相应返回最高值或者最低值。
如果预测输入落入两个特征值之间则预测将会是一个分段线性函数其值由两个最近的特征值的预测值计算得到。
如果一个特征值对应多个预测标签值则使用上述两种情况中的处理方式解决。
IsotonicRegressionirIsotonicRegression()
红色散点图是原始数据X-y关系图绿色线为保序回归拟合后的数据X-y_ir关系图。
这里以可视化的形式表现了保序回归的理论规则。
plt.plot(X,y_ir,g.-,markersize12)
多项式回归(PolynomialFeatures)是一种用多项式函数作为自变量的非线性方程的回归方法。
将数据转换为多项式。
多项式回归是一般线性回归模型的特殊情况。
它对于描述曲线关系很有用。
曲线关系可以通过平方或设置预测变量的高阶项来实现。
LinearRegressionpolyPolynomialFeatures(degree3)
poly_xpoly.fit_transform(X)regressorLinearRegression()
regressor.fit(poly_x,Y)plt.scatter(X,Y,colorred)
plt.plot(X,regressor.predict(poly.fit_transform(X)),colorblue)
以原始数据绘制X-Y红色散点图并绘制蓝色的、经过多项式拟合后再进行线性回归模型拟合的直线图。
Input[(scale,StandardScaler()),(polynomial,
PolynomialFeatures(include_biasFalse)),(model,LinearRegression())]
一维多项式类用于封装多项式上的自然操作以便上述操作可以在代码中采用惯用形式。
如何理解呢看看下面几个例子。
fnp.poly1d([2,3,5],rTrue,variablez)
拟合多项式。
返回一个系数p的向量以最小化平方误差的顺序degdeg-1…0。
numpy.polynomial.polynomial.Polynomial.fit
print(preds_one[:3])[11.59609048
model.predict(X_test.reshape(-1,
比较一阶、二阶及三阶多项式拟合多线性回归模型的效果影响。
由图可看出三条线基本重合且RMSE相差不大。
axes[0].legend(locbest);绘制类似学习曲线
因低阶多项式效果相差并不明显因此增大多项式阶数并以残差平方和为y轴看模型拟合效果由图可以看出随着多项式阶数越来越高模型出现严重的过拟合训练集残差平方和降低而测试集却在上涨。
np.sqrt(mse(y_test,model(X_test)))results.append((complexity,
pd.DataFrame.from_records(results,
columnscolumns,indexComplexity)
多输出回归为每个样本分配一组目标值。
这可以认为是预测每一个样本的多个属性比如说一个具体地点的风的方向和大小。
可以被添加到任何回归器中。
这个策略包括对每个目标拟合一个回归器。
因为每一个目标可以被一个回归器精确地表示通过检查对应的回归器可以获取关于目标的信息。
因为
对于每一个目标可以训练出一个回归器所以它无法利用目标之间的相关度信息。
sklearn.tree.DecisionTreeClassifier
sklearn.tree.ExtraTreeClassifier
sklearn.ensemble.ExtraTreesClassifier
sklearn.neighbors.KNeighborsClassifier
sklearn.neighbors.RadiusNeighborsClassifier
sklearn.ensemble.RandomForestClassifier
多输出K近邻回归可以不使用MultiOutputRegressor作为外包装器直接使用KNeighborsRegressor便可以实现多输出回归。
决策树是一种树状结构她的每一个叶子结点对应着一个分类非叶子结点对应着在某个属性上的划分根据样本在该属性上的不同取值降气划分成若干个子集。
数模型通过递归切割的方法来寻找最佳分类标准进而最终形成规则。
CATA树对回归树用平方误差最小化准则进行特征选择生成二叉树。
在训练数据集所在的空间中递归地将每个空间区域划分为两个子区域并决定每个子区域上的输出值生产二叉树。
print(metrics.mean_absolute_error(y_test,
print(metrics.mean_squared_error(y_test,
print(np.sqrt(metrics.mean_squared_error(y_test,
{}.format(dt_fit.score(X_train,
多输出回归是根据输入预测两个或多个数字输出。
在多输出回归中通常输出依赖于输入并且彼此依赖。
这意味着输出经常不是彼此独立的可能需要一个模型来预测两个输出在一起或每个输出取决于其他输出。
然后对其预测进⾏平均或多数表决原则来决定集成评估器的结果。
装袋法的代表模型就是随机森林。
提升法(Boosting)中基评估器是相关的是按顺序⼀⼀构建的。
其核⼼思想是结合弱评估器的⼒量⼀次次对难以评估的样本进⾏预测从⽽构成⼀个强评估器。
提升法的代表模型Adaboost和梯度提升树GBDT。
通过提高那些被前一轮基学习器错误分类的样本的权值降低那些被正确分类的样本的权值来改变训练样本分布。
并对所有基学习器采用加权结合增大分类误差小的基学习器的权值减少分类误差率大的基学习器的权值。
理论上的AdaBoost可以使用任何算法作为基学习器但一般来说使用最广泛的AdaBoost的弱学习器是决策树和神经网络。
AdaBoost的核心原则是在反复修改的数据版本上拟合一系列弱学习者(即比随机猜测略好一点的模型如小决策树)。
他们所有的预测然后通过加权多数投票(或总和)合并产生最终的预测。
最初这些权重都被设置为所以第一步仅仅是在原始数据上训练一个能力较弱的学习器。
对于每一次连续迭代样本权值被单独修改学习算法被重新应用到重新加权的数据。
在给定的步骤中那些被前一步引入的增强模型错误预测的训练例子的权重增加而那些被正确预测的训练例子的权重减少。
随着迭代的进行难以预测的例子受到越来越大的影响。
因此每一个随后的弱学习器都被迫将注意力集中在前一个学习器错过的例子上。
能在学习过程中不断减少训练误差即在训练数据集上的训练误差率。
且误差率是以指数数率下降的。
AdaBoostClassifier(n_estimators180,
0.18888889,0.15,0.26666667,0.39444444])
Tree)是一种迭代的决策树算法该算法由多棵决策树组成所有树的结论累加起来做最终答案。
它在被提出之初就和SVM一起被认为是泛化能力较强的算法。
提升树是迭代多棵回归树来共同决策。
当采用平方误差损失函数时每一棵回归树学习的是之前所有树的结论和残差拟合得到一个当前的残差回归树残差的意义如公式残差
提升树利用加法模型和前向分步算法实现学习的优化过程。
当损失函数时平方损失和指数损失函数时每一步的优化很简单如平方损失函数学习残差回归树。
简单解释每一次的计算是为了减少上一次的残差GBDT在残差减少负梯度的方向上建立一个新的模型。
我们利用平方误差来表示损失函数其中每一棵回归树学习的是之前所有树的结论和残差
拟合得到一个当前的残差回归树。
提升树即是整个迭代过程生成的回归树的累加。
GBDT需要将多棵树的得分累加得到最终的预测得分且每一次迭代都在现有树的基础上增加一棵树去拟合前面树的预测结果与真实值之间的残差。
采用向前分布算法先确定初始提升树然后每一次提升都是靠上次的预测结果与训练数据中标签值作为新的训练数据进行重新训练利用损失函数的负梯度来拟合本轮损失函数的近似值进而拟合一个CART回归树。
对于梯度提升回归树来说每个样本的预测结果可以表示为所有树上的结果的加权求和。
Shrinkage即在每一轮迭代获取最终学习器的时候按照一定的步长进行更新。
利用来构建Cart回归树的时候GBDT分裂会选取使得误差下降最多如果cart树采用的是均方差作为损失那么就是最小均方差的特征进行分裂如果这棵树不能拟合好那么就要通过负梯度计算出新的残差向量来拟合新的Cart回归树
可使用一些健壮的损失函数对异常值的鲁棒性较强比如Huber损失函数。
GradientBoostingRegressor(max_depth4,
tf.estimator.DNNRegressor(feature_columnsfeature_columns,hidden_units[300,
100],dropout0.3,optimizertf.train.ProximalAdagradOptimizer(learning_rate0.01,l1_regularization_strength0.01,
l2_regularization_strength0.01))
estimator_imp.evaluate(eval_input,stepsNone)
随机森林采用决策树作为弱分类器在bagging的样本随机采样基础上⼜加上了特征的随机选择。
对预测输出进行结合时分类任务——简单投票法回归任务——简单平均法
为集成中的个体学习器应尽可能相互独立尽可能具有较大差异以得到泛化能力强的集成。
对训练样本进行采样得到不同的数据集。
如果采样出的每个子集都完全不同每个学习器只用到一小部分训练数据甚至不足以进行有效学习。
Bagging能不经修改的用于多分类、回归等任务。
而Adaboost只适用二分类任务有
从所有特征中随机选择k个特征对选出的样本利用这些特征建立决策树(一般是CART方法)。
重复以上两步m次生成m棵决策树形成随机森林其中生成的决策树不剪枝。
决策树随机选择样本并随机选择特征模型具有很好的抗噪能力性能稳定。
能够处理高维度数据并且不用做特征选择能够展现出哪些变量比较重要。
pd.DataFrame(scaler.transform(X_train),
pd.DataFrame(scaler.transform(X_test),
pd.DataFrame(pca.transform(X_train))
pd.DataFrame(pca.transform(X_train_scaled))
RandomForestRegressor(n_estimators500,
predicted_test)print(Out-of-bag
XGBoost是boosting算法的其中一种。
Boosting算法的思想是将许多弱分类器集成在一起形成一个强分类器。
因为XGBoost是一种提升树模型所以它是将许多树模型集成在一起形成一个很强的分类器。
而所用到的树模型则是CART回归树模型。
节点分裂之前计算所有可能的特征及它们所有可能的切分点分裂后的平方误差结构分数之差。
如果所有的平方误差均相同或减小值小于某一阈值或者节点包含的样本数小于某一阈值则分裂停止否则选择使平方误差最小的特征和切分点作为最优特征和最优切分点进行分裂并生成两个子节点。
对于每一个新生成的子节点递归执行步骤2和步骤3直到满足停止条件。
不断地添加树不断地进行特征分裂来生长一棵树每次添加一个树其实是学习一个新函数去拟合上次预测的残差
当我们训练完成得到k棵树我们要预测一个样本的分数其实就是根据这个样本的特征在每棵树中会落到对应的一个叶子节点每个叶子节点就对应一个分数
这个叶子权重就是所有在这个叶子节点上的样本在这一棵树上的回归取值用或者来表示其中表示第棵决策树
第一项是衡量我们的偏差模型越不准确第一项就会越大。
第二项是衡量我们的方差模型越复杂模型的学习就会越具体到不同数据集上的表现就会差异巨大方差就会越大。
scaler.fit_transform(X_train.astype(np.float64))
scaler.fit_transform(X_test.astype(np.float64))
[tf.feature_column.numeric_column(x,
shapeX_train_scaled.shape[1:])]
tf.estimator.DNNRegressor(feature_columnsfeature_columns,hidden_units[300,
tf.estimator.inputs.numpy_input_fn(x{x:
X_train_scaled},yy_train,batch_size50,shuffleFalse,num_epochsNone)
tf.estimator.inputs.numpy_input_fn(x{x:
shuffleFalse,batch_sizeX_test_scaled.shape[0],num_epochs1)
estimator.evaluate(eval_input,stepsNone)
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback