高级集成学习技巧

Examined ensemble methods

  • Averaging (or blending)
  • Weighted averaging
  • Conditional averaging
  • Bagging
  • Boosting
  • Stacking
  • StackNet

Averaging ensemble methods

举个例子,假设我们有一个名为age的变量,就像年龄一样,我们试着预测它。我们有两个模型:

  • 低于50,模型效果更好
    model1.png

  • 高于50,模型效果更好
    model2.png

那么如果我们试图结合它们将会发生什么呢?

Averaging(or blending)

  • (model1 + model2) / 2
    model12.png

\(R^2\)上升到0.95,较之前有所改善。但该模型并没有比单模型做的好的地方更好,尽管如此,它平均表现更好。也许可能会有更好的组合呢?来试试加权平均

Weighted averaging

  • (model1 x 0.7 + model 2 x 0.3)
    model_weight.png

看起来没有之前的好

Conditional averaging

  • 各取好的部分
    model_best.png

理想情况下,我们希望得到类似的结果

Bagging

Why Bagging

建模中有两个主要误差来源

  • 1.由于偏差而存在误差(underfitting)
  • 2.由于方差而存在误差(overfitting)

通过略微不同的模型,确保预测不会有读取非常高的方差。这通常使它更具普遍性。

Parameters that control bagging?

  • Changing the seed
  • Row(Sub) sampling or Bootstrapping
  • Shuffling
  • Column(Sub) sampling
  • Model-specific parameters
  • Number of models (or bags)
  • (Optionally) parallelism

Examples of bagging

bagging_code.png

Boosting

Boosting是对每个模型构建的模型进行加权平均的一种形式,顺序地考虑以前的模型性能。

Weight based boosting

weight_based.png

假设我们有一个表格数据集,有四个特征。 我们称它们为x0,x1,x2和x3,我们希望使用这些功能来预测目标变量y。
我们将预测值称为pred,这些预测有一定的误差。我们可以计算这些绝对误差,|y - pred|。我们可以基于此生成一个新列或向量,在这里我们创建一个权重列,使用1加上绝对误差。当然有不同的方法来计算这个权重,现在我们只是以此为例。

所有接下来要做的是用这些特征去拟合新的模型,但每次也要增加这个权重列。这就是按顺序添加模型的方法。

Weight based boosting parameters
  • Learning rate (or shrinkage or eta)
  • 每个模型只相信一点点:predictionN = pred0*eta + pred1*eta + ... + predN*eta
  • Number of estimators
  • estimators扩大一倍,eta减小一倍
  • Input model - can be anything that accepts weights
  • Sub boosting type:
  • AdaBoost-Good implementation in sklearn(python)
  • LogitBoost-Good implementation in Weka(Java)

Residual based boosting [&]

我们使用同样的数据集做相同的事。预测出pred后
residual_pred.png

接下来会计算误差
residual_error.png

将error作为新的y得到新的预测new_pred
residual_new_pred.png

以Rownum=1为例:

最终预测=0.75 + 0.20 = 0.95更接近于1

这种方法很有效,可以很好的减小误差。

Residual based boosting parameters
  • Learning rate (or shrinkage or eta)
  • predictionN = pred0 + pred1*eta + ... + predN*eta
  • 前面的例子,如果eta为0.1,则Prediction=0.75 + 0.2*(0.1) = 0.77
  • Number of estimators
  • Row (sub)sampling
  • Column (sub)sampling
  • Input model - better be trees.
  • Sub boosting type:
  • Full gradient based
  • Dart
Residual based favourite implementations
  • Xgboost
  • Lightgbm
  • H2O's GBM
  • Catboost
  • Sklearn's GBM

Stacking

Methodology

  • Wolpert in 1992 introduced stacking. It involves:
    1. Splitting the train set into two disjoint sets.
    1. Train several base learners on the first part.
    1. Make predictions with the base learners on the second (validation) part.

具体步骤

假设有A,B,C三个数据集,其中A,B的目标变量y已知。
stacking_data.png

然后

  • 算法0拟合A,预测B和C,然后保存pred0到B1,C1
  • 算法1拟合A,预测B和C,然后保存pred1到B1,C1
  • 算法2拟合A,预测B和C,然后保存pred2到B1,C1
    stacking_data2.png

  • 算法3拟合B1,预测C1,得到最终结果preds3

Stacking example

