转:30分钟学会用scikit-learn的基本分类方法(决策树、SVM、KNN)和集成方法(随机森林,Adaboost和GBRT)_13.集成学习主要包括哪几类方法决策树 dbscan k-nn_骁勇善栈的博客-程序员宅基地

技术标签: PYTHON_机器学习  

关于回归方法,请参考我的另一篇博客30分钟学会用scikit-learn的基本回归方法(线性、决策树、SVM、KNN)和集成方法(随机森林,Adaboost和GBRT) 
本文主要参考了scikit-learn的官方网站

1. 数据准备

关于分类,我们使用了Iris数据集,这个scikit-learn自带了. 
Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据集,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。

注意,Iris数据集给出的三种花是按照顺序来的,前50个是第0类,51-100是第1类,101~150是第二类,如果我们分训练集和测试集的时候要把顺序打乱 
这里我们引入一个两类shuffle的函数,它接收两个参数,分别是x和y,然后把x,y绑在一起shuffle.

def shuffle_in_unison(a, b):
    assert len(a) == len(b)
    import numpy
    shuffled_a = numpy.empty(a.shape, dtype=a.dtype)
    shuffled_b = numpy.empty(b.shape, dtype=b.dtype)
    permutation = numpy.random.permutation(len(a))
    for old_index, new_index in enumerate(permutation):
        shuffled_a[new_index] = a[old_index]
        shuffled_b[new_index] = b[old_index]
    return shuffled_a, shuffled_b

 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

下面我们导入Iris数据并打乱它,然后分为100个训练集和50个测试集

from sklearn.datasets import load_iris

iris = load_iris()
def load_data():
    iris.data, iris.target = shuffle_in_unison(iris.data, iris.target)
    x_train ,x_test = iris.data[:100],iris.data[100:]
    y_train, y_test = iris.target[:100].reshape(-1,1),iris.target[100:].reshape(-1,1)
    return x_train, y_train, x_test, y_test
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2. 试验各种不同的方法

常用的分类方法一般有决策树, SVM, kNN, 朴素贝叶斯, 集成方法有随机森林,Adaboost和GBDT 
完整代码如下:

from sklearn.datasets import load_iris

iris = load_iris()

def shuffle_in_unison(a, b):
    assert len(a) == len(b)
    import numpy
    shuffled_a = numpy.empty(a.shape, dtype=a.dtype)
    shuffled_b = numpy.empty(b.shape, dtype=b.dtype)
    permutation = numpy.random.permutation(len(a))
    for old_index, new_index in enumerate(permutation):
        shuffled_a[new_index] = a[old_index]
        shuffled_b[new_index] = b[old_index]
    return shuffled_a, shuffled_b

def load_data():
    iris.data, iris.target = shuffle_in_unison(iris.data, iris.target)
    x_train ,x_test = iris.data[:100],iris.data[100:]
    y_train, y_test = iris.target[:100].reshape(-1,1),iris.target[100:].reshape(-1,1)
    return x_train, y_train, x_test, y_test


from sklearn import tree, svm, naive_bayes,neighbors
from sklearn.ensemble import BaggingClassifier, AdaBoostClassifier, RandomForestClassifier, GradientBoostingClassifier


x_train, y_train, x_test, y_test = load_data()

clfs = {
   'svm': svm.SVC(),\
        'decision_tree':tree.DecisionTreeClassifier(),
        'naive_gaussian': naive_bayes.GaussianNB(), \
        'naive_mul':naive_bayes.MultinomialNB(),\
        'K_neighbor' : neighbors.KNeighborsClassifier(),\
        'bagging_knn' : BaggingClassifier(neighbors.KNeighborsClassifier(), max_samples=0.5,max_features=0.5), \
        'bagging_tree': BaggingClassifier(tree.DecisionTreeClassifier(), max_samples=0.5,max_features=0.5),
        'random_forest' : RandomForestClassifier(n_estimators=50),\
        'adaboost':AdaBoostClassifier(n_estimators=50),\
        'gradient_boost' : GradientBoostingClassifier(n_estimators=50, learning_rate=1.0,max_depth=1, random_state=0)
        }

def try_different_method(clf):
    clf.fit(x_train,y_train.ravel())
    score = clf.score(x_test,y_test.ravel())
    print('the score is :', score)

for clf_key in clfs.keys():
    print('the classifier is :',clf_key)
    clf = clfs[clf_key]
    try_different_method(clf)
 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

给出的结果如下:

the classifier is : svm
the score is : 0.94
the classifier is : decision_tree
the score is : 0.88
the classifier is : naive_gaussian
the score is : 0.96
the classifier is : naive_mul
the score is : 0.8
the classifier is : K_neighbor
the score is : 0.94
the classifier is : gradient_boost
the score is : 0.88
the classifier is : adaboost
the score is : 0.62
the classifier is : bagging_tree
the score is : 0.94
the classifier is : bagging_knn
the score is : 0.94
the classifier is : random_forest
the score is : 0.92
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/java1573/article/details/78865085

智能推荐

跨交换机的VLAN 部署_跨交换机vlan配置过程_[mzq]的博客-程序员宅基地

实验拓扑(1)财务部和技术部在这两层楼均有员工办公,其中财务部计算机使用SW1的Eth0/0/1端口及SW2的Eth0/0/1端口;技术部计算机使用SW1的Eth0/0/2及SW2的Eth0/0/2端口。(2)出于安全的考虑,需在交换机中为各部门创建相应的VLAN,在实现部门内跨交换机通信的同时避免部门间相互通信。(3)所有计算机均采用10.0.1.0/24网段,各部门IP和接入交换机的端口信息如拓扑所示。操作步骤为实现各部门之间的隔离,需在交换机创建VLAN,并将各部门计算机的相应端口划分到相关的

