来源:投稿 作者:小灰灰
编辑:学姐
目的是:多个模型来解决同一个问题就叫集成学习,个体差异,而且多样性。
按照个体生成的方式可以分成两大类:
第一个是序列化的方法(Sequential method)(一个个体的生成与前一个有着或或少的关系)是boosting。
adabost(非常精确,非常简单,理论基础深厚)
第二个是并行化的方法(Parallel method)(所有的个体都可以同时来做bagging)
Bootstrap Aggregating(缩写为Bagging) ,名字来自成语“pull up by your own bootstraps”,意思是依靠你自己的资源,称为自助法,它是一种有放回的抽样方法。
还有一种划分方法是:
Boosting和Bagging通常都是使用同一种基学习器(base learner),因此我们一般称之为同质集成方法。Stacking通常都是基于多个不同的基学习器做的集成,因此我们称之为异质集成方法。
使用集成学习方法,可以提高准确率。
模拟不同分类器的集成效果,每个分类器的准确率只有51%(只比随机猜好一点),但是集成后的效果有显著提升,如果用1000个分类器,最终准确率可达75%。如果用10000个分类器,最终准确率高达97%
集成学习方法有投票Voting,Bagging,Adaboost
Voting
首先我们使用sklearn自带的make_moons数据集。
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
from sklearn.datasets import make_moons
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
X,y = make_moons(n_samples=7000,noise=0.1)
接下来数据集分割
X_train, X_test, y_train, y_test = train_test_split(X, y , test_size=0.25, random_state=42)
我们进行了三个基本的基分类器。
-
逻辑回归
-
决策树
-
SVM
lr = LogisticRegression()
dt = DecisionTreeClassifier()
svm = SVC()
定义硬投票分类器:
voting = VotingClassifier(
estimators=[('lr',lr),('rf',dt),('svc',svm)],
voting='hard'#还有soft
)
可以看到三个基分类器LogisticRegression = 0.8822857142857143,DecisionTreeClassifier = 0.9977142857142857,SVC = 1.0,三个集成起来,VotingClassifier = 0.9994285714285714。
定义软投票分类器 :
voting = VotingClassifier(
estimators=[('lr',lr),('rf',dt),('svc',svm)],
voting='soft'
)
Bagging—随机森林
Bagging是一种框架算法,以随机森林(RDF)算法为代表, 采用的是随机有放回的选择训练数据然后构造分类器,最后组合。
从原始样本集中使用Bootstraping方法随机抽取n个训练样本,共进行k轮抽取,得到k个训练集。(k个训练集之间相互独立,元素可以有重复)
对于k个训练集,我们训练k个模型(这k个模型可以根据具体问题而定,比如决策树,knn等)
对于分类问题:由投票表决产生分类结果;对于回归问题:由k个模型预测结果的均值作为最后预测结果。(所有模型的重要性相同)
随机森林怎么与深度学习结合:
基于LBF方法的人脸对齐,出自Face Alignment at3000 FPS via Regressing Local Binary Features,源自于CVPR2014 ,由于该方法提取的是局部二值特征(LBF),论文作者的LBF fast达到了3000fps的速度,该算法的核心工作主要有两部分,总体上采用了随机森林和全局线性回归相结合的方法,相对于使用卷积神经的深度学习方法,LBF采用的算法是传统的机器学习方法。
通过在特征点附近随机选择点做残差来学习LBF特征,每一个特征点都会学到由好多随机树组成的随机森林,因此,一个特征点就得用一个随机森林生成的0,1特征向量来表示,将所有的特征点的随机森林都连接到一起,生成一个全局特征,后续过程就可以使用该全局特征做全局线性回归了。
这里面的分类模型要一样,如果是决策树那么组合在一起的时候就是随机森林。
from sklearn.ensemble import VotingClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import BaggingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
import numpy as np
我们使用load_iris()鸢尾花数据
iris = load_iris()
X = iris.data
y = iris.target
设置基分类SVM,抽取了500个样本,进行有放回抽样。
bag_clf = BaggingClassifier(
SVC(),
n_estimators=500, max_samples=1.0, bootstrap=True, n_jobs=-1
# ,oob_score=True
)
设置基分类决策树,抽取了500个样本
Sklearn也提供了直接实现随机森林的API
关注下方【学姐带你玩AI】🚀🚀🚀
回复“机器学习”领取必读书籍PDF+免费课件
码字不易,欢迎大家点赞评论收藏!