分类数据

随机森林

北城余情 提交于 2020-02-27 02:27:00
1.什么是随机森林 1.1 Bagging思想 Bagging是bootstrap aggregating。思想就是从总体样本当中随机取一部分样本进行训练,通过多次这样的结果,进行投票获取平均值作为结果输出,这就极大可能的避免了不好的样本数据,从而提高准确度。因为有些是不好的样本,相当于噪声,模型学入噪声后会使准确度不高。 举个例子 : 假设有1000个样本,如果按照以前的思维,是直接把这1000个样本拿来训练,但现在不一样,先抽取800个样本来进行训练,假如噪声点是这800个样本以外的样本点,就很有效的避开了。重复以上操作,提高模型输出的平均值。 1.2 随机森林 Random Forest(随机森林)是一种基于树模型的Bagging的优化版本,一棵树的生成肯定还是不如多棵树,因此就有了随机森林,解决决策树泛化能力弱的特点。(可以理解成三个臭皮匠顶过诸葛亮) 而同一批数据,用同样的算法只能产生一棵树,这时Bagging策略可以帮助我们产生不同的数据集。Bagging策略来源于bootstrap aggregation:从样本集(假设样本集N个数据点)中重采样选出Nb个样本(有放回的采样,样本数据点个数仍然不变为N),在所有样本上,对这n个样本建立分类器(ID3\C4.5\CART\SVM\LOGISTIC),重复以上两步m次,获得m个分类器,最后根据这m个分类器的投票结果

使用LDA进行数据降维与分类

青春壹個敷衍的年華 提交于 2020-02-25 22:48:07
LDA是一种以目标: 类重心点距离最大 类内点距离小 但是对于情况:两个类重心点很近,但是各个点距离很远的情况,适用性不好。下面举个例子。 1、数据生成 首先建立一个函数 %生成一系列园点 function [x1,y1] = creat_circle(r1 , r1_ratio,sita_ratio) sita = 0:0.05:2*pi; all_num = size(sita); all_num = all_num(1,2); %rand : sita sita_p = randperm(all_num,floor(sita_ratio*all_num)); %rand : r r_p = rand(1,floor(sita_ratio*all_num))*r1*r1_ratio; r1_p = repmat(r1,1,floor(sita_ratio*all_num)); r1_p = r1_p - r_p; x1 = r1_p.*cos(sita_p); y1 = r1_p.*sin(sita_p); scatter(x1,y1) 然后使用程序(matlab) clear;clc;close all; [x1,y1] = creat_circle(3,0.05,0.95); [x2,y2] = creat_circle(5,0.05,0.95); [x3,y3] =

API接口设计

巧了我就是萌 提交于 2020-02-25 19:59:04
1、场景描述   比如说我们要做一款APP,需要通过api接口给app提供数据。假设我们是做商城,比如我们卖书的。我们可以想象下这个APP大概有哪些内容:   1)首页:banner区域(可以是一些热门书籍的图片做推广)、本周热卖书籍区域、本月好评书籍区域、活动打折的书籍区域。。。   2)排行榜:比如第一季度热销榜、新书版。。。   3)书单:管理后台运营添加的书单,比如《程序员从入门到放弃》系列书单。。。   4)用户相关的:比如用户个人信息设置、订单管理、消息管理、收藏的书籍。。。   数据是保存在数据库中,考虑到高并发数据库的瓶颈,采用DB+缓存的服务器架构。 2、重要接口汇总   看似简单的一个app,需要调用的api接口是非常多的,总结下大概有这几类接口: 1)列表接口:比如书单里面的书籍列表、排行榜的书籍列表; 2)详情接口:书籍的详细信息; 3)评论接口:书籍评论(这里可能要求购买了的才能评论)、星标; 4)点赞接口:给书籍点赞、给书单点赞; 5)收藏接口:收藏书籍、收藏书单; 6)“相关”接口:比如书籍《php从入门到放弃》相关的有哪些书籍; 7)关注接口:关注某本书或者书籍作者,一旦某本书有打折或者作者有新书,会推消息等等。或者是用户间互相关注; 8)发布接口:比如用户可以发布书单。A用户发布了书单,B用户可以关注A用户,A用户再发布新书单,会给B用户推消息等等

