机器学习“傻瓜式”理解(17)集成学习

集成学习

所谓的集成学习,举个栗子来说,假如我们需要解决一个分类问题,我们不仅仅通过例如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的过程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章