集成学习Ensemble Learning






bagging

# 导入算法包以及数据集
from sklearn import neighbors
from sklearn import datasets
from sklearn.ensemble import BaggingClassifier
from sklearn import tree
from sklearn.model_selection import train_test_split
import numpy as np
import matplotlib.pyplot as plt
iris = datasets.load_iris()
x_data = iris.data[:,:2]
y_data = iris.targetx_train,x_test,y_train,y_test = train_test_split(x_data, y_data)
knn = neighbors.KNeighborsClassifier()
knn.fit(x_train, y_train)

def plot(model):# 获取数据值所在的范围x_min, x_max = x_data[:, 0].min() - 1, x_data[:, 0].max() + 1y_min, y_max = x_data[:, 1].min() - 1, x_data[:, 1].max() + 1# 生成网格矩阵xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),np.arange(y_min, y_max, 0.02))z = model.predict(np.c_[xx.ravel(), yy.ravel()])# ravel与flatten类似,多维数据转一维。flatten不会改变原始数据,ravel会改变原始数据z = z.reshape(xx.shape)# 等高线图cs = plt.contourf(xx, yy, z)
# 画图
plot(knn)
# 样本散点图
plt.scatter(x_data[:, 0], x_data[:, 1], c=y_data)
plt.show()
# 准确率
knn.score(x_test, y_test)

dtree = tree.DecisionTreeClassifier()
dtree.fit(x_train, y_train)

# 画图
plot(dtree)
# 样本散点图
plt.scatter(x_data[:, 0], x_data[:, 1], c=y_data)
plt.show()
# 准确率
dtree.score(x_test, y_test)

bagging_knn = BaggingClassifier(knn, n_estimators=100)
# 输入数据建立模型
bagging_knn.fit(x_train, y_train)
plot(bagging_knn)
# 样本散点图
plt.scatter(x_data[:, 0], x_data[:, 1], c=y_data)
plt.show()
bagging_knn.score(x_test, y_test)

bagging_tree = BaggingClassifier(dtree, n_estimators=100)
# 输入数据建立模型
bagging_tree.fit(x_train, y_train)
plot(bagging_tree)
# 样本散点图
plt.scatter(x_data[:, 0], x_data[:, 1], c=y_data)
plt.show()
bagging_tree.score(x_test, y_test)

随机森林(Random Forest)


from sklearn import tree
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
import numpy as np
import matplotlib.pyplot as plt
# 载入数据
data = np.genfromtxt("LR-testSet2.txt", delimiter=",")
x_data = data[:,:-1]
y_data = data[:,-1]plt.scatter(x_data[:,0],x_data[:,1],c=y_data)
plt.show()

x_train,x_test,y_train,y_test = train_test_split(x_data, y_data, test_size = 0.5)
def plot(model):# 获取数据值所在的范围x_min, x_max = x_data[:, 0].min() - 1, x_data[:, 0].max() + 1y_min, y_max = x_data[:, 1].min() - 1, x_data[:, 1].max() + 1# 生成网格矩阵xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),np.arange(y_min, y_max, 0.02))z = model.predict(np.c_[xx.ravel(), yy.ravel()])# ravel与flatten类似,多维数据转一维。flatten不会改变原始数据,ravel会改变原始数据z = z.reshape(xx.shape)# 等高线图cs = plt.contourf(xx, yy, z)# 样本散点图plt.scatter(x_test[:, 0], x_test[:, 1], c=y_test)plt.show()
dtree = tree.DecisionTreeClassifier()
dtree.fit(x_train, y_train)
plot(dtree)
dtree.score(x_test, y_test)

RF = RandomForestClassifier(n_estimators=50)
RF.fit(x_train, y_train)
plot(RF)
RF.score(x_test, y_test)

boosting