from sklearn.ensemble import RandomForestRegressor
from sklearn.linear_model import LinearRegression
import numpy as np
from sklearn.model_selection import train_test_split
train = '' # your training set
y = ''     # your target variable
# split train data in 2 part, training and valdiation.
training, valid, ytraining, yvalid = train_test_split(train, y, test_size=0.5)
# specify models
model1 = RandomForestRegressor()
model2 = LinearRegression()
#fit models
model1.fit(training, ytraining)
model2.fit(trainging, ytraining)
# make predictions for validation
preds1 = model1.predict(valid)
preds2 = model2.predict(valid)
# make predictions for test data
test_preds1 = model1.predict(test)
test_preds2 = model2.predict(test)
# From a new dataset for valid and test via stacking the predictions
stacked_predictions = np.colum_stack((preds1, preds2))
stacked_test_predictions = np.column_stack((test_preds1, test_preds2))
# specify meta model
meta_model = LinearRegression()
meta_model.fit(stacked_predictions, yvalid)
# make predictions on the stacked predictions of the test data
final_predictions = meta_model.predict(stacked_test_predictions)

Stacking(past) example

stacking_past.png

可以看到,它与我们使用Conditional averaging的结果非常近似。只是在50附件做的不够好,这是有道理的,因为模型没有见到目标变量,无法准确识别出50这个缺口。所以它只是尝试根据模型的输入来确定。

Things to be mindful of

  • With time sensitive data - respect time
  • 如果你的数据带有时间元素,你需要指定你的stacking,以便尊重时间。
  • Diversity as important as performance
  • 单一模型表现很重要,但模型的多样性也非常重要。当模型是坏的或弱的情况,你不需太担心,stacking实际上可以从每个预测中提取到精华,得到好的结果。因此,你真正需要关注的是,我正在制作的模型能给我带来哪些信息,即使它通常很弱。
  • Diversity may come from:
  • Different algorithms
  • Different input features
  • Performance plateauing after N models
  • Meta model is normally modest

StackNet

https://github.com/kaz-Anova/StackNet

Ensembling Tips and Tricks

\(1^{st}\) level tips

  • Diversity based on algorithms:
  • 2-3 gradient boosted trees (lightgbm, xgboost, H2O, catboost)
  • 2-3 Neural nets (keras, pytorch)
  • 1-2 ExtraTrees/RandomForest (sklearn)
  • 1-2 linear models as in logistic/ridge regression, linear svm (sklearn)
  • 1-2 knn models (sklearn)
  • 1 Factorization machine (libfm)
  • 1 svm with nonlinear kernel(like RBF) if size/memory allows (sklearn)
  • Diversity based on input data:
  • Categorical features: One hot, label encoding, target encoding, likelihood encoding, frequency or counts
  • Numerical features: outliers, binning, derivatives, percentiles, scaling
  • Interactions: col1*/+-col2, groupby, unsupervised

