集成学习--sklearn

集成算法

投票法

1.少数服从多数
2.多模型一致(硬投票)
3.更高把握(置信度)原则,以最高执行度的模型预测结果为准
4.把握程度汇总进行投票(软投票)在这里插入图片描述

基于多个优化模型的投票分类器sklearn.ensemble.VotingClassifier

在这里插入图片描述
在这里插入图片描述

from sklearn.ensemble import VotingClassifier # 导入投票分类器
from sklearn.datasets import load_iris # 导入训练数据集

iris=load_iris()
构建若干基础模型
# 构建若干基础模型
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC

clf1=LogisticRegression()
clf2=GaussianNB()
clf3=SVC(kernel='rbf')
建立投票分类器(hard)
#实例化
vote_clf=VotingClassifier(estimators=[('lr',clf1),('GNB',clf2),('SVM',clf3)],voting='hard')


# 训练投票分类器
vote_clf.fit(iris.data,iris.target)

# 预测
vote_clf.predict(iris.data)

### 建立投票分类器(soft)
建立投票分类器(soft)

clf1=LogisticRegression()
clf2=GaussianNB()
clf3=SVC(kernel=‘rbf’,probability=True)

vote_clf2=VotingClassifier(estimators=[(‘lr’,clf1),(‘GNB’,clf2),(‘SVM’,clf3)],voting=‘soft’) #实例化
vote_clf2=vote_clf2.fit(iris.data,iris.target)# 训练
vote_clf2.predict(iris.data)# 预测

预测输出概率值
vote_clf2.predict_proba(iris.data)