import numpy as np
import matplotlib.pyplot as plt
from sklearn import tree
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_gaussian_quantiles
from sklearn.metrics import classification_report
# 生成2维正态分布,生成的数据按分位数分为两类,500个样本,2个样本特征
x1, y1 = make_gaussian_quantiles(n_samples=500, n_features=2,n_classes=2)
# 生成2维正态分布,生成的数据按分位数分为两类,400个样本,2个样本特征均值都为3
x2, y2 = make_gaussian_quantiles(mean=(3, 3), n_samples=500, n_features=2, n_classes=2)
# 将两组数据合成一组数据
x_data = np.concatenate((x1, x2))
y_data = np.concatenate((y1, - y2 + 1))
plt.scatter(x_data[:, 0], x_data[:, 1], c=y_data)
plt.show()

# 决策树模型
model = tree.DecisionTreeClassifier(max_depth=3)# 输入数据建立模型
model.fit(x_data, y_data)# 获取数据值所在的范围
x_min, x_max = x_data[:, 0].min() - 1, x_data[:, 0].max() + 1
y_min, y_max = x_data[:, 1].min() - 1, x_data[:, 1].max() + 1# 生成网格矩阵
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),np.arange(y_min, y_max, 0.02))z = model.predict(np.c_[xx.ravel(), yy.ravel()])# ravel与flatten类似,多维数据转一维。flatten不会改变原始数据,ravel会改变原始数据
z = z.reshape(xx.shape)
# 等高线图
cs = plt.contourf(xx, yy, z)
# 样本散点图
plt.scatter(x_data[:, 0], x_data[:, 1], c=y_data)
plt.show()

# 模型准确率
model.score(x_data,y_data)

# AdaBoost模型
model = AdaBoostClassifier(DecisionTreeClassifier(max_depth=3),n_estimators=10)
# 训练模型
model.fit(x_data, y_data)# 获取数据值所在的范围
x_min, x_max = x_data[:, 0].min() - 1, x_data[:, 0].max() + 1
y_min, y_max = x_data[:, 1].min() - 1, x_data[:, 1].max() + 1# 生成网格矩阵
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),np.arange(y_min, y_max, 0.02))# 获取预测值
z = model.predict(np.c_[xx.ravel(), yy.ravel()])
z = z.reshape(xx.shape)
# 等高线图
cs = plt.contourf(xx, yy, z)
# 样本散点图
plt.scatter(x_data[:, 0], x_data[:, 1], c=y_data)
plt.show()

Stacking


from sklearn import datasets
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from mlxtend.classifier import StackingClassifier # pip install mlxtend
import numpy as np
# 载入数据集
iris = datasets.load_iris()
# 只要第1,2列的特征
x_data, y_data = iris.data[:, 1:3], iris.target  # 定义三个不同的分类器
clf1 = KNeighborsClassifier(n_neighbors=1)
clf2 = DecisionTreeClassifier()
clf3 = LogisticRegression()  # 定义一个次级分类器
lr = LogisticRegression()
sclf = StackingClassifier(classifiers=[clf1, clf2, clf3],   meta_classifier=lr)for clf,label in zip([clf1, clf2, clf3, sclf],['KNN','Decision Tree','LogisticRegression','StackingClassifier']):  scores = model_selection.cross_val_score(clf, x_data, y_data, cv=3, scoring='accuracy')  print("Accuracy: %0.2f [%s]" % (scores.mean(), label))


Voting

from sklearn import datasets
from sklearn import model_selection
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import VotingClassifier
import numpy as np
# 载入数据集
iris = datasets.load_iris()
# 只要第1,2列的特征
x_data, y_data = iris.data[:, 1:3], iris.target  # 定义三个不同的分类器
clf1 = KNeighborsClassifier(n_neighbors=1)
clf2 = DecisionTreeClassifier()
clf3 = LogisticRegression()  sclf = VotingClassifier([('knn',clf1),('dtree',clf2), ('lr',clf3)])   for clf, label in zip([clf1, clf2, clf3, sclf],['KNN','Decision Tree','LogisticRegression','VotingClassifier']):  scores = model_selection.cross_val_score(clf, x_data, y_data, cv=3, scoring='accuracy')  print("Accuracy: %0.2f [%s]" % (scores.mean(), label))

