机器学习算法评价指标

一、常用分类算法的优缺点二、正确率能很好的评估分类算法吗不同算法有不同特点,在不同数据集上有不同的表现效果,根据特定的任务选择不同的算法。如何评价分类算法的好坏,要做具体任务具体分析。对于决策树,主要用正确率去评估,但是其他算法,只用正确率能很好的评估吗?答案是否定的。正确率确实是一个很直观很好的评价指标,但是有时候正确率高并不能完全代表一个算法就好。比如对某个地区进行地震预测,地震分类属性分为0:不发生地震、1:发生地震。我们都知道,不发生的概率是极大的,对于分类器而言,如果分类器不加思考,对每一个测试样例的类别都划分为0,达到99%的正确率,但是,问题来了,如果真的发生地震时,这个分类器毫无察觉,那带来的后果将是巨大的。很显然,99%正确率的分类器并不是我们想要的。出现这种现象的原因主要是数据分布不均衡,类别为1的数据太少,错分了类别1但达到了很高的正确率却忽视了研究者本身最为关注的情况。三、几个常用术语这里首先介绍几个常见的模型评价术语,现在假设我们的分类目标只有两类,即为正例(positive)和负例(negative)分别是:1)Truepositives(TP):被正确地划...

(3)Deep Learning之神经网络和反向传播算法

在上一篇文章中,我们已经掌握了机器学习的基本套路,对模型、目标函数、优化算法这些概念有了一定程度的理解,而且已经会训练单个的感知器或者线性单元了。在这篇文章中,我们将把这些单独的单元按照一定的规则相互连接在一起形成神经网络,从而奇迹般的获得了强大的学习能力。我们还将介绍这种网络的训练算法:反向传播算法。最后,我们依然用代码实现一个神经网络。如果您能坚持到本文的结尾,将会看到我们用自己实现的神经网络去识别手写数字。现在请做好准备,您即将双手触及到深度学习的大门。神经元和感知器本质上是一样的,只不过我们说感知器的时候,它的激活函数是阶跃函数;而当我们说神经元时,激活函数往往选择为sigmoid函数或tanh函数。如下图所示: sigmoid函数是一个非线性函数,值域是(0,1)。函数图像如下图所示sigmoid函数的导数是:可以看到,sigmoid函数的导数非常有趣,它可以用sigmoid函数自身来表示。这样,一旦计算出sigmoid函数的值,计算它的导数的值就非常方便。神经网络其实就是按照一定规则连接起来的多个神经元。上图展示了一个全连接(fullconnected,FC)神经...

python实现高效率的排列组合算法-乾颐堂

组合算法  本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标  代表的数被选中,为0则没选中。   首先初始化,将数组前n个元素置1,表示第一个组合为前n个数。   然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为  “01”组合,同时将其左边的所有“1”全部移动到数组的最左端。   当第一个“1”移动到数组的m-n的位置,即n个“1”全部移动到最右端时,就得  到了最后一个组合。   例如求5中选3的组合:   1 1 1 0 0 //1,2,3   1 1 0 1 0 //1,2,4   1 0 1 1 0&...

mybatis plus 主键生成 Twitter雪花算法 id 及修改id为字符型

mybatisplus配置主键生成策略为2,就是使用Twitter雪花算法生成id springboot中配置为:GlobalConfigurationconf=newGlobalConfiguration(newLogicSqlInjector());conf.setIdType(5); 这样生成的是long类型的,如果想把这个id转为字符串类型,则配置主键生成策略为5就行了https://gitee.com/baomidou/mybatis-plus/blob/dev/mybatis-plus-support/src/main/java/com/baomidou/mybatisplus/enums/IdType.java设置ID_WORKER_STR5...

Twitter的分布式自增ID算法snowflake (Java版)

分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID生成机制,所以开发了这样一套全局唯一ID生成服务。 snowflake的结构如下(每部分用-分开):0-00000000000000000000000000000000000000000-00000-00000-000000000000第一位为未使用,接下来的41位为毫秒级时间(41位的长度可以使用69年),然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点),最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号)一共加起来刚好64位,为一个Long型。(转换成字符串后长度最多19)snowflake生成的ID整...

Twitter雪花算法 SnowFlake算法 的java实现

