集成学习
所谓的集成学习,举个栗子来说,假如我们需要解决一个分类问题,我们不仅仅通过例如KNN这样的算法来进行解决,我们可以让多种算法参与分类预测的过程,例如下图:
再举个栗子来说,假如我们5个人准备去吃饭,在面临选择店铺时,假如有4个人都觉得A店的食物物美价廉,我们就会选择A店作为我们最终的吃饭的店铺,这就是生活中的集成思维的栗子。
scikit-learn中的集成分类代码:
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
X,y = datasets.make_moons(n_samples=500,noise=0.3,random_state=42)
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=42)
# sklearn中的集成分类器
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
voting_cif = VotingClassifier(estimators=[
('log_cif',LogisticRegression()),
('svc',SVC()),
('dt_clf',DecisionTreeClassifier())
],voting='hard')
voting_cif.fit(X_train,y_train)
voting_cif.score(X_test,y_test) # 结果为0.897
分类
根据上面的代码我们可知道,最终的集成学习方式我们大体上可以归纳为这么几种,
①hard voting classifier 根据少数服从多数的形式定预测结果
②soft voting classifier 根据得出结果的概率的平均值来定预测结果
soft的使用:
voting_cif = VotingClassifier(estimators=[
('log_cif',LogisticRegression()),
('svc',SVC()),
('dt_clf',DecisionTreeClassifier())
],voting='hard')
voting_cif.fit(X_train,y_train)
voting_cif.score(X_test,y_test) # 结果为0.912
其中:SVC中参数probability=true表示返回样本为各个类别的概率
抽样方式
为了提高准确率,我们需要更多的子模型参与进来,可分为两种方式,一种为Bagging(放回取样),另一种方式为Pasting(不放回取样)。
但是在Bagging中会出现有37%的数据永远取不到,我们可以直接使用这部分数据作为最终的验证数据集,这样便省去了train_test_split的过程。