泰坦尼克号船员获救预测项目

import pandas
titanic = pandas.read_csv("titanic_train.csv")
titanic

# 空余的age填充整体age的中值
titanic["Age"] = titanic["Age"].fillna(titanic["Age"].median())
print(titanic.describe())


print(titanic["Sex"].unique())# 把male变成0,把female变成1
titanic.loc[titanic["Sex"] == "male", "Sex"] = 0
titanic.loc[titanic["Sex"] == "female", "Sex"] = 1


print(titanic["Embarked"].unique())
# 数据填充
titanic["Embarked"] = titanic["Embarked"].fillna('S')
# 把类别变成数字
titanic.loc[titanic["Embarked"] == "S", "Embarked"] = 0
titanic.loc[titanic["Embarked"] == "C", "Embarked"] = 1
titanic.loc[titanic["Embarked"] == "Q", "Embarked"] = 2


from sklearn.preprocessing import StandardScaler# 选定特征
predictors = ["Pclass", "Sex", "Age", "SibSp", "Parch", "Fare", "Embarked"]
x_data = titanic[predictors]
y_data = titanic["Survived"]# 数据标准化
scaler = StandardScaler()
x_data = scaler.fit_transform(x_data)

逻辑回归

from sklearn import cross_validation
from sklearn.linear_model import LogisticRegression# 逻辑回归模型
LR = LogisticRegression()
# 计算交叉验证的误差
scores = cross_validation.cross_val_score(LR, x_data, y_data, cv=3)
# 求平均
print(scores.mean())


神经网络

from sklearn.neural_network import MLPClassifier# 建模
mlp = MLPClassifier(hidden_layer_sizes=(20,10),max_iter=1000)
# 计算交叉验证的误差
scores = cross_validation.cross_val_score(mlp, x_data, y_data, cv=3)
# 求平均
print(scores.mean())


KNN

from sklearn import neighborsknn = neighbors.KNeighborsClassifier(21)
# 计算交叉验证的误差
scores = cross_validation.cross_val_score(knn, x_data, y_data, cv=3)
# 求平均
print(scores.mean())


决策树

from sklearn import tree# 决策树模型
dtree = tree.DecisionTreeClassifier(max_depth=5, min_samples_split=4)
# 计算交叉验证的误差
scores = cross_validation.cross_val_score(dtree, x_data, y_data, cv=3)
# 求平均
print(scores.mean())


随机森林

# 随机森林
from sklearn.ensemble import RandomForestClassifierRF1 = RandomForestClassifier(random_state=1, n_estimators=10, min_samples_split=2)
# 计算交叉验证的误差
scores = cross_validation.cross_val_score(RF1, x_data, y_data, cv=3)
# 求平均
print(scores.mean())

RF2 = RandomForestClassifier(n_estimators=100, min_samples_split=4)
# 计算交叉验证的误差
scores = cross_validation.cross_val_score(RF2, x_data, y_data, cv=3)
# 求平均
print(scores.mean())