sdjzu--画8_画8 csdn_evi1743的博客-程序员宅基地

题目链接问题 F : 8时间限制:1 秒内存限制:256 兆特殊判题: 否提交:38解决: 10题目描述人们都喜欢8这个数字,手机号希望全是8,车牌号也希望全是8.在这个无发不在的世界,8俨然成为了人们发财的数字。为了以后我们的前途,大家来画8吧,谁画的标准,好看,谁的前途就越好。输入格

数字IC设计笔试面试题总结(三)_芯益求新的博客-程序员宅基地

本次给大家介绍一个非常有意思的Verilog编程题,题目描述如下图:这道题主要考察了计数器相关的知识,对逻辑能力要求比较严格,解答如下:module top_module( input clk, input reset, input ena, output pm, output reg[7:0] hh, output reg[7:0] mm, output reg[7:0] ss); always @(posedge clk)b

nvidia-smi 命令解读_tang-0203的博客-程序员宅基地

关于nvidia-smi命令的解释,转载自:http://blog.csdn.net/sallyxyl1993/article/details/62220424nvidia-smi是用来查看GPU使用情况的。我常用这个命令判断哪几块GPU空闲,但是最近的GPU使用状态让我很困惑,于是把nvidia-smi命令显示的GPU使用表中各个内容的具体含义解释一下。这是服务器上特斯拉K80的

zabbix 监控 windows 服务器_zabbix监控windows服务器_zouyu1719的博客-程序员宅基地

zabbix 监控 windows 服务器步骤:1.确定zabbix服务器的IP地址和 zabbix 版本2.官网下载对应版本的zabbix-agent或3.在要监控的windows服务器中安装zabbix-agent4.在zabbix配置里添加windows主机第一步:确定zabbix服务器的IP地址和 zabbix 版本如图: ip地址 192.168.11.35 版本 zabbix 5.4.8第二步:官网下载对应版本的zabbix agent或zabbix agent

Android 设置透明、半透明等效果_筱丶新的博客-程序员宅基地

设置透明效果 大概有三种1、用android系统的透明效果 Java代码 android:background="@android:color/transparent" 例如 设置按钮 Java代码 <Button android:background="@android:color/transparent" android:text="@+id/Button01" android:

随便推点

数据库表结构文档自动生成工具_aiyitui0234的博客-程序员宅基地

1.需求描述: 软件开发完成后,交付客户给客户使用前通常需要数据库设计文档,很多程序员甚至项目经理自然会想到采用人海战术,一个项目组的成员,分模块来写,然后合并。作为程序员来说,这种方法是在是太low了。那么能否有自动化工具呢,当然有,用度娘搜索“数据库文档生成器”会出来很多个,他们的质量也会参差不齐,要么格式不满足公司文档格式需要。所以该问题的终极解决方案是理解数据库文档...

python网络爬虫之使用scrapy爬取图片_dianjie9145的博客-程序员宅基地

在前面的章节中都介绍了scrapy如何爬取网页数据,今天介绍下如何爬取图片。下载图片需要用到ImagesPipeline这个类,首先介绍下工作流程:1 首先需要在一个爬虫中,获取到图片的url并存储起来。也是就是我们项目中test_spider.py中testSpider类的功能2 项目从爬虫返回,进入到项目通道也就是pipelines中3 在通道中,在第一步中获取到的图...

无刷直流电机正反转 原理 分析_hpwm_lpwm_Grit_Wang的博客-程序员宅基地

一、无刷直流电机工作原理无刷直流电机要转动,需要根据位置传感器的输出信号确认转子位置。然后通过电子换相电路去驱动电机本体使定子电枢绕组依次换相通电,从而在定子电枢绕组上产生旋转磁场,旋转磁场与转子永磁体相互作用驱动转子转动。电机持续的转动依赖于电机的准确换相,电机换相的时机只取决于转子的位置信号。以常用的两两导通、三相六状态、全桥Y形直流无刷电机驱动控制为例,原理图如图1。图1二...

Ubuntu配置NFS_sean-zou的博客-程序员宅基地

NFS 是Network File System的缩写,即网络文件系统,一种使用于分散式文件系统的协定NFS通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,例如将/home设置为共享目录,然后共享给网络中的其它服务器,这样每台机器就不必单独建立自己的/home路径了,NFS独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享,是在类Unix系统间实现磁盘文件共享的一种方法NFS本身没有提供信息传输的协议和功能,而是使用RPC服务完成这部分功能。可以说NFS本身就是使用RPC服务的一

java里的注解_有难易乎的博客-程序员宅基地

从JDK5开始,Java增加对元数据的支持,也就是 注解(Annotation) ,注解与注释是有一定区别的,可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。注释 ( comment ) 用于注解说明解释程序的文字就是 注释 。注解入门内置注解自定义注解,元注解注解入门注解是JAVA5开始引入的新技术。注解其实就是代码里的特殊标记,它用于替代配置文件:传统方式通过配置文件告诉类如何运行,有了注解技术后,开发人员可以通过注解告诉类如何运行。在J.

BAT程序员必备技能_Mathilda91的博客-程序员宅基地

前言想要进入BAT等一线互联网公司,以下是你必需具备的技能。如果你掌握的不牢固,那就赶快巩固,如果你还没有涉及,现在就立马学习起来吧。1.Java语言基础java语法基础java类与对象java继承与多态面向对象高级特性异常处理多线程输入与输出IO泛型,reflection,annotation;2.Java基本类库java.lang 包:主要含有与语言相关的类。java.lang 包由解释程序自...

推荐文章

热门文章

相关标签