集成学习-Majority Voting

认识

集成学习(Ensemble Methods), 首先是一种思想, 而非某种模型, 是一种 "群体决策" 的思想, 即对某一特定问题, 用多个模型来进行训练.

像常见的单个模型, KNN, LR, 逻辑回归, 贝叶斯, SVM, 决策树, LDA, PCA ... 这些都是单个模型来训练可能并不能很直观说哪个最好, 但有种直觉, 多个模型来来整, 肯定由于单个模型, 这就是集成学习的思想.

如何 "管理" 多个模型?

  • bagging:
  • boosting:

主流集成学习方法

  • Majority Voting
  • Bagging
  • Random Forests
  • Stacking

Majority Voting

嗯, 我就翻译为, "民主决策"吧.

以分类问题为例, 就是将样本 X , 训练出不同的模型, 然后进行测试, 进行投票, 得票最多的模型则 被被认为是最好.

输入: X

训练: m1 = knn_tarin(X), m2 = svm(X), m3=kernel_svm(X), m4 = LDA(X)....

输出: m1, m2, m3...\(m_n\)

....

测试:

输入: 各每个模型 输入测试数据 X_test

输出: m1(X_test), m2(X_test)....

然后投票voting 取众数 mode 即可:

\(y = mode(m1_(X_test), m2(X_test)...)\)

证明voting 是可行的

假设有 n 个独立的分类模型, 每一个的错误率都为 \(\epsilon\). (独立就意味着误差是不相关的).

然后假设这里是一个二元分类场景, 而每个模型, 又非常地烂, 也不针对谁, 都是一些, 错误率比随机猜要好一点点.

\(\forall _{\epsilon _i} \in {\epsilon _1}, \epsilon _2, ... \epsilon_n, \ \epsilon_i <0.5\)

即模型错误率低于 0.5. 于是可以计算一波概率, 假设有n个模型, 其中对于 k 个模型,都是错误的概率(最终错误的概率):

\(P(k) = \begin {pmatrix} n\\k \end {pmatrix} \epsilon ^k (1-\epsilon)^{n-k} \ 其中 k > 0.5n\)

最终错误率:

\(\epsilon =\sum \limits _{k}^n \begin {pmatrix} n\\k \end {pmatrix} \epsilon ^k (1-\epsilon)^{n-k}\)

栗子: 假设一共有 11 个模型, 每个模型的误差是 0.25 , 则误差为:

\(\epsilon = \sum \limits _{k=6}^{11} \begin {pmatrix} n\\k \end {pmatrix} 0.25^k (1-0.25)^{11-k} = 0.034\)

这样就比较直观看出, 多个模型肯定是由于单个模型的哦.

soft voting

针对模型, 可以输出一个 分类标签出现的 概率值, 比如像 逻辑回归. 输出不仅仅是最终分类, 还会输出其概率有多大.

\(\hat y = argmax_j \sum \limits _{i=1}^n w_iP_{i, j}\)

\(P_{i,j}\) 表示第 i 个分类模型, 输出类别为 i 的概率

\(w_i\) 表示第 i 个分类模型的权重, 如都一样则: \(w_i = \frac {1}{n}\)

其实就是给类别, "附加上了该结果 出现的预测概率当然,也可以给不同模型的权重值.

case

假设样本是 X, 问题是二分类 (0, 1), 然后有训练好3个模型 \(m_1, m_2, m_3\), 这三个模型, 我假设再给一个主观经验的权重, 比如 分别是 0.2, 0.4, 0.6

现用测试集测试, 3个模型分别得到输出如下:

\(m_1(X) = [0.9, 0.1] \\ m_2(X) = [0.8, 0.2] \\ m_3(X) = [0.4,0.6]\)

则:

\(P(y=1|X) = 0.2*0.9 + 0.2*0.8 + 0.6*0.4 = 0.58\)

\(P(y=0|X) = 0.2*0.1 + 0.2*0.2 + 0.6*0.6 = 0.42\)

关于投票, 还是很好理解的吧.

猜你喜欢

转载自www.cnblogs.com/chenjieyouge/p/12003448.html