sklearn中调用集成学习算法
1、集成学习是指对于同一个基础数据集使用不同的机器学习算法进行训练,最后结合不同的算法给出的意见进行决策,这个方法兼顾了许多算法的"意见",比较全面,因此在机器学习领域也使用地非常广泛。生活中其实也普遍存在集成学习的方法,比如买东西找不同的人进行推荐,病情诊断进行多专家会诊等,考虑各方面的意见进行最终的综合的决策,这样得到的结果可能会更加的全面和准确。另外,sklearn中也提供了集成学习的接口voting classifier。
sklearn中具体调用集成学习方法的具体代码如下:
#使用集成学习的方法进行数据训练和预测
#1-1导入原始基础数据集并且进行数据的预处理
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
x,y=datasets.make_moons(n_samples=500,noise=0.3,random_state=42) #生成数据默认为100个数据样本
print(x.shape)
print(y.shape)
plt.figure()
plt.scatter(x[y==0,0],x[y==0,1],color="r")
plt.scatter(x[y==1,0],x[y==1,1],color="g")
plt.show()
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=42)
#导入sklearn中的不同机器学习算法
#1逻辑回归算法
from sklearn.linear_model import LogisticRegression
log_reg=LogisticRegression()
log_reg.fit(x_train,y_train)
print(log_reg.score(x_test,y_test))
#2支撑向量机SVM算法
from sklearn.svm import SVC
svc_reg=SVC()
svc_reg.fit(x_train,y_train)
print(svc_reg.score(x_test,y_test))
#KNN算法
from sklearn.neighbors import KNeighborsClassifier
knn_reg=KNeighborsClassifier(n_neighbors=3)
knn_reg.fit(x_train,y_train)
print(knn_reg.score(x_test,y_test))
#决策树算法
from sklearn.tree import DecisionTreeClassifier
tree_reg=DecisionTreeClassifier()
tree_reg.fit(x_train ,y_train)
print(tree_reg.score(x_test,y_test))
y_predict1=log_reg.predict(x_test)
y_predict2=knn_reg.predict(x_test)
y_predict3=svc_reg.predict(x_test)
y_predict4=tree_reg.predict(x_test)
y_predict=np.array(y_predict1+y_predict2+y_predict3+y_predict4>=3,dtype="int") #自己简单采用集成学习的方法来进行相应的预测
from sklearn.metrics import accuracy_score
score=accuracy_score(y_predict,y_test)
print(score)
#使用sklearn中的集成学习接口进行相应的训练和预测—hard voting是投票时少数服从多数的原则(可以先把每个算法调到最好的结果,然后再用集成学习的算法进行预测)
from sklearn.ensemble import VotingClassifier
vote_reg=VotingClassifier(estimators=[
("log_cla",LogisticRegression()),
("svm_cla",SVC()),
("knn",KNeighborsClassifier()),
("tree",DecisionTreeClassifier(random_state=666))
],voting="hard")
vote_reg.fit(x_train,y_train)
print(vote_reg.score(x_test,y_test))
#使用sklearn中的集成学习接口进行相应的训练和预测—soft voting是投票时不同算法不同权重的原则(可以先把每个算法调到最好的结果,然后再用集成学习的算法进行预测)
from sklearn.ensemble import VotingClassifier
vote_reg1=VotingClassifier(estimators=[
("log_cla",LogisticRegression()),
("svm_cla",SVC(probability=True)), #SVC算法本来是计算不了概率的,但是经过一定的改进便可以计算概率,需要使得probability=true
("knn",KNeighborsClassifier()),
("tree",DecisionTreeClassifier(random_state=666))
],voting="soft")
vote_reg1.fit(x_train,y_train)
print(vote_reg1.score(x_test,y_test))
#采用有放回bagging和无放回pasting两种不同的方式来进行集成学习的训练(bootstrap决定有无放回,true代表有放回)
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
x,y=datasets.make_moons(n_samples=500,noise=0.3,random_state=42) #生成数据默认为100个数据样本
print(x.shape)
print(y.shape)
plt.figure()
plt.scatter(x[y==0,0],x[y==0,1],color="r")
plt.scatter(x[y==1,0],x[y==1,1],color="g")
plt.show()
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=42)
#使用bagging的方式进行集成学习
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import BaggingClassifier
bag_reg=BaggingClassifier(DecisionTreeClassifier(),n_estimators=500,max_samples=100,bootstrap=True)
bag_reg.fit(x_train,y_train)
print(bag_reg.score(x_test,y_test))
#采用oob的方式对于训练模型进行数据的测试验证oob_score=true
bag_reg1=BaggingClassifier(DecisionTreeClassifier(),n_estimators=500,max_samples=100,bootstrap=True,oob_score=True,n_jobs=-1)
bag_reg1.fit(x_train,y_train)
print(bag_reg1.score(x_test,y_test))
print(bag_reg1.oob_score_)
#采用随机特征数目的方式对于训练模型进行数据的测试验证 max_features=样本随机特征数(主要用于图像识别领域数据样本特征比较多的数据集)
bag_reg2=BaggingClassifier(DecisionTreeClassifier(),n_estimators=500,max_samples=100,bootstrap=True,oob_score=True,n_jobs=-1,max_features=1,bootstrap_features=True)
bag_reg2.fit(x_train,y_train)
print(bag_reg1.score(x_test,y_test))
print(bag_reg1.oob_score_)
#使用随机森林的算法进行集成学习的训练和预测
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
x,y=datasets.make_moons(n_samples=500,noise=0.3,random_state=42) #生成数据默认为100个数据样本
print(x.shape)
print(y.shape)
plt.figure()
plt.scatter(x[y==0,0],x[y==0,1],color="r")
plt.scatter(x[y==1,0],x[y==1,1],color="g")
plt.show()
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=42)
from sklearn.ensemble import RandomForestClassifier
rf1=RandomForestClassifier(n_estimators=500,random_state=666,oob_score=True,n_jobs=-1) #利用随机森林的方法用取不到的数据进行相应的训练
rf1.fit(x,y)
print(rf1.oob_score_)
rf1=RandomForestClassifier(n_estimators=500,random_state=666,max_leaf_nodes=16,oob_score=True,n_jobs=-1)
rf1.fit(x,y)
print(rf1.oob_score_)
#使用极其随机森林的算法进行集成学习的训练和预测(extra tree是指特征随机,并且节点阈值也随机,使得决策树之间差异更大,增加了随机性,降低了过拟合,不过也增加了一定的偏差)
from sklearn.ensemble import ExtraTreesClassifier
et=ExtraTreesClassifier(n_estimators=500,n_jobs=-1,bootstrap=True,oob_score=True)
et.fit(x,y)
print(et.oob_score_)
###利用集成学习解决回归问题
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import ExtraTreesRegressor
from sklearn.ensemble import BaggingRegressor
#回归问题和分类问题是一致的,超参数也是统一的,使用参照以上分类算法,只不过其输出结果是一个数值而非类别 #集成学习的第二种类:Boosting集成多个模型,模型之间是用关系的,它们均在增强整体的效果,主要有Ada Boosting 和Gradient Boosting
#第一种boosting的方式Ada Boosting方式
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
x,y=datasets.make_moons(n_samples=500,noise=0.3,random_state=666) #生成数据默认为100个数据样本
print(x.shape)
print(y.shape)
plt.figure()
plt.scatter(x[y==0,0],x[y==0,1],color="r")
plt.scatter(x[y==1,0],x[y==1,1],color="g")
plt.show()
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=666)
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
ada_boost=AdaBoostClassifier(DecisionTreeClassifier(max_depth=2,min_samples_leaf=10,max_leaf_nodes=20),n_estimators=1000,random_state=666)
ada_boost.fit(x_train,y_train)
print(ada_boost.score(x_test,y_test))
#第二种boosting方式:Gradient Boosting,利用特定的机器学习算法对于数据进行训练和预测,然后将模型误差再进行训练,然后再对误差的误差训练,依次叠加,最终得到的训练结果就是最终的结果
from sklearn.ensemble import GradientBoostingClassifier
gb_boost=GradientBoostingClassifier(max_depth=5,n_estimators=3000)
gb_boost.fit(x_train,y_train)
print(gb_boost.score(x_test,y_test))
#第三种集成学习的思路stacking集成学习的方法:多模型多层次的模型融合集成学习方法 最终的运行结果如下所示:

