一个域名能同时做2个网站吗,西安市住房和城乡建设局官方网站,公司注册如何网上核名,wordpress可视化编辑在那里1.原理
AdaBoost是Adaptive Boosting#xff08;自适应增强#xff09;的缩写#xff0c;它的自适应在于#xff1a;被前一个基本分类器误分类的样本的权值会增大#xff0c;而正确分类的样本的权值会减小#xff0c;并再次用来训练下一个基本分类器。同时#xff0c;在…1.原理
AdaBoost是Adaptive Boosting自适应增强的缩写它的自适应在于被前一个基本分类器误分类的样本的权值会增大而正确分类的样本的权值会减小并再次用来训练下一个基本分类器。同时在每一轮迭代中加入一个新的弱分类器直到达到某个预定的足够小的错误率或预先指定的最大迭代次数再确定最后的强分类器。
1.算法步骤
首先是初始化训练数据的权值分布D1。假设有N个训练样本数据则每一个训练样本最开始时都会被赋予相同的权值w1 1/N。 训练弱分类器Ci。具体训练过程如果某个训练样本点被弱分类器Ci准确地分类那么再构造下一个训练集中它对应的权值要减小相反如果某个训练样本点被错误分类那么它的权值就应该增大。权值的更新过的样本被用于训练下一个弱分类器整个过程如此迭代下去。
最后将各个训练得到的弱分类器组合成一个强分类器。各个弱分类器的训练过程结束后加大分类误差率小的弱分类器的权重使其在最终的分类函数中起着较大的决定作用而降低分类误差率大的弱分类器的权重使其在最终的分类函数中起着较小的决定作用。 换而言之误差率低的弱分类器在最终分类器中占的权重较大否则较小。
2.算法过程
(1).首先初始化训练集的权值分布。每个训练样本最开始都被赋予相同的权值 w i 1 N w_{i}\frac{1}{N} wiN1这样样本集的权值初始分布为 D 1 ( i ) ( w 1 , w 2 , ⋯ w N ) ( 1 N , 1 N , ⋯ 1 N ) D_{1}(i)(w_{1},w_{2},\cdots w_{N})\left(\frac{1}{N},\frac{1}{N},\cdots\frac{1}{N}\right) D1(i)(w1,w2,⋯wN)(N1,N1,⋯N1) (2).进行迭代 t 1 , 2 , ⋯ , T t1,2,\cdots,T t1,2,⋯,T
(a).选取一个当前误差率最低的分类器h作为第t个基分类器H_t并计算弱分类器h_t在训练集上的分类误差率 e t ∑ i 1 m w t , i I ( h t ( x i ) ≠ f ( x i ) ) e_{t}\sum_{i1}^{m}w_{t,i}I\big(h_{t}(x_{i})\neq f(x_{i})\big) eti1∑mwt,iI(ht(xi)f(xi)) (b).计算该分类器在最终分类器中所占的权重 ∂ t 1 2 ln 1 − e t e t \partial_t\frac{1}{2}\ln\frac{1-e_t}{e_t} ∂t21lnet1−et ©.更新样本的权重分布 D t 1 D t e x p ( − ∂ t f ( x ) h t ( x ) ) Z t D_{t1}\frac{D_texp(-\partial_tf(x)h_t(x))}{Z_t} Dt1ZtDtexp(−∂tf(x)ht(x)) 其中: Z t ∑ i 1 m w t , i e x p ( − ∂ t f ( x i ) h t ( x i ) ) Z_t\sum_{i1}^mw_{t,i}exp\bigl(-\partial_tf(x_i)h_t(x_i)\bigr) Zti1∑mwt,iexp(−∂tf(xi)ht(xi))
(3).最后按照弱分类器权重\partial_t组成各个弱分类器 f ( x ) ∑ i 1 T ∂ i H i ( x ) \mathrm{f(x)\sum_{i1}^T\partial_iH_i(x)} f(x)i1∑T∂iHi(x) 通过符号函数sign最终得到一个强分类器 H f i n a l s i g n ( f ( x ) ) s i g n ( ∑ i 1 T ∂ i H i ( x ) ) H_{final}sign\big(\mathrm{f(x)}\big)sign\bigg(\sum_{\mathrm{i}1}^{\mathrm{T}}\partial_i\operatorname{H_i(x)}\bigg) Hfinalsign(f(x))sign(i1∑T∂iHi(x))
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostClassifier# 加载鸢尾花数据集
iris load_iris()
X iris.data
y iris.target# 划分训练集和测试集
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)# 创建AdaBoost分类器
clf AdaBoostClassifier(n_estimators50, learning_rate1.0)# 训练模型
clf.fit(X_train, y_train)# 预测测试集
y_pred clf.predict(X_test)# 打印预测结果
print(y_pred)我们使用了鸢尾花数据集这是一个常用的多类别分类数据集。我们首先加载数据然后划分为训练集和测试集。然后我们创建一个AdaBoost分类器并使用训练集对其进行训练。最后我们使用训练好的模型对测试集进行预测并打印出预测结果。
AdaBoostClassifier的参数n_estimators表示弱学习器的最大数量learning_rate表示学习率这两个参数都可以根据需要进行调整。在scikit-learn的AdaBoostClassifier中默认的弱学习器是一个最大深度为1的决策树桩。你也可以通过base_estimator参数来指定其他类型的弱学习器。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn import svm# 加载鸢尾花数据集
iris load_iris()
X iris.data
y iris.target# 划分训练集和测试集
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)# 创建朴素贝叶斯分类器作为弱学习器的AdaBoost分类器
clf_nb AdaBoostClassifier(base_estimatorGaussianNB(), n_estimators50, learning_rate1.0)
clf_nb.fit(X_train, y_train)
y_pred_nb clf_nb.predict(X_test)
print(y_pred_nb)# 创建SVM作为弱学习器的AdaBoost分类器
clf_svm AdaBoostClassifier(base_estimatorsvm.SVC(probabilityTrue, kernellinear), n_estimators50, learning_rate1.0)
clf_svm.fit(X_train, y_train)
y_pred_svm clf_svm.predict(X_test)
print(y_pred_svm)我们首先创建了一个使用朴素贝叶斯分类器作为弱学习器的AdaBoost分类器然后创建了一个使用SVM作为弱学习器的AdaBoost分类器。注意对于SVM我们需要设置probabilityTrue因为AdaBoost需要使用类别概率。