\(2^{st}\) level tips

  • Simpler (or shallower) Algorithms:
  • gradient boosted trees with small depth(like 2 or 3)
  • Linear models with high regularization
  • Extra Trees (just don't make them too big)
  • Shallow networks (as in 1 hidden layer, with not that many hidden neurons)
  • knn with BrayCurtis Distance
  • Brute forcing a search for best linear weights based on cv

  • Feature engineering:
  • pairwise differences between meta features
  • row-wise statistics like averages or stds
  • Standard feature selection techniques
  • For every 7.5 models in previous level we add 1 in meta (经验)
  • Be mindful to target leakage

Additional materials

wechat.jpg

转载于:https://www.cnblogs.com/ishero/p/11136376.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: CMOS模拟集成电路设计学习笔记 CMOS模拟集成电路设计学习是电子工程领域中的重要一环。CMOS(互补金属氧化物半导体)技术在现代集成电路设计中起着至关重要的作用。在学习CMOS模拟集成电路设计过程中,我对以下几个方面有所收获。 首先,电路的基本理论知识是学习CMOS模拟集成电路设计的基础。了解电路设计中的电压、电流、电阻、电容等基本概念,掌握基本的电路分析方法和技巧,对于有效地进行CMOS模拟集成电路设计非常重要。 其次,掌握CMOS技术的原理和特点。CMOS技术是使用N型和P型MOS管并排组成的电路结构,相比于其他技术,CMOS技术具有功耗低、抗干扰能力强等优势。了解CMOS技术的工作原理和特点,能够更好地应用于模拟集成电路的设计和优化过程中。 再次,学习射极耦合放大器(CAS)的设计和优化方法。CAS是模拟电路设计中常用的基本模块,具有放大增益高、抗干扰能力强等特点。通过学习CAS的设计和优化方法,能够更好地理解和应用于CMOS模拟集成电路设计中。 此外,了解电流镜、共源共排模式放大器、差分放大器、反馈电路等常见的CMOS模拟集成电路结构和设计技巧,对于深入理解CMOS模拟集成电路设计原理和方法非常有帮助。 最后,实践是学习CMOS模拟集成电路设计的重要环节。通过自己动手设计具体的电路实例,理解并解决实际问题,能够增加对理论知识的应用和理解。 总之,学习CMOS模拟集成电路设计需要掌握电路基本知识、了解CMOS技术原理和特点、学习常见的电路结构和设计技巧,并进行实践应用。通过不断学习和实践,我相信在CMOS模拟集成电路设计领域中会有更大的进步。 ### 回答2: cmos模拟集成电路设计是现代电子领域的重要研究方向之一。在学习过程中,我了解到cmos模拟集成电路设计的基本原理和方法,以及在实际应用中的一些注意事项。 首先,cmos模拟集成电路是一种使用cmos(互补金属氧化物半导体)技术制造的集成电路,其中的晶体管由n型和p型金属氧化物半导体场效应晶体管(NMOS和PMOS)组成。cmos模拟集成电路设计主要涉及到电流源、放大器、运算放大器、滤波器等模块的设计。 在设计过程中,要考虑电路的性能指标,如增益、带宽、噪声等。同时,为了提高电路的稳定性和可靠性,需要注意电路中的电源抑制、温度补偿、布线规划等方面的问题。 另外,cmos模拟集成电路设计还需要掌握一些基本的设计工具和方法。如Spice仿真工具的使用,可以通过仿真验证设计的正确性和性能指标。还有一些常用的设计技巧,如工作在互补模式、差分放大器、共模反馈电路等,可以有效提高电路的性能。 在实际应用中,cmos模拟集成电路设计广泛应用于各个领域。例如,用于通信系统中的放大器、滤波器等电路设计,用于传感器中的信号处理电路设计等。因此,掌握cmos模拟集成电路设计的知识和技能对于从事电子工程的相关人员来说是非常重要的。 总之,cmos模拟集成电路设计学习笔记包括了基本原理和方法,设计工具和技巧,以及实际应用等方面的内容。通过学习和掌握这些知识和技能,可以提高我们在cmos模拟集成电路设计方面的能力和水平。 ### 回答3: CMOS模拟集成电路设计学习笔记是我在学习过程中记录的一本笔记,总结了我对CMOS模拟集成电路设计的理解和经验。 首先,CMOS模拟集成电路是一种重要的集成电路设计技术,它利用CMOS工艺制造出的器件来实现各种模拟电路功能。学习CMOS模拟集成电路设计,首先需要了解CMOS工艺的基本原理和特点。CMOS工艺是一种使用N型细长沟道和P型细长沟道场效应管组成的半导体工艺,它具有电压驱动强、功耗低、噪声小等优点。此外,还需要学习CMOS工艺的制造工艺流程和工艺参数的选择。 在设计CMOS模拟集成电路时,首先需要进行电路的建模与分析。我学习了基本的电路理论与分析方法,如放大电路、逻辑电路、反馈电路等,并学会了使用理想运放进行电路近似分析。此外,还学习了CMOS器件的模型和特性,如MOSFET的输出特性曲线、小信号模型等。通过电路建模与分析,可以更好地理解电路的工作原理和设计要素。 然后,学习了CMOS模拟电路的常见设计技术和方法。其中,包括源随器的设计与优化、偏置电路设计、放大电路设计、运算放大器设计等。在设计过程中,我学会了使用EDA工具进行电路仿真和验证,以及对电路进行性能指标的评估。通过反复实践和调试,我逐渐掌握了设计方法和技巧。 最后,我还学习了一些高级的CMOS模拟集成电路设计技术,如电压参考电路设计、数据转换电路设计、低功耗设计等。这些技术使得我能够设计更加复杂和高性能的CMOS模拟集成电路,提高了我的设计能力和水平。 通过CMOS模拟集成电路设计学习笔记的记录和总结,我不仅巩固了自己的知识和理解,还积累了更多的设计经验。这本笔记对于我今后的工作和学习都具有重要的参考价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值