概述SnowFlake算法Twitter设计的一个可以在分布式系统中生成唯一的ID算法,它可以满足Twitter每秒上万条消息ID分配的请求,这些消息ID是唯一的且有大致的递增顺序。原理SnowFlake算法产生的ID是一个64位的整型,结构如下(每一部分用“-”符号分隔):0-00000000000000000000000000000000000000000-00000-00000-0000000000001位标识部分,在java中由于long的最高位是符号位,正数是0,负数是1,一般生成的ID为正数,所以为0;41位时间戳部分,这个是毫秒级的时间,一般实现上不会存储当前的时间戳,而是时间戳的差值(当前时间-固定的开始时间),这样可以使产生的ID从更小值开始;41位的时间戳可以使用69年,(1L<<41)/(1000L*60*60*24*365)=69年;10位节点部分,Twitter实现中使用前5位作为数据中心标识,后5位作为机器标识,可以部署1024个节点;12位序列号部分,支持同一毫秒内同一个节点可以生成4096个ID;SnowFlake算法生成的ID大致上是按...

C# 中使用 RSA加解密算法

  RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。    在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。正是基于这种理论,1978年出现了著名的RSA算法,它通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的DES或IDEA对话密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要。    RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现在的三十多年里,经历了各种攻击的考验,逐渐...
代码星球 代码星球·2021-02-16

C# 分布式自增ID算法snowflake(雪花算法

分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID生成机制,所以开发了这样一套全局唯一ID生成服务。 该项目地址为:https://github.com/twitter/snowflake是用Scala实现的。 snowflake的结构如下(每部分用-分开):0-00000000000000000000000000000000000000000-00000-00000-000000000000第一位为未使用,接下来的41位为毫秒级时间(41位的长度可以使用69年),然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点),最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生...

算法】从一组数中找出和为指定值的任意组合