array([[9.86641908e-01, 1.06874777e-02, 2.67061395e-03],
[9.80580511e-01, 1.64122717e-02, 3.00721706e-03],
[9.88225368e-01, 9.17685191e-03, 2.59777978e-03],
[9.81921847e-01, 1.49389403e-02, 3.13921237e-03],
。。。。。。。
例如,第一行,0.9866最大,所以为第一类

硬投票不能查看概率值

投票分类器与网格搜索的联合使用
from sklearn.model_selection import GridSearchCV # 导入网格搜索
from sklearn.ensemble import VotingClassifier# 导入投票分类器
构建若干基础模型
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC

clf1=LogisticRegression()
clf2=GaussianNB()
clf3=SVC(probability=True)
#probability默认为false ,所以设置为true ,方便后续查看概率值

probability默认为false ,所以设置为true ,方便后续查看概率值

 #实例化
vote_clf2=VotingClassifier(estimators=[('lr',clf1),('GNB',clf2),('SVM',clf3)],voting='soft')
# 设置参数搜索范围
params={'lr__C':[0.1,1,10],
       'SVM__C':[0.01,0.1,1,10],
       'SVM_kernel':['linear','rbf']}

注意:SVM__C,lr__C’这里是两个横线,小心报错
params={‘lr__C’:[0.1,1,10],‘SVM__C’:[0.01,0.1,1,10], ‘SVM_kernel’:[‘linear’,‘rbf’]}一共会搜索 24次:342

#在网格搜索中直接调用投票分类器
grid=GridSearchCV(estimator=vote_clf,param_grid=params,cv=8)

estimator:给出分类器类别
param_grim:需要将参数名称设定为“模型标签——参数标签”格式

from sklearn.datasets import load_iris
iris=load_iris()

grid=grid.fit(iris.data,iris.target)# 训练网格搜索模型grid

print(grid.get_params())#打印网格搜索出的最优参数值
print(grid.get_params())# 查看所有参数
#查看网格搜索结果
import pandas as pd
pd.DataFrame(grid.cv_results_)
print(grid.best_estimator_)
print(grid.get_params()) #查看grid模型所以的参数值
grid.predict_proba(iris.data)#利用网格搜索模型进行预测
grid.predict(iris.data)


Bagging

在这里插入图片描述
bagging 是booststrap有放回抽样

from sklearn.datasets import load_iris
from sklearn.ensemble import BaggingClassifier
#,max_features=0.5
iris=load_iris()
bagging=BaggingClassifier(n_estimators=20,max_samples=0.5,oob_score=True)
bagging.fit(iris.data,iris.target)

# 每个分类器抽取的样本号
bagging.estimators_samples_

# 每个分类器抽取的特征
bagging.estimators_features_

# 查看每个分类器
bagging.estimators_


# 每个基本分类器都可以被单独使用
tree1=bagging.estimators_[0].fit(iris.data,iris.target)
tree1.predict(iris.data)

# 查看袋外oob测试结果
bagging.oob_score_

# 估计各数据点属于每个类别的决定函数值(取几个值中最大的)
bagging.oob_decision_function_

# 集成模型用于预测
bagging.predict(iris.data)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

回归BaggingRegressor

# 导入波士顿房价数据集
from sklearn.datasets import load_boston
boston=load_boston()
#导入bagging回归
from sklearn.ensemble import BaggingRegressor

bagging=BaggingRegressor()

from sklearn.linear_model import LinearRegression

#实例化
bagging_reg=BaggingRegressor(LinearRegression(),n_estimators=20,max_samples=0.5,max_features=0.5,oob_score=True)

bagging_reg.fit(boston.data,boston.target)

bagging_reg.oob_score_

print(len(bagging_reg.oob_prediction_),bagging_reg.oob_prediction_)# 样本数量,预测值

bagging_reg.predict(boston.data)# 集成模型用于预测

在这里插入图片描述

在这里插入图片描述

随机森林分类

from sklearn.ensemble import RandomForestClassifier

from sklearn.datasets import load_iris

iris=load_iris()

rfc=RandomForestClassifier(n_estimators=300,oob_score=True)

rfc.fit(iris.data,iris.target)

rfc.estimators_#基分类器

rfc.estimators_[0].predict(iris.data)# 利用第一个基分类器进行预测

rfc.estimators_[0].feature_importances_# 由第一个分类器计算的特征重要性
#可以看见第一个基分类器的结果与随机森铃的结果类似,都是前两个小,后两个大

rfc.feature_importances_# 查看由随机森铃模型计算的特征重要性,可以用来降维,因为前面两个值特别小

rfc.oob_score_# 袋外oob测试结果

rfc.predict(iris.data)

rfc.oob_decision_function_# 查随机森林模型对各数据点的决定函数值

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

AdaBoostClassifier

from sklearn.datasets import load_iris
from sklearn.ensemble import AdaBoostClassifier

boston=load_iris()
adac=AdaBoostClassifier()


adac.fit(boston.data,boston.target)

adac.estimators_

adac.estimator_errors_# 估计误差,可以看出误差是逐渐递减的

adac.classes_# 样本标签

adac.n_classes_# 查看数据类别数

adac.estimator_weights_# 查看模型权重

adac.feature_importances_

adac.predict(iris.data)

for item in adac.staged_predict_proba(iris.data):#输出adaboost每一次迭代对数据点的预测概率值
    print(item)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

gbdt

gbdt全称梯度下降树
gbdt 是通过采用加法模型(即基函数的线性组合),以及不断减小训练过程产生的残差来达到将数据分类或者回归的算法。

gbdt通过多轮迭代,每轮迭代产生一个弱分类器,每个分类器在上一轮分类器的残差基础上进行训练。对弱分类器的要求一般是足够简单,并且是低方差和高偏差的。因为训练的过程是通过降低偏差来不断提高最终分类器的精度。

# 导入模块
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.ensemble import GradientBoostingRegressor

from sklearn.datasets import load_iris
iris=load_iris()

gbc=GradientBoostingClassifier()
gbc.fit(iris.data,iris.target)

gbc.predict(iris.data)

gbc.predict_proba(iris.data)

#输出每次迭代的预测概率值
for item in gbc.staged_predict_proba(iris.data[:5]):
    print(item)
    
# 查看每次迭代在训练集上的分数
print(len(gbc.train_score_),gbc.train_score_)

import matplotlib.pyplot as plt
plt.plot(gbc.train_score_)# 训练曲线

gbc.decision_function(iris.data)# 输出各数据点的决定函数值

gbc.feature_importances_# 特征重要性:可见后两个特征比较重要,可以进行取舍,达到降维的目的

gbc.estimators_#查看基模型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值