从结构到性能,一文概述XGBoost、Light GBM和CatBoost的同与不同

ⅰ亾dé卋堺 提交于 2020-02-25 15:48:18
尽管近年来神经网络复兴并大为流行,但是 boosting 算法在训练样本量有限、所需训练时间较短、缺乏调参知识等场景依然有其不可或缺的优势。本文从算法结构差异、每个算法的分类变量时的处理、算法在数据集上的实现等多个方面对 3 种代表性的 boosting 算法 CatBoost、Light GBM 和 XGBoost 进行了对比;虽然本文结论依据于特定的数据集,但通常情况下,XGBoost 都比另外两个算法慢。 最近,我参加了 kaggle 竞赛 WIDS Datathon,并通过使用多种 boosting 算法,最终排名前十。从那时开始,我就对这些算法的内在工作原理非常好奇,包括调参及其优劣势,所以有了这篇文章。尽管最近几年神经网络复兴,并变得流行起来,但我还是更加关注 boosting 算法,因为在训练样本量有限、所需训练时间较短、缺乏调参知识的场景中,它们依然拥有绝对优势。 2014 年 3 月,XGBOOST 最早作为研究项目,由陈天奇提出2017 年 1 月,微软发布首个稳定版 LightGBM2017 年 4 月,俄罗斯顶尖技术公司 Yandex 开源 CatBoost 由于 XGBoost(通常被称为 GBM 杀手)已经在机器学习领域出现了很久,如今有非常多详细论述它的文章,所以本文将重点讨论 CatBoost 和 LGBM,在下文我们将谈到:

基于sklearn的logistic回归对于鸢尾花的机器学习分类实践