机器学习基础-集成学习-13相关推荐

  1. 机器学习基础 集成学习基础(Boosting+Adaboost+GBDT)

    文章目录 一.Boosting 1. 什么是boosting 2. 实现过程: 3. bagging集成与boosting集成的区别: 4. AdaBoost介绍 4.1 构造过程细节 4.2 关键点 ...

  2. 【机器学习】集成学习投票法:投票回归器(VotingRegressor) 投票分类器(VotingClassifier)

    前言 投票回归器和投票分类器都属于集成学习.在[机器学习]集成学习基础概念介绍中有提到过,集成学习的结合策略包括: 平均法.投票法和学习法.sklearn.ensemble库中的Voting Clas ...

  3. 【机器学习】集成学习与模型融合方法举例

    [机器学习]集成学习与模型融合方法举例 文章目录 1 概述1.1 什么是集成学习 2 CrossValidation 交叉验证 3 stacking 4 Voting投票器 5 Bagging 1 概 ...

  4. Oracle PL/SQL基础语法学习13:比较运算符

    系列文章目录 Oracle PL/SQL基础语法学习12:短路求值 Oracle PL/SQL基础语法学习13:比较运算符 Oracle PL/SQL基础语法学习14:BOOLEAN表达式 文章目录 ...

  5. 【机器学习】集成学习—Boosting—GBM(Gradient Boosting Machine)解析

    [机器学习]集成学习-Boosting-GBM(Gradient Boosting Machine)解析 文章目录 [机器学习]集成学习-Boosting-GBM(Gradient Boosting ...

  6. 基于机器学习中集成学习的stacking方式进行的金线莲质量鉴别研究(python进行数据处理并完成建模,对品种进行预测)

    1.前言 金线莲为兰科开唇兰属植物,别名金丝兰.金丝线.金耳环.乌人参.金钱草等,是一种名贵中药材,国内主要产地为较低纬度地区如:福建.台湾.广东.广西.浙江.江西.海南.云南.四川.贵州以及西藏南部 ...

  7. 机器学习(十一)——集成学习

    集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务.根据个体学习器的生成方式,目前集成学习的方法大致分为两类,即个体学习器之间存在强依赖关系,必须串行生成的序列化方法 ...

  8. 小白机器学习基础算法学习必经之路

    https://www.toutiao.com/a6657427848900379150/ 2019-02-14 15:21:13 未来,人工智能是生产力,是变革社会的主要技术力量之一. 掌握人工智能 ...

  9. 【机器学习】集成学习代码练习

    课程完整代码:https://github.com/fengdu78/WZU-machine-learning-course 代码修改并注释:黄海广,haiguang2000@wzu.edu.cn i ...

最新文章

  1. SSM框架 mybatis-plus + spring + springmvc + redis 水果生鲜产品交易平台
  2. Java实现数据库表结构导出到Excel
  3. android悬浮窗代码布局,三行代码实现Android应用内悬浮窗,无需一切权限,适配所有ROM和厂商...
  4. Visual C++ 2008入门经典 第四章数组 字符串
  5. 微信小程序中app.js文件、组件、api
  6. mysql数据类型的验证_MYSQL数据类型详解
  7. SQLServer之修改CHECK约束
  8. Direct IO的程序实现
  9. iphone已停用怎么解锁_iPhone X已停用 连接iTunes 怎么办
  10. 【推荐】智慧数字城管执法综合应用平台可视化系统建设架构解决方案合集(共202份,920M)
  11. 赫/哈/霍 夫曼(Huffman)编码 游程编码
  12. QT写的U盘批量复制小工具
  13. 牛顿与莱布尔茨的微积分战争
  14. Stream Collectors - counting
  15. 查看oracle执行计划方法( 一)
  16. poj 1830 开关问题
  17. VB.net:VB.net编程语言学习之操作符(变量/常量/数据类型/声明)逻辑控制语句(条件判断/循环语句)的简介、案例应用之详细攻略
  18. 图片放大后都是马赛克怎么办?
  19. java jbutton 禁用_为什么JButton不能禁用,大侠们进来看看
  20. 《遗传算法原理及应用》笔记—进化计算

热门文章

  1. java phantomjs_Java爬虫:Jsoup + Phantomjs
  2. php给定一个起始数字,下标值0,递减的值,求出他所有递减值的开头数字和结尾数字。
  3. C语言循环求出2的10次幂,C语言求2的100次幂的结果.doc
  4. python文件输出中文_【python】中文的输出,打印,文件编码问题解决方法
  5. php函数文件,PHP文件函数大全
  6. linux双核对线程,Linux检查双核(及多核)CPU信息
  7. centos7 tomcat_centos7中利用logrotate工具切割日志,以tomcat日志为例
  8. 【Nginx】错误: [emerg] “proxy_pass“ cannot have URI part in location given by regular expression,...
  9. 【H2 Database】Server模式启动
  10. tfds.load()和tf.data.Dataset的简介