sklearn中调用集成学习算法的更多相关文章
- sklearn中调用PCA算法
sklearn中调用PCA算法 PCA算法是一种数据降维的方法,它可以对于数据进行维度降低,实现提高数据计算和训练的效率,而不丢失数据的重要信息,其sklearn中调用PCA算法的具体操作和代码如下所 ...
- 集成学习算法汇总----Boosting和Bagging(推荐AAA)
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- 集成学习算法总结----Boosting和Bagging
1.集成学习概述 1.1 集成学习概述 集成学习在机器学习算法中具有较高的准去率,不足之处就是模型的训练过程可能比较复杂,效率不是很高.目前接触较多的集成学习主要有2种:基于Boosting的和基于B ...
- 集成学习算法总结----Boosting和Bagging(转)
1.集成学习概述 1.1 集成学习概述 集成学习在机器学习算法中具有较高的准去率,不足之处就是模型的训练过程可能比较复杂,效率不是很高.目前接触较多的集成学习主要有2种:基于Boosting的和基于B ...
- Ensemble_learning 集成学习算法 stacking 算法
原文:https://herbertmj.wikispaces.com/stacking%E7%AE%97%E6%B3%95 stacked 产生方法是一种截然不同的组合多个模型的方法,它讲的是组合学 ...
- scikitlearn库中调用k-近邻算法的操作步骤
1.k近邻算法可以说是唯一一个没有训练过程的机器学习算法,它含有训练基础数据集,但是是一种没有模型的算法,为了将其和其他算法进行统一,我们把它的训练数据集当做它的模型本身.2.在scikitlearn ...
- 集成学习算法——adaboost
adaboost是boosting类集成学习方法中的一种算法,全称是adaptive boost,表示其是一种具有自适应性的算法,这个自适应性体现在何处,下面来详细说明. 1.adaboost算法原理 ...
- sklearn调用逻辑回归算法
1.逻辑回归算法即可以看做是回归算法,也可以看作是分类算法,通常用来解决分类问题,主要是二分类问题,对于多分类问题并不适合,也可以通过一定的技巧变形来间接解决. 2.决策边界是指不同分类结果之间的边界 ...
- 使用sklearn进行集成学习——理论
系列 <使用sklearn进行集成学习——理论> <使用sklearn进行集成学习——实践> 目录 1 前言2 集成学习是什么?3 偏差和方差 3.1 模型的偏差和方差是什么? ...
随机推荐
- 「SDOI2009」虔诚的墓主人
传送门 Luogu 解题思路 离散化没什么好说 有一种暴力的想法就是枚举每一个坟墓,用一些数据结构维护一下这个店向左,向右,向上,向下的常青树的个数,然后用组合数统计方案. 但是网格图边长就有 \(1 ...
- ROS及Ubuntu学习记录
1.ROS安装时出现 “无法获得锁的解决方法” 参考:https://www.jianshu.com/p/6868ed4b4aec 2.运行rviz时 要先在一个终端窗口运行roscore 3.虚拟机 ...
- GO第归
Go 语言递归函数 递归,就是在运行的过程中调用自己. 语法格式如下: func recursion() { recursion() /* 函数调用自身 */ } func main() { ...
- Redis注意点记录
场景:1主2从 1.不使用哨兵模式,则当主机宕机后,从机并不会自动切换到Master状态,仍旧是Slave,若主机重新恢复,则从机进行自动连接 2.使用哨兵模式后,主机宕机,从机会根据分配的权值在从机 ...
- 树莓派Ubuntu Mate 16.04 修改为国内更新源
收藏:https://blog.csdn.net/wang_shuai_ww/article/details/80386708 更换步骤以root身份打开 /etc/apt/sources.list ...
- MySQL数据库--基础简述
MySQL数据库--基础简述 1.15.1 MySQL简介 Mysql是最流行的RDBMS(Relational Database Management System:关系数据库管理系统),特别是在W ...
- 【转】uWSGI+django+nginx的工作原理流程与部署历程
一.前言献给和我一样懵懂中不断汲取知识,进步的人们. 霓虹闪烁,但人们真正需要的,只是一个可以照亮前路的烛光 二.必要的前提 2.1 准备知识 1.django 一个基于python的开源web框架, ...
- C++ STL之映射map的使⽤
写在最前面:本文摘录于柳神笔记: map 是键值对,⽐如⼀个⼈名对应⼀个学号,就可以定义⼀个字符串 string 类型的⼈名为“键”,学 号 int 类型为“值”,如 map<string, i ...
- Android 调用系统Email发送带多附件的邮件
转自:http://www.open-open.com/lib/view/open1347005126912.html 众所周知,在Android中调用其他程序进行相关处理,都是使用的Intent.当 ...
- case语句!
1.case 语句概述(1)case 语句的作用使用 case 语句改写 if 多分支可以使脚本结构更加清晰.层次分明.针对变量的不同取值,执行不同的命令序列.2.case 语句的结构:case 变量 ...