集成学习(Ensemble Methods), 首先是一种思想, 而非某种模型, 是一种 "群体决策" 的思想, 即对某一特定问题, 用多个模型来进行训练.
像常见的单个模型, KNN, LR, 逻辑回归, 贝叶斯, SVM, 决策树, LDA, PCA ... 这些都是单个模型来训练可能并不能很直观说哪个最好, 但有种直觉, 多个模型来来整, 肯定由于单个模型, 这就是集成学习的思想.
如何 "管理" 多个模型?
嗯, 我就翻译为, "民主决策"吧.
以分类问题为例, 就是将样本 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)...)\)
假设有 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\)
这样就比较直观看出, 多个模型肯定是由于单个模型的哦.
针对模型, 可以输出一个 分类标签出现的 概率值, 比如像 逻辑回归. 输出不仅仅是最终分类, 还会输出其概率有多大.
\(\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\)
关于投票, 还是很好理解的吧.
原文:https://www.cnblogs.com/chenjieyouge/p/12003448.html