题目:给定的一组整数,给定一个值X,找出和为X的任意组合。思路:将X视为重量x(kg)的物品,放在天平左侧,数组中的每个数字视为重量为y(kg)的砝码,砝码从大到小逐一放置,直到天平平衡,那么选择的砝码的组合就是我们所要的答案。采用递归的方法。右侧还有x的余量放置第一个砝码后还有x-y1的余量放置第二个砝码后还有(x-y1)-y2的余量以此类推  staticvoidMain(string[]args){NumberGame.Execute();Console.ReadKey();}publicstaticclassNumberGame{privatestaticint[]arr={1,8,3,6,5,2,9,7,4};privateconstintTOTAL=11;//指定合计数privatestaticintgroupNum=0;classNumberType{publicintNumber{get;set;}publicboolUsed{get;set;}}publicstaticvoidExecute(){Console.WriteLine($"数组[{st...

C# 数独算法——LINQ+委托

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceSingleNumber{namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){int[]source={5,4,0,2,9,0,0,1,0,0,2,0,0,0,6,3,0,0,3,0,0,1,0,0,0,5,4,0,6,0,0,0,8,9,0,0,2,5,0,6,7,0,0,3,1,0,0,1,0,2,0,0,6,0,8,3,0,0,0,4,0,0,6,0,0,5,9,0,0,0,8,0,0,7,0,0,3,1,0,4,2};//http://www.sudoku.name/index-cn.php#10332数独来自这个网站int[]result=source.ToArray();//result数组保存解算中间数据和结果Func<bool>IsFinished=()=>result.Where(x=>...
代码星球 代码星球·2021-02-16

[转]递归算法

原文地址:http://blog.csdn.net/wangjinyu501/article/details/8248492一、基本概念       递归算法是一种直接或者间接调用自身函数或者方法的算法。Java递归算法是基于Java语言实现的递归算法。递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解。递归算法,其实说白了,就是程序的自身调用。它表现在一段程序中往往会遇到调用自身的那样一种coding策略,这样我们就可以利用大道至简的思想,把一个大的复杂的问题层层转换为一个小的和原问题相似的问题来求解的这样一种策略。递归往往能给我们带来非常简洁非常直观的代码形势,从而使我们的编码大大简化,然而递归的思维确实很我们的常规思维相逆的,我们通常都是从上而下的思维问题,而递归趋势从下往上的进行思维。这样我们就能看到我们会用很少的语句解决了非常大的问题,所以递归策略的最主要体现就是小的代码量解决了非常复杂的问题。 &nb...
代码星球 代码星球·2021-02-15

一个算法题:括号匹配问题。

问:给予一个字符串为:']]][]]]][[[[[[]]]]',请写出程序求出其有多少对'[]'?/一般这种问题都是想让你通过数据结构去处理,仔细回想一下我们学过的数据结构,栈的先进后出是否能处理这个问题?将字符串遍历,遇到左方括号'['时将其压入栈中,遇到右方括号']'时取出栈顶元素匹配,并将对数加1,这样最后我们就求出来能有多少对方括号了。栈的示意图:流程图:通过分析,我们使用PHP编码实现这个功能://括号匹配问题$str=']]][]]]][[[[[[]]]]';//初始化一个栈$stack=newSplStack();$len=strlen($str);$count=0;for($i=0;$i<$len;$i++){if($str[$i]=='['){$stack->push($str[$i]);}elseif($str[$i]==']'){if(!$stack->isEmpty()&&$stack->pop()=='['){$count++;}}}unset($stack);echo$count;//5可以看出,通过栈去实现括号匹配文...

用PHP实现一些常见的排序算法

1、冒泡排序:两两相比,每循环一轮就不用再比较最后一个元素了,因为最后一个元素已经是最大或者最小。functionmaopaoSort($list){$len=count($list);for($i=0;$i<$len-1;$i++){for($j=0;$j<$len-$i-1;$j++){if($list[$j]>$list[$j+1]){$tmp=$list[$j];$list[$j]=$list[$j+1];$list[$j+1]=$tmp;}}}return$list;}2、选择排序:选定一个作为基本值,剩下的和这个比较,然后调换位置。functionxuanzeSort($list){$len=count($list);for($i=0;$i<$len-1;$i++){$pos=$i;for($j=$i+1;$j<$len;$j++){if($list[$pos]>$list[$j]){$pos=$j;}}if($pos!=$i){$tmp=$list[$pos];$list[$pos]=$list[$i];$list[$i]=$tmp;}...

PHP AES加解密算法

 <?php/***Desc:Aes加解密php7.1+*Class:Aes*Package:appcommonlib*User:manzb*Date:2018/10/1817:30*/namespaceappcommonlib;classAes{private$iv='';private$key='';private$method='';function__construct(){$aes=config('admin.aes');/***$aes内容'aes'=>['key'=>'309w4wb42104160d2g6806lv1ki60f98',//aes加密盐'method'=>'AES-256-CBC',//加密方式'hex'=>'00000000000000000000000000000000',//生成iv参数用,貌似是为了安卓ios相互兼容取的这个值],可根据每个用户账号的不同设置不同的key字段*/$this->method=$aes['method'];$this->key=hash('sha256',$aes['k...
代码星球 代码星球·2021-02-15

记录一些经典的算法

每个飞机只有一个油箱,飞机之间可以相互加油(注意是相互,没有加油机),一箱油可供一架飞机绕地球飞半圈。问:为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机? (所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场)解答:我们把全程划分为多个4分之1段,可以知道,要一架飞机全程需要两箱油,假设飞机A为需要全程的飞机,则在4分之1时油必须满箱,由此考虑过程:ABC同时起飞,至8分之1时,C给AB各4分之1的油,剩下4分之1油返回,AB继续飞行到4分之1时,B给A加4分之1油,将A加满,B剩余2分之1油,返回。A飞至2分之1时,D反方向起飞,至4分之3时,D给A加4分之1油,E反方向飞,到8分之1的位置,给AD各4分之1的油,ADE同时返回。注:此方法为最优解,其余加油方式均不能满足。 某幢大楼有100层。你手里有两颗一模一样的玻璃珠。当你拿着玻璃珠在某一层往下扔的时候,一定会有两个结果,玻璃珠碎了或者没碎。这幢大楼有个临界楼层。低于它的楼层,往下扔玻璃珠,玻璃珠不会碎,等于或高于它的楼层,扔下玻璃珠,玻璃珠一定会碎。玻璃珠碎了就...
代码星球 代码星球·2021-02-15
首页上一页...45678...下一页尾页