感情迁移 提交于 2020-02-24 07:56:43
sklearn( scikit-learn )是python机器学习常用的第三方模块,是一个开源的机器学习库,它支持监督学习和非监督学习。它还为模型拟合、数据预处理、模型选择和评估以及许多其他实用工具提供了各种工具。sklearn对机器学习的常用算法进行了封装,包括回归、降维、分类、聚类等。对于以下的机器学习分类实践所用到的函数及方法进行说明。 1.np.c_[ ]和np.r_[ ]的用法解析 >> > import numpy as np >> > a = np . array ( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] ) >> > a array ( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] ) >> > b = np . array ( [ [ 7 , 8 , 9 ] , [ 10 , 11 , 12 ] ] ) >> > b array ( [ [ 7 , 8 , 9 ] , [ 10 , 11 , 12 ] ] ) >> > c = np . c_ [ a , b ] >> > c array ( [ [ 1 , 2 , 3 , 7 , 8 , 9 ] , [ 4 , 5 , 6 , 10 , 11 , 12 ] ] ) >> > d = np . r_ [ a , b ] >> > d array ( [ [ 1

php处理无限极分类数据的两种方式

£可爱£侵袭症+ 提交于 2020-02-22 14:45:29
开发过程中,经常会遇到处理无限分类数据,这里就介绍一下处理无限分类数据的两种方式,有不对的地方,还望多多指正。 //测试数据 $array=array( ['id'=>1,'parent_id'=>0,'name'=>1], ['id'=>2,'parent_id'=>0,'name'=>2], ['id'=>3,'parent_id'=>1,'name'=>3], ['id'=>4,'parent_id'=>1,'name'=>4], ['id'=>5,'parent_id'=>3,'name'=>5], ['id'=>6,'parent_id'=>3,'name'=>6] ); //递归方式 function recursion($array,$parent_id=0){ $new=[]; foreach($array as $k=>$v){ if($v['parent_id']==$parent_id){ $v['child']=recursion($array,$v['id']); if (!$v['child']) { unset($v['child']); } $new[] = $v; } } return $new; } //引用 function quote($array){ $items=array(); foreach($array as $k=>$v){

编写 Django 应用单元测试

被刻印的时光 ゝ 提交于 2020-02-21 09:35:32
作者: HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 我们博客功能越来越来完善了,但这也带来了一个问题,我们不敢轻易地修改已有功能的代码了! 我们怎么知道代码修改后带来了预期的效果?万一改错了,不仅新功能没有用,原来已有的功能都可能被破坏。此前我们开发一个新的功能,都是手工运行开发服务器去验证,不仅费时,而且极有可能验证不充分。 如何不用每次开发了新的功能或者修改了已有代码都得去人工验证呢?解决方案就是编写自动化测试,将人工验证的逻辑编写成脚本,每次新增或修改代码后运行一遍测试脚本,脚本自动帮我们完成全部测试工作。 接下来我们将进行两种类型的测试,一种是单元测试,一种是集成测试。 单元测试是一种比较底层的测试,它将一个功能逻辑的代码块视为一个单元(例如一个函数、方法、或者一个 if 语句块等,单元应该尽可能小,这样测试就会更加充分),程序员编写测试代码去测试这个单元,确保这个单元的逻辑代码按照预期的方式执行了。通常来说我们一般将一个函数或者方法视为一个单元,对其进行测试。 集成测试则是一种更加高层的测试,它站在系统角度,测试由各个已经经过充分的单元测试的模块组成的系统,其功能是否符合预期。 我们首先来进行单元测试,确保各个单元的逻辑都没问题后,然后进行集成测试,测试整个博客系统的可用性。 Python 一般使用标准库

Scikit-learn使用总结

南笙酒味 提交于 2020-02-21 07:33:22
在机器学习和数据挖掘的应用中,scikit-learn是一个功能强大的python包。在数据量不是过大的情况下,可以解决大部分问题。学习使用scikit-learn的过程中,我自己也在补充着机器学习和数据挖掘的知识。这里根据自己学习sklearn的经验,我做一个总结的笔记。另外,我也想把这篇笔记一直更新下去。 1 scikit-learn基础介绍 1.1 估计器(Estimator) 估计器,很多时候可以直接理解成分类器,主要包含两个函数: fit():训练算法,设置内部参数。接收训练集和类别两个参数。 predict():预测测试集类别,参数为测试集。 大多数scikit-learn估计器接收和输出的数据格式均为numpy数组或类似格式。 1.2 转换器(Transformer) 转换器用于数据预处理和数据转换,主要是三个方法: fit():训练算法,设置内部参数。 transform():数据转换。 fit_transform():合并fit和transform两个方法。 1.3 流水线(Pipeline) sklearn.pipeline 包 流水线的功能: 跟踪记录各步骤的操作(以方便地重现实验结果) 对各步骤进行一个封装 确保代码的复杂程度不至于超出掌控范围 基本使用方法 流水线的输入为一连串的数据挖掘步骤,其中最后一步必须是估计器,前几步是转换器

JQ 报表插件 jquery.jqplot 使用

*爱你&永不变心* 提交于 2020-02-20 16:58:04
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>显示报表</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!-- jquery --> <script type="text/javascript" src="js/jquery-1.4.2.js"></script> <!-- core --> <script type="text/javascript" src="jqplot/jquery.jqplot.js"></script> <link rel="stylesheet" href="jqplot/jquery.jqplot.css" type="text/css"></link> <!-- IE浏览器就需要引入excanvas.js--> <script language="javascript" type="text/javascript" src="jqplot/excanvas.js"></script> <!-- plugin --> <script type="text/javascript" src="jqplot/plugins

[Java] 各种流的分类及区别

烂漫一生 提交于 2020-02-17 18:33:13
https://www.cnblogs.com/lca1826/p/6427177.html 流在Java中是指计算中流动的缓冲区。 从外部设备流向中央处理器的数据流成为“输入流”,反之成为“输出流”。 字符流和字节流的主要区别: 1.字节流读取的时候,读到一个字节就返回一个字节;字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8码表中是3个字节)时。先去查指定的编码表,将查到的字符返回。 2.字节流可以处理所有类型数据,如:图片,MP3,AVI视频文件,而字符流只能处理字符数据。只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。 1.字节流: 字节输入流类:FileInputStream、BufferedInputStream和DataInputStream FileInputStream:此类用于从本地文件系统中读取文件内容。 构造方法: ·FileInputStream(File file):打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的File对象file指定。 ·FileInputStream(String name):打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的路径名name指定。 常用方法: ·int available()