-
2019-05-12 07:48:19
数字货币存在信任问题。
区块链的支持者声称,随着比特币的出现,中央职能和金融机构将很快遭受淘汰的命运。区块链技术将会主宰整个世界,贪污受贿将不复存在。社会将变得“无需信任”。
讽刺的是,绝大多数人依然不信任数字货币。
支持者表示,这些人不了解区块链背后的技术创新。(似乎只需一场关于共识协议的讲座就可以使人放弃怀疑的想法和交出他们的储蓄账户。)
这儿有一花招:“有了比特币,你再也无需信任任何中央实体或交易对手。因此,比特币是无需信任的。”那么就因为我们无需信任银行或交易对手,信任就完全不存在吗?
实际上,不信任比特币是完全合理的。因为比特币并非无需信任。事实上,比起美元,比特币更加需要信任。
数字货币的关键创新点在于它们将信任去中心化,而非消除信任。
不存在“无需信任”一说
任何事物都需要信任。简而言之,如果不交出你的信任,是不可能验证任何事物的。
以科学为例。
科学领域是不存在中央权威的。其完全依赖于经验观测、公开出版及去中心化同行评审。这与区块链背后的原理有点相似。那么这是“无需信任”吗?
理论上来讲也许是。但是从实践面来说,科学是建立在大量的信任基础上的。
思考一下阅读一篇科学研究的过程中涉及到的信任。如果你认真地对待该研究,你信任的是什么呢?
首先,你相信你正在阅读的文章准确地报告了研究中的真实内容。你相信这些数据集库统计数据是正确的,因为你并没有亲自重新运行回归。你相信这没有用不诚实的手段达到统计显著性。你相信不存在更多的显示着明确反结论的研究,也相信它们没有被撇除到论文抽屉里。你相信研究中的方法论是可复制的,也相信实验者没有被一些小事所污染,比如实验的性别或者所有实验对象都是大学本科生。你相信研究结论的产生并非受到行业融资或一位知道自己需要得出某个结论来促进事业发展的教授的推动。此外当然, 你相信这些研究者并未彻头彻尾地伪造数据。
你信任科学,是因为你信将你的任被委托给了称为“科学共识”的去中心化过程。这有时会发挥作用,但时常又不会。科学并非是无需信任的。
然而,信任科学依然是一个正确的选择。你不会出于是去中心化的或无需信任的或其它任何类似原因而信任科学。你信任科学是因为,尽管科学存在各种问题,科学依然发挥作用。它是我们认知范围内促进人类知识发展的最佳过程。这份信任是付出了很多努力换来的,而如今,科学在社会中占据着至关重要的地位。
我们对科学付诸的信任与科学信任去中心化是两条正相交的垂线。
那么加密货币又是怎么回事呢?
加密货币中的信任
去中心化数加密币意味着你无需信任中央机构。 要知道,据比特币协议规定,每一个节点都存储每一次交易的记录并且由其仔细检查一切。。这一过程无需信任,不是吗?
-
全球可获得的比特币节点热度图(https://bitnodes.earn.com/-)
这纯属无稽之谈。信任并未消失,而是分配给了更多的交易方。那么信任现在在哪儿呢?
几乎哪里都是。
你相信开发者不会构建有漏洞或不安全的软件。你相信矿工们不会串通一气。如果你不运行一个全节点(你很可能没有想过,世界上仅有1万个比特币全节点),很明显你得信任意碰巧连接上的全节点。你相信社区不会撇开你进行硬分叉。你相信民族国家和企业不会停叫停矿,或发起51%攻击。你相信市场没有被操控或者,如果市场被操控了,也是以对你有利的方式。你相信矿工和恶意行为者不会超越你,或打败你,或攻击你使用的合约。你相信你的钱包软件以生成加密安全密钥。你相信攻击者不会通过BGP挟持攻击来分割网络。你相信交易所会保护你的资产 不 受攻击 或不会在这发生时候对你隐瞒。以及,当然,你相信,无论你以何种方式存储数加密币,你的凭证都不会遭受窃取。
当然,在一个你对所有细节都不感兴趣的简化对手模式中,加密货币拥有很好的安全属性。然而事实上,在被你抹去的缺口中需要填补上海量的信任。
工程就是这些缺口的填充物。同时,坚实的工程是要花时间的,要花十年以上的时间。
即使如此,比特币诞生9年后的今天,数加密币仍存在许多未解的问题。你相信共识协议实际上正确而不具有潜在的大型漏洞吗?你相信费用不会激增到无法使用吗?你相信数字货币在网络拥堵的情况下不会暴跌吗?你相信量子计算机不会出现并然后解开所有公钥加密吗?你相信即使以上问题都成功了,民族国家也不会认为这是一种威胁并立即 复制 他们的 成功 吗?何况他们还有地缘政治权力加持。
不言而喻的是,美元比比特币需要的信任少得多。没有人可以削弱美元,但是有由此动机民族国家或企业可以轻易操控或摧毁比特币。他们为此面临的后果很有可能微不足道。
这并不是说比特币很脆弱,或者说你不应该使用比特币。这是一个漂亮的协议,也是有史以来第一种解决双重支付问题的去中心化货币。
然而,工程就是关于折衷和权衡。加密货币和法定货币相比会作出不同的折衷和权衡。很少有一个系统在严格意义上好于另一个系统——更多时候在于你选择哪些优势和劣势罢了。
原则上,去中心化会带来更加强大的系统。但是很明显,比特币尚未实现这一点。
创新需要信任
事实就是这样。
加密货币需要充足的信任。这点没问题。任何系统的生命的初期,信任是当然需要的。这是一种试验。我们如今仍然处在早期过程中。
我相信,加密币是金融的未来。然而,如果数字货币赢了,不也会是因为它们“无需信任”。它们不是“无需信任”。而是会因为它们更佳。它们必须比法定货币更好地解决实际问题。
如果加密币赢了,那会是因为它们便捷的小额和大额支付,它们的全球实可性,它们更快的结算时间,它们更低的手续费,它们的不变可性,它们的可编程性,以及它们通过智能合约取消中介和将昂贵的金融关系进行自动化的能力。
要了解更多我针对数字货币相较于法定货币的改进之处发表的观点的话,请阅读:我们已经了解区块链的杀手级应用
去中心化协议是迷人和非比寻常的。但是,去中心化本身不会给你带来什么。信任是通过数年的好工程赢得的,而不是通过协议设计或精致的白皮书。
尽管主流关注十分狂热,加密货币仍然处在初期阶段。也许有一天它们会比法定货币强劲的多, 但是我们还有很长的路要走。
有一点是可以肯定的:加密币已经就“金钱可以成为什么”提出了强有力的问题。加密币引发我们的以下设想:如果货币系统不只是人与民族国家间的一纸契约,而是一种社区共享之事,为每个人所有、运营和治理,会如何呢?
是一个激进的想法,也是过去50年以来最吸引人的金融创新之一。随着众多想法的走势,我认为这是相当不错的想法。
但是,这个想法有风险。
别让任何人说服你相信这个想法不存在风险。
—Haseeb
链接: https://hackernoon.com/bitcoin-is-not-trustless-350ba0060fc9
更多相关内容 -
一次性说清楚秒验(本机号码一键登录)
2021-03-03 14:58:50点击上方蓝字关注我们技术总监面试,提问:Redis热点key解决方案一、关于秒验(一键登录)基本原理秒验(一键登录)产品整合了三大运营商特有的数据网关认证能力,升级短信验证码体验,应用于...点击上方蓝字关注我们
一、 关于秒验(一键登录)基本原理
秒验(一键登录)产品整合了三大运营商特有的数据网关认证能力,升级短信验证码体验,应用于用户注册、登陆、支付、安全校验等场景,可实现用户无感知校验,操作更安全、便捷、低时延的特点。秒验(一键登录)产品提供两种手机号认证方式,一种是通过用户授权后从网关侧获取用户当前使用的手机号码,并完成注册或登录流程。全程仅需客户授权,认证过程完全无感知。3秒内完成,客户体验极佳。另一种是本机号码校验:验证用户本机号码与客户端输入号码或账号绑定号码的一致性。
二、 传统登录注册验证方式痛点
1、 传统用户登录注册多为用户名和密码,用户注册的地方多了,登录注册信息难以记住。特别是当前移动互联网发达情况下,应用繁多,如果每个应用都需要记住用户名和密码,恐怕大多人难于应对。况且基于互联网实名认证要求,仅凭用户名和密码,后续实名认证还需要用户绑定手机,增加了用户操作步骤。极大降低客户体验度。
2、 使用短信验证码的短信接口容易被恶意调用当成短信轰炸作用。短信容易被拦截,为了防范风险,获取短信验证码通常还需要进行行为验证,再加上等待短信验证码到达时间和手动输入,大大增加登录时间。
3、 很多用户为了方便记住各种应用用户名和密码,经常使用相同的用户名和密码,这就存在撞库拖库的风险。
4、 传统的注册登录以及第三方登录方式很难获取客户的手机号码,不利于后续用户服务。
5、 传统的账号注册登录认证体系,容易被人使用设备牧场模拟。存在安全隐患。
6、 传统的账号注册登录认证体系,极易被羊毛党攻破。导致营销效果大打折扣。
三、 秒验产品优势
1、 客户端用户输入手机号码或获得用户授权后,一键即可完成认证,是短信验证码的升级方案,校验更安全、便捷、低时延。平均3秒内完成,比短信验证码快10倍。
2、 只需一次开发接入即可支持三网手机号、虚拟运营商号、支持携号转网号码。
3、 集成SDK便捷简易接入,易开发维护。降低开发成本。
4、 可防控羊毛党利用接码平台、设备牧场等手段套取平台优惠。提高营销方案效果。
5、 用户无需记住用户名和密码,以手机号作为账号管理体系,符合监管部门实名认证需求,同时提高客户注册登录体验度。提升注册转化率。
6、 应用场景丰富,适用于以手机号进行注册、登陆、安全风控的场景,可实现用户无感知校验,拓宽校验场景。
四、 秒验(本机号码一键登录)与传统短信验证码验证比较。
一键登录与传统短信验证码都是为了验证本机号码的真实性。传统短信验证码验证方式一般过程为客户输入手机号-》通过行为验证(如图形验证码)-》点击获取验证码-》接收验证码-》输入验证码验证是否为本机号码,全程预计需要30秒以上。如果客户输入错误,或者短信验证码接收慢或被拦截,过程将更长久。而秒验(一键登录产品)全程延迟只需要3秒内完成,速度比短信验证码快10倍。
五、 秒验使用场景
1、 所有安卓和苹果手机APP需要注册、登录的,均可以把原有的账号密码、短信验证码、第三方登录改造为使用本机号码一键登录。
2、 手机APP应用安全风控、支付前本机号码认证的。
3、 支持三网手机、虚拟运营商号、携号转网等。
4、 特别推荐以手机号作为账号管理体系的APP应用。
六、 秒验(一键登录)交互过程
秒验(一键登录注册)交互过程有两种形式,一种是通过用户授权获取本机号码与网关进行比对认证,另一种是用户输入手机号码与网关进行验证是否为本机号码。
1、用户授权一键登录注册交互过程。
2、用户输入手机号码进行比对认证交互过程。
七、 秒验常见问题。
1、什么是本机号码校验?
业务App提供需要校验的号码,通过调用运营商数据网关校验所提供号码是否本机号码来进行注册或登录。使用本机号码校验时,用户终端需支持使用SIM卡上网,以实现对运营商数据网关校验能力的调用;当用户终端无法通过SIM卡访问运营商数据网络,可以无缝切换到短信验证码。
2、是否支持三网?
是的,支持对三大运营商手机号码进行认证,包括中国移动、中国联通、中国电信。
是否支持H5页面和微信小程序?
如果APP集成了号码认证sdk,则APP中的native或h5页面都可支持号码认证;但号码认证不支持纯粹的H5页面,也暂不支持微信小程序
3、支持哪些网络环境?
当用户终端网络环境为2G、3G、4G、2G和wifi同时开启、3G和wifi同时开启、4G和wifi同时开启,均可发起校验。当用户终端仅wifi开启、移动数据关闭时,无法发起数据网关校验。
支持哪些终端?
支持Android和IOS两大平台,需在APP中集成SDK使用。
4、是否支持在国际漫游下发起认证?
国际漫游时可以发起。
5、当网络环境不支持发起网关认证时,如何进行后续操作?
系统调用初始化阶段会返回当前网络环境是否支持进行网关认证,当返回不支持时,您可以引导用户通过短信或语音等方式进行认证。
在新用户注册场景中已经接入短信服务,接入号码认证服务需要进行哪些改造 ?
(1)客户端 a.用户UI优化。使用号码认证服务时,用户仅需输入手机号码,无需输入验证码,因此用户UI仅提供手机号码输入框即可,无需提供验证码相关UI。当初始化判断网络环境不支持号码认证、或号码认证结果返回不一致,您可以选择将UI切换至原使用短信验证码的页面。 b.在客户端APP中集成号码认证SDK。(2)服务端 在服务端对接号码认证API。
6、如何确保认证结果正确?
基于运营商网络对SIM卡的电信级认证能力,认证结果准确可靠。
7、调用过程的安全性如何保障?
基于运营商及电信级运维安全保障。核心认证过程分为2步。第1步,通过移动数据网络发起请求,获取accessCode;第2步,通过accessCode和手机号请求认证结果。在第1步中,关于accessCode的有效性说明如下。(1)有效次数为一次有效,使用后立即失效。(2)有效时长。对于移动的手机号码,accessCode有效期为2分钟;对于联通的手机号码,accessCode有效期为5分钟;对于电信的手机号码,accessCode有效期为1分钟。在第2步请求认证结果时,我们会基于访问密钥对服务端请求进行鉴权。
是否需要用户授权?
对于用户主动输入手机号码的场景,建议APP提供方在相关服务协议中提供说明,无需另行授权;对于sdk预取手机号成功的场景,此时无需用户手动输入,请确保APP提供方已获得用户授权再发起认证。
8、认证过程如何收费?
调用初始化接口不计费。调用认证接口时,如果认证结果是一致、不一致,会对本次认证计费;如果认证结果是无法判断,则不计费。
9、SDK的大小,集成后对开发者app体积的影响有多少?
android:安装后大小:1.2MB(包含资源)
iOS: 安装后大小:1.3MB
总结,对开发者的app的体积增加不大.
如果对应用体积要严格要求的客户,秒验可以提供定制化方案。
10、一键验证目前的性能如何?
目前可以做到一秒内验证2000次。
11、秒验SDK对手机操作系统有哪些版本要求?
答:版本最低要求分别为:ios 8.0 ;Android 5.0。
12、手机双卡问题
答:双卡情况下获取的是正在使用流量的手机号码,
暂不支持获取非流量卡的手机号码,期待运营商后续完善此功能
13.一键验证SDK更新需要重新打包吗?
答:SDK提供的是原生的开发集成具包,开发者可以根据SDK更新的内容选择更新SDK,但更新集成SDK后是需要打包发布的。
越来越多APP认证登录方式都在改造成本机号码一键登录,将来一定替代传统的手机短信验证码!近期短信产品成本上升后,一键登录产品价格远低于短信验证码。可为企业节省更多的费用。
回复【干货】获取精选干货视频教程
回复【加群】加入疑难问题攻坚交流群
回复【mat】获取内存溢出问题分析详细文档教程
回复【赚钱】获取用java写一个能赚钱的微信机器人
回复【副业】获取程序员副业攻略一份
喜欢就点个在看再走吧
-
历经一个月,终于搞定了SVM(支持向量机)-附源代码解析
2020-06-11 17:51:29中间也有好几次放弃,不想写这篇总结了,但是之前立下的誓言,要将学习到的每一个机器学习算法写成博客总结,一方面呢,检验自己是否真的明白了,另一方面,也希望自己的理解能够帮助到一些人。历经一个月,终于搞定了SVM(支持向量机)-附源代码解析
前言
其实整体算下来,断断续续的也得有快两个月了(原谅博主比较笨)。中间也有好几次放弃,不想写这篇总结了,但是之前立下的誓言,要将学习到的每一个机器学习算法写成博客总结,一方面呢,检验自己是否真的明白了,另一方面,也希望自己的理解能够帮助到一些人。
源码已上传到GitHub上,有需要的小伙伴自取:源码地址,如果有帮到你,不要吝啬你的小⭐⭐随便唠唠
1.支持向量机名字由来
因为这个算法的关键点就是支持向量,那么,什么叫支持向量呢? 就是离分割超平面(在二维中叫做分割线)最近的那些点。
看上面这个图,中间的实线就是分割超平面,两个虚线所经过的点就是支持向量。这时候大家可能又有疑问了,图b 和图c有什么区别呢? 我们可以看到,图b分割虚线和实线之间的距离比较大,而图c分割虚线和实线之间的距离比较小。SVM要找的就是使间隔最大。
2. 为什么很多书籍和老师都说支持向量机比较难呢?
原理我们从面上很好理解,就是找到使支持向量与分割超平面距离最大的实线即可。但是具体的数学推导,就需要大量的数学方面的知识,比如拉格朗日函数、凸优化、KKT条件、对偶函数。这些知识本身不算太难,但是难点就在于你能不能完整的从头到尾将这个思路理下来,这里我指的是用笔把公式推导下来。我认为还是挺难的,最起码对我来说。之前跟着博客大佬推了一遍公式,两天没看,第三天就立刻忘记了推到思路了,以及里面的一些步骤为什么那么做。
网络上有很多真大佬,写的非常详细,推导过程,以及使用的理论讲的非常清楚,但是,我看完之后,我觉得,这种方式对我这种水平比较低的人来说,不太友好,来来回回看了不下五遍,愣是没有形成一个完整的思路。
所以,在这篇文章中,我想以我的角度,去给有同样困惑的人带来一些帮助。这篇文章不会给你解释数学原理,但是我会在文末给你提供相应知识的链接。
3. 读懂源代码对我们的理解帮助非常巨大
我之前在学习K-mean算法和逻辑回归的时候,认为只要懂算法思想就可以了,并且这些算法思想本身也不复杂。
但是在我学习SVM的时候,我发现,源代码对我的帮助太大了。我当时遇到的问题是,我能够将公式推导完毕,但是不知道如何将数学公式理论和实际代码工程相结合,我相信这不仅是我薄弱的地方,也是许多新人薄弱的地方。也许文字对于算法思路的描述能够让我们感受到原来如此,那么,源代码对于算法思路的描述,能够让我们恍然大悟。这篇文章,我就主要带大家关联源代码和数学公式。
4. 学习机器学习算法是不是只明白思想就行,需不需要动手去写代码实现一下?
很多人跟我的答案肯定是一样的,那就是需要去实现一下。
原因大概有两点:其一,我们需要更加深入的了解算法原理。我们学习算法的目的我们得搞清楚,也许我们是做工程,需要了解大量得算法,在具体项目中选择合适的算法;也许我们是做研究,需要了解算法思想以及其优缺点,对算法进行二次开发改进;再或许我们只是为了了解思想,利用这个思想去思考这个世界,无论你属于哪一个,都需要对算法有一个更加深入的了解。现在有很多现成的机器学习工具包,使用起来非常方便,如果你对实现细节不清楚的话,对于特殊问题,就无法根据现有的算法接口进行定制化修改。
其二,提高我们的工程能力。所谓的工程能力,就是从原来一个想法,到最终实现的一个过程。有人说,我是搞研究的,只需要明白原理,不用写太多。那你告诉我,为什么公司招的都是算法工程师呢?即便是你去研究所工作,没有一定的工程能力,也是会有很大劣势的。
支持向量机公式推导
一、推导
我们单独拿出来图b
我们前面也说过了,我们需要找的就是使d值最大的的分割超平面。
首先超平面公式[见参1]:
w 为法向量,b为截距,法向量指向的一侧为正类,另一侧为负类。
分类决策函数公式:
函数间隔公式[见参2]:
函数间隔体现的是分类的正确性,如果h>0,表示分类正确,如果h<0,表示分类错误。同时也体现着数据点到超平面的远近。几何间隔公式[见参2]:
几何间距体现的点到超平面的距离,这里和图中支持向量到超平面距离d的一样的。我们同时将w和b等比例变化,超平面并没有发生改变。比如3w和3b。此时函数间隔也会相应的扩大3倍,但是对于几何间隔来讲,并没有发生改变。
我们要获得最大间隔,就需要几何间距达到最大:
前面我们提到,等比例变换w和b,超平面并不会发生改变,但是函数间隔会发生改变。此时,我们令函数间隔h=1,此时公式变为:
等价于:
等价的原因是求解这两个式子的目标都是一样的。2. 推导
在推导1中,我们推导出了需要求解的公式,除了公式,它还有一些限定条件:
这里限定条件为函数间隔要≥1.原因是当函数间隔=1时,当前的数据点是距离超平面最近的点,这些点就是支持向量。所以,我们的数据点要满足,所有点的函数距离要≥1,也就是我们前面给定的1.。
如何把条件和公式结合在一块呢?这里用到了拉格朗日函数。我们使用拉格朗日乘子将条件和公式写到一起:
λ为拉格朗日乘子,λ≥0.
这里拉格朗日函数有一个性质,就是对偶性,根据对偶性,原始问题L的对偶问题为其极大极小问题
即 :
接下来我们对
进行计算:将计算结果带入到式子中:
接下来计算
我们上面的计算先放在这里,我们先说一下KKT条件
前面我们使用了对偶函数来求解问题的解,但是原问题和对偶问题需要满足一定的条件才能等价,这个条件,就叫做KKT条件
上述公式用在我们这里应该是这样的:
我们将上面的式子整理一下:
接着我们重写之前的分类决策公式**【源代码公式1】**:3.推导-引入松弛变量
为什么要引入松弛变量?
答:很多数据集都是线性不可分的数据集,这意味着我们无法通过一个线性分类器(超平面)去实现数据的分类。同时,也就不能满足函数间隔大于等于1的约束条件(这个条件的前提数据是线性可分的),于是我们引入一个变量,这个变量就叫所松弛变量,去解决这个问题,具体解决办法看下面的公式。
我们令松弛变量为ε。
我们的公式约束函数和公式可修改为:
这里C称之为惩罚参数,当C的值很大时,对误分类的惩罚就越大。然后改进后的拉格朗日函数是:
紧接着我们进行极大极小对偶问题处理:
最终化简形式为:4. 推导3-SMO算法
SMO算法是现在运行速度非常快的强大算法,用于训练SVM。
它的主要思路:
- 每次循环中选择两个λ进行优化处理,一旦找到一对满足条件的λ,那么就增大其中一个同时减小另外一个。
- 这里的条件指的是 两个λ在间隔边界之外,而第二个条件是两个λ没有进行过处理。
根据条件,我们可写出下面的式子:
当y1≠y2,λ1+λ2=d当y1=y2,λ1-λ2=d
由此我们可以先画出一个图:
由于我们不知道d的取值,所以,有我们画出了两条线,分别对应着d>0和d<0的情况。
我们设初始可行解为
,
,最优解为
,
我们需要对进行条件约束,根据不等式条件
和图中两种不同的等式条件。
我们设
,由此可得出以下两种范围**【源代码公式2】**:可能大家不理解为什么能写成这样,下面我用一张图来解释一下:
图中我们能够看到,由于我们不知道d的值的正负,所以会出现图中的情况。
对于y1≠y2:
三个绿圈是我们可以取的值,但是为了满足这两种情况和不等式条件的要求,我们取这两种情况的交集,所以,针对下限L,我们取绿点中最大的即
对于上限H,我们取灰色点中的最小值,即
对于y1=y2,同理,这里我就不拿图来再次说明了,直接给出结论了:对于下限L,我们的取值范围是
对于上限H,我们的取值范围是
接下来,又到了公式推导的时候了,大家挺住!我们前面选出了两个λ,进行修改,那么,对于相对于这两个λ来讲,其他的λ就是常数了,我们可以对下面公式进行二次推导:
接下来,我们根据λ1和λ2的等式关系,消除掉λ1:
为了方便,我们令y1d=a,y1y2=b
此时,
(这个b和前面决策函数式子中得b不是一回事,我的一个失误,所以,将前面得b在后面以b*的形式出现,大家见谅。)将我们上面得到的关系带入到w公式中:
还记得我们前面的任务吗?所以,此时我们对
进行求导:紧接着,我们根据这个等式可以提出来lλ2:
接着,我们先设几个数(你要是问我为什么设,我只能告诉你是半猜的,根据式子的形式)【源代码公式3】:
然后,我们对λ2的等式进行带入化简**【源代码公式4】**:
之后呢,我们对它进行修剪,使用我们之前设定了L和H**【源代码公式5】**:
接着,我们根据来求解λ1的新值**【源代码公式6】**:求出来了λ之后,我们接下来要求解b*。
根据KKT条件,我们能够得出以下结论:
在我们完成两个变量的更新之后,当λ满足第二种条件时,则有**【源代码公式7】**:由于我们对于λ满足条件也是假设,所以对于b也会进行一些处理**【源代码公式8】**:
好了,到这里,整个公式全部推导完毕,终于完事了。如果大家有什么问题,欢迎博客底下留言。
支持向量机源代码分析
我们先来看一张源代码输出得图片:
中间蓝线就是分割超平面,图中带有红圈得是支持向量,也就是距离超平面最近得数据点。
注:代码中使用得alphas来替代λ
1. 随机选择另一个alphas
def selectJrand(i, m): j = i #选择一个不等于i的j while (j == i): j = int(random.uniform(0, m)) return j
这里我们通过随机数得方式,选取一个与i不相等得数。
2. 修剪λ
def clipAlpha(aj,H,L): if aj > H: aj = H if L > aj: aj = L return aj
3. 主函数
def smoSimple(dataMatIn, classLabels, C, toler, maxIter):# #转换为numpy的mat存储 dataMatrix = np.mat(dataMatIn); labelMat = np.mat(classLabels).transpose()#转置成列向量 #初始化b参数,统计dataMatrix的维度 b = 0; m,n = np.shape(dataMatrix)# m=100,n=2 #初始化alpha参数,设为0 alphas = np.mat(np.zeros((m,1)))# 100个alpha #初始化迭代次数 iter_num = 0 #最多迭代matIter次 while (iter_num < maxIter): alphaPairsChanged = 0 #用于记录alpha是否已经进行优化 for i in range(m): #步骤1:计算误差Ei #此公式为分类决策公式 fXi = float(np.multiply(alphas,labelMat).T*(dataMatrix*dataMatrix[i,:].T)) + b #print("fXi:",fXi) Ei = fXi - float(labelMat[i])#误差 #优化alpha,更设定一定的容错率。 if ((labelMat[i]*Ei < -toler) and (alphas[i] < C)) or ((labelMat[i]*Ei > toler) and (alphas[i] > 0)): #随机选择另一个与alpha_i成对优化的alpha_j j = selectJrand(i,m) #步骤1:计算误差Ej fXj = float(np.multiply(alphas,labelMat).T*(dataMatrix*dataMatrix[j,:].T)) + b Ej = fXj - float(labelMat[j]) #保存更新前的aplpha值,使用深拷贝 alphaIold = alphas[i].copy(); alphaJold = alphas[j].copy(); #步骤2:计算上下界L和H if (labelMat[i] != labelMat[j]): L = max(0, alphas[j] - alphas[i]) H = min(C, C + alphas[j] - alphas[i]) else: L = max(0, alphas[j] + alphas[i] - C) H = min(C, alphas[j] + alphas[i]) if L==H: print("L==H"); continue #步骤3:计算eta,即η。 eta = dataMatrix[i,:]*dataMatrix[i,:].T +dataMatrix[j,:]*dataMatrix[j,:].T-2.0 * dataMatrix[i,:]*dataMatrix[j,:].T if eta == 0: print("eta=0"); continue #步骤4:更新alpha_j alphas[j] += labelMat[j]*(Ei - Ej)/eta #步骤5:修剪alpha_j alphas[j] = clipAlpha(alphas[j],H,L) #abs 函数 返回数字的绝对值 if (abs(alphas[j] - alphaJold) < 0.00001): print("alpha_j变化太小"); continue #步骤6:更新alpha_i alphas[i] += labelMat[j]*labelMat[i]*(alphaJold - alphas[j]) #步骤7:更新b_1和b_2 b1 = b - Ei- labelMat[i]*(alphas[i]-alphaIold)*dataMatrix[i,:]*dataMatrix[i,:].T - labelMat[j]*(alphas[j]-alphaJold)*dataMatrix[i,:]*dataMatrix[j,:].T b2 = b - Ej- labelMat[i]*(alphas[i]-alphaIold)*dataMatrix[i,:]*dataMatrix[j,:].T - labelMat[j]*(alphas[j]-alphaJold)*dataMatrix[j,:]*dataMatrix[j,:].T #步骤8:根据b_1和b_2更新b if (0 < alphas[i]) and (C > alphas[i]): b = b1 elif (0 < alphas[j]) and (C > alphas[j]): b = b2 else: b = (b1 + b2)/2.0 #统计优化次数 alphaPairsChanged += 1 #打印统计信息 print("第%d次迭代 样本:%d, alpha优化次数:%d" % (iter_num,i,alphaPairsChanged)) #更新迭代次数 if (alphaPairsChanged == 0): iter_num += 1 else: iter_num = 0 print("迭代次数: %d" % iter_num) return b,alphas
看着特别长,没关系,咱们慢慢说:
- 方法参数分别为数据集、类别标签、常数C、容错率、最大循环数
- 首先我们初始化alphas和b。
- 接下来一个while循环,循环最大次数就是参数maxIter
- 然后我们使用一个变量alphaPairsChanged来控制alphas是否进行优化
- fXi为分类决策公式,对应得公式为【源代码公式1】
- 接着我们求解误差E,对应公式为【源代码公式2】
- 通过我们设定得条件,误差值得绝对值是否大于我们参数中得容错率和alpha的取值
- 随机选择一个不等于i的数j
- 接着往下,通过if语句,来对下限L和上限H进行赋值
- 计算eta,也就是我们公式中的η,对应的是公式为【源代码公式3】
- 更新alpha[ j ],对应的公式为【源代码公式4】
- 紧接着对alpha[ j ]进行修剪,对应【源代码公式5】
- 更新alpha[ i ]的值,对应公式为【源代码公式6】
- 更新b1、b2的值,对应公式为【源代码公式7】
- 根据b1、b2更新b,对应公式为【源代码公式8】
基本上到这里就全部结束了,非常感谢大家能够耐心的看完,如果有需要完整源代码,请在博客底下留言。第一次写这么长的文章,如哪里有不合适的地方,欢迎大家批评指正。
参考资料:
- 超平面公式推导
- 《统计学习方法 第二版》 p133
- 支持向量机原理篇之手撕线性SVM
- 如何理解超平面?
- 《机器学习实战》
-
支持向量机(SVM)简介
2017-10-24 10:25:29支持向量机(SVM)简介支持向量机(support vector machine, SVM):是监督学习中最有影响力的方法之一。类似于逻辑回归,这个模型也是基于线性函数wTx+b的。不同于逻辑回归的是,支持向量机不输出概率,只输出类别。当wTx+b为正时,支持向量机预测属于正类。类似地,当wTx+b为负时,支持向量机预测属于负类。
支持向量机的一个重要创新是核技巧(kernel trick)。核技巧观察到许多机器学习算法都可以写成样本间点积的形式。例如,支持向量机中的线性函数可以重写为:
其中,x(i)是训练样本,α是系数向量。学习算法重写为这种形式允许我们将x替换为特征函数Ø(x)的输出,点积替换为被称为核函数(kernel function)的函数k(x,x(i))= Ø(x)•Ø(x(i))。运算符•表示类似于Ø(x)TØ(x(i))的点积。对于某些特征空间,我们可能不会书面地使用向量内积。在某些无限维空间中,我们需要使用其他类型的内积,如基于积分而非加和的内积。
使用核估计替换点积之后,我们可以使用如下函数进行预测:
这个函数关于x是非线性的,关于Ø(x)是线性的。α和f(x)之间的关系也是线性的。核函数完全等价于用Ø(x)预处理所有的输入,然后在新的转换空间学习线性模型。
核技巧十分强大有两个原因:首先,它使我们能够使用保证有效收敛的凸优化技术来学习非线性模型(关于x的函数)。这是可能的,因为我们可以认为Ø是固定的,仅优化α,即优化算法可以将决策函数视为不同空间中的线性函数。其二,核函数k的实现方法通常比直接构建Ø(x)再算点积高效很多。
在某些情况下,Ø(x)甚至可以是无限维的,对于普通的显示方法而言,这将是无限的计算代价。在很多情况下,即使Ø(x)是难算的,k(x,x’)却会是一个关于x非线性的、易算的函数。
支持向量机不是唯一可以使用核技巧来增强的算法。许多其他的线性模型也可以通过这种方式来增强。使用核技巧的算法类别被称为核机器(kernel machine)或核方法(kernel method)。
核机器的一个主要缺点是计算决策函数的成本关于训练样本的数目是线性的。因为第i个样本贡献αik(x,x(i))到决策函数。支持向量机能够通过学习主要包含零的向量α,以缓和这个缺点。那么判断新样本的类别仅需要计算非零αi对应的训练样本的核函数。这些训练样本被称为支持向量(support vector)。
当数据集很大时,核机器的计算量也会很大。
在机器学习中,支持向量机(support vector machine,常简称为SVM,又名支持向量网络)是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。
除了进行线性分类之外,SVM还可以使用所谓的核技巧有效地进行非线性分类,将其输入隐式映射到高维特征空间中。
当数据未被标记时,不能进行监督式学习,需要用非监督式学习,它会尝试找出数据到簇的自然聚类,并将新数据映射到这些已形成的簇。将支持向量机改进的聚类算法被称为支持向量聚类,当数据未被标记或者仅一些数据被标记时,支持向量聚类经常在工业应用中用作分类步骤的预处理。
动机:分类数据是机器学习中的一项常见任务。 假设某些给定的数据点各自属于两个类之一,而目标是确定新数据点将在哪个类中。对于支持向量机来说,数据点被视为p维向量,而我们想知道是否可以用(p-1)维超平面来分开这些点。这就是所谓的线性分类器。可能有许多超平面可以把数据分类。最佳超平面的一个合理选择是以最大间隔把两个类分开的超平面。因此,我们要选择能够让到每边最近的数据点的距离最大化的超平面。如果存在这样的超平面,则称为最大间隔超平面,而其定义的线性分类器被称为最大间隔分类器,或者叫做最佳稳定性感知器。
定义:更正式地来说,支持向量机在高维或无限维空间中构造超平面或超平面集合,其可以用于分类、回归或其他任务。直观来说,分类边界距离最近的训练数据点越远越好,因为这样可以缩小分类器的泛化误差。尽管原始问题可能是在有限维空间中陈述的,但用于区分的集合在该空间中往往线性不可分。为此,有人提出将原有限维空间映射到维数高得多的空间中,在该空间中进行分离可能会更容易。为了保持计算负荷合理,人们选择适合该问题的核函数 k(x,y)来定义SVM方案使用的映射,以确保用原始空间中的变量可以很容易计算点积。高维空间中的超平面定义为与该空间中的某向量的点积是常数的点的集合。定义超平面的向量可以选择在数据基中出现的特征向量xi的图像的参数αi的线性组合。通过选择超平面,被映射到超平面上的特征空间中的点集x由以下关系定义:Σiαik(xi,x)=constant。注意,如果随着y逐渐远离x,k(x,y)变小,则求和中的每一项都是在衡量测试点x与对应的数据基点xi的接近程度。这样,上述内核的总和可以用于衡量每个测试点相对于待分离的集合中的数据点的相对接近度。
应用:(1)、用于文本和超文本的分类,在归纳和直推方法中都可以显著减少所需要的有类标的样本数;(2)、用于图像分类。实验结果显示:在经过三到四轮相关反馈之后,比起传统的查询优化方案,支持向量机能够获取明显更高的搜索准确度。这同样也适用于图像分区系统,比如使用Vapnik所建议的使用特权方法的修改版本SVM的那些图像分区系统;(3)、用于手写字体识别;(4)、用于医学中分类蛋白质,超过90%的化合物能够被正确分类。基于支持向量机权重的置换测试已被建议作为一种机制,用于解释的支持向量机模型。支持向量机权重也被用来解释过去的SVM模型。
线性SVM:考虑以下形式的n点测试集:(x’1,y1),…,(x’n,yn),其中yi是1或者-1,表明点x’i所属的类。x’1中每个都是一个p维实向量。我们要求将yi=1的点集x’1与yi=-1的点集分开的”最大间隔超平面”,使得超平面与最近的点x’i之间的距离最大化。任何超平面都可以写作满足下面方程的点集x’:w’•x’-b=0,其中w’(不必是归一化的)是该法向量。参数b/‖w’‖决定从原点沿法向量w’到超平面的偏移量。
硬间隔:如果这些训练数据是线性可分的,可以选择分离两类数据的两个平行超平面,使得它们之间的距离尽可能大。在这两个超平面范围内的区域称为”间隔”,最大间隔超平面是位于它们正中间的超平面。这些超平面可以由方程族:w’•x’-b=1或是w’•x’-b=1来表示。通过几何不难得到这两个超平面之间的距离是2/‖w’‖,因此要使两平面间的距离最大化,我们需要最小化‖w’‖。同时为了使得样本数据点都在超平面的间隔区以外,我们需要保证对于所有的i满足其中的一个条件:w’•x’-b≥1,若yi=1 或是 w’•x’-b≤1, 若yi=-1。这些约束表明每个数据点都必须位于间隔的正确一侧。这两个式子可以写作:yi(w’•x’-b) ≥1, for all 1≤i≤n。可以用这个式子一起来得到优化问题:”在yi(w’•x’-b)≥1条件下,最小化‖w’‖,对于i=1,…,n”。这个问题的解w’与b决定了我们的分类器x’→sgn(w’•x’-b)。此几何描述的一个显而易见却重要的结果是,最大间隔超平面完全是由最靠近它的那些x’i确定的,这些x’i叫做支持向量。
软间隔:为了将SVM扩展到数据线性不可分的情况,我们引入铰链损失函数:max(0,1- yi(w’•x’-b))。当约束条件yi(w’•x’-b)≥1, for all 1≤i≤n满足时(也就是如果x’i位于边距的正确一侧)此函数为零。对于间隔的错误一侧的数据,该函数的值与距间隔的距离成正比。然后我们希望最小化:
其中参数λ用来权衡增加间隔大小与确保x’i位于间隔的正确一侧之间的关系。因此,对于足够小的λ值,如果输入数据是可以线性分类的,则软间隔SVM与硬间隔SVM将表现相同,但即使不可线性分类,仍能学习出可行的分类规则。
用于找到SVM分类器的最近的算法包括次梯度下降和坐标下降。当处理大的稀疏数据集时,这两种技术已经被证明有着显着的优点:当存在许多训练实例时次梯度法是特别有效的,并且当特征空间的维度高时,坐标下降特别有效。
SVM属于广义线性分类器的一族,并且可以解释为感知器的延伸。它们也可以被认为是提克洛夫规范化的特例。它们有一个特别的性质,就是可以同时最小化经验误差和最大化几何边缘区;因此它们也被称为最大间隔分类器。
参数选择:SVM的有效性取决于核函数、核参数和软间隔参数C的选择。通常会选只有一个参数γ的高斯核。C和γ的最佳组合通常通过在 C 和γ为指数增长序列下网格搜索来选取。通常情况下,使用交叉验证来检查参数选择的每一个组合,并选择具有最佳交叉验证精度的参数。或者,最近在贝叶斯优化中的工作可以用于选择C和γ,通常需要评估比网格搜索少得多的参数组合。或者,贝叶斯优化的最近进展可以用于选择C和γ,通常需要计算的参数组合比网格搜索少得多。然后,使用所选择的参数在整个训练集上训练用于测试和分类新数据的最终模型。
SVM的潜在缺点包括以下方面:需要对输入数据进行完全标记、未校准类成员概率、SVM仅直接适用于两类任务,因此,必须应用将多类任务减少到几个二元问题的算法;解出的模型的参数很难理解。
多元分类支持向量机:SVM算法最初是为二值分类问题设计的,实现多分类的主要方法是将一个多分类问题转化为多个二分类问题。常见方法包括”一对多法”和”一对一法”,一对多法是将某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个二分类SVM;一对一法则是在任意两类样本之间设计一个SVM。
实现:最大间隔超平面的参数是通过求解优化得到的。有几种专门的算法可用于快速解决由SVM产生的QP(Quadratic programming,二次规划)问题,它们主要依靠启发式算法将问题分解成更小、更易于处理的子问题。另一种方法是使用内点法,其使用类似牛顿法的迭代找到卡罗需-库恩-塔克条件下原型和对偶型的解。这种方法不是去解决一系列分解问题,而是直接完全解决该问题。为了避免求解核矩阵很大的线性系统,在核技巧中经常使用矩阵的低秩近似。另一个常见的方法是普莱特的序列最小优化算法(SMO),它把问题分成了若干个可以解析求解的二维子问题,这样就可以避免使用数值优化算法和矩阵存储。
线性支持向量机的特殊情况可以通过用于优化其类似问题逻辑回归的同类算法更高效求解;这类算法包括次梯度下降法和坐标下降法。
一般的核SVM也可以用次梯度下降法更快求解,在允许并行化时求解速度尤其快。
支持向量机(SVM)是一项功能强大的分类和回归技术,可最大化模型的预测准确度,而不会过度拟合训练数据。SVM特别适用于分析预测变量字段非常多的数据。
SVM的工作原理是将数据映射到高维特征空间,这样即使数据不是线性可分,也可以对该数据点进行分类。找到类别之间的分隔符,然后以将分隔符绘制成超平面的方式变换数据。之后,可用新数据的特征预测新记录所属的组。除了类别之间的分隔线,分类SVM模型还会查找用于定义两个类别之间的空间的边际线。位于边距上的数据点称为支持向量。两个类别之间的边距越宽,模型在预测新记录所属的类别方面性能越佳。为了增加边界的宽度,可以接受少量的误分类。
支持向量机是基于统计学习理论和结构风险最小化(Structual Risk Minimization, SRM)原则发展出的一种新的通用学习方法。支持向量机使用间隔最大化的学习策略,通过寻找定义的特征空间中的最大的分类间隔,实现对不同类别的准确分类。对于非线性情况,可以通过核函数映射的方式将其转化为线性分类。相比其它传统学习算法,SVM算法能够有效避免局部最优解和维数灾难的问题。
SVM是在统计学习理论基础上提出的机器学习方法,它建立在VC维理论(Vapnik-Chervonenkis Dimension,在统计学习理论中,VC维反映了函数集的实际学习能力,VC维越大,则学习机器越复杂。另外,VC维还影响学习机的泛化能力)和结构风险最小化原理基础上,且根据有效样本信息寻求在模型复杂度与学习能力之间的最佳折中,达到最小的实际风险。通过引入核函数,其能很好的解决线性不可分的问题,从而对不同数据集都有很好的效果。
若超平面可以直接将训练集中的样本分开,则这种分类问题为线性可分问题。在分类器中,样本分别位于超平面的两边,不会出现混叠,这样得到的SVM分类器被称之为硬间隔(hardmargin)线性支持向量机。当面对非线性的情况时,支持向量机处理的方法是选择核函数,通过核函数将其训练样本映射到高维空间中,从而在高维空间中求得最佳的超平面。使用核函数的好处是,在获得最优超平面的同时,其计算量并没有比原来复杂很多。
非线性分类中常见的核函数包括:齐次多项式、非齐次多项式、双曲正切、高斯核(Gaussiankernel)、线性核、径向基函数(radialbasis function, RBF)核和、Sigmoid核。
SVM算法在对非线性、小样本、高维数的问题解决上有较大的优势。
核函数的机理就是将原始非线性的样本通过非线性映射映射至高维特征空间,使得在新的空间里样本线性可分,进而可用线性样本的分类理论解决此类问题。
OpenCV和libsvm库中都提供了支持SVM的相关接口。
-
最新更新交易猫 转转 闲鱼源码zip
2022-03-24 11:35:54这两天有空就随便更新了一下交易猫和转转 搭建教程: 第一步源码上传解压 第二步找到找到conn.php修改数据库 第三部导入数据库 第四部http://域名/xh.php登录后台 有什么不懂可以问我 新手小白都会搭建 ... -
海康大华等安防摄像机采用通用RTSP协议流转RTMP推送至Web无插件播放展示的流程方法
2019-07-13 11:22:58中国互联网化的进程已经越来越快了,各个行业都在进行互联网化的改造,流媒体、音视频,作为跑在互联网上最大量级的数据类型,互联网带来的使用习惯已经冲击了非常非常多的传统行业,就包括非常稳重的电力行业、高速... -
BLDC/PMSM 电机的堵转保护
2020-11-23 10:07:47本文介绍了车用无传感器BLDC堵转检测的重要性以及实现的方法,分别讲述了六步方波堵转检测以及FOC正弦波堵转检测的方法。重点介绍了基于S12ZVM的FOC正弦波堵转检测的原理、代码实现和测试。最后总结了S12ZVM在车用... -
MATLAB中SVM(支持向量机)的用法
2018-01-24 11:34:54LIBSVM是台湾大学林智仁(Lin Chih-Jen)教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系统的执行文件,还提供了源代码,方便改进、修改以及在其它... -
机器学习中神经网络,支持向量机以及贝叶斯分类器总结
2018-08-22 10:15:44在“M-P神经元模型“中,神经元接受收到来自n个其他神经元传递过来的输入信号,这些输入信号经过带权重的连接进行传递,神经元接收到的总输入值将于神经元的阈值进行比较比较,然后通过”激活函数“处理以产生神经... -
华为数字化转型实践
2022-03-30 11:10:49本篇文章基于华为自身数字化转型实践,以及与行业客户和伙伴在转型过程中总结提炼出可供大中型企业借鉴的,加速数字化转型和智能升级的方法论和落地方案,介绍如何通过数字化技术,在数字化研发、数字化生产、数字化... -
基于STM32f103单片机按键控制电机正反转(带PWM调速)
2020-08-09 04:08:41基于STM32f103ZET6单片机按键控制电机正反转(带PWM调速) 学了快半个月的STM32,收获颇多,很明显的感觉是32位的单片机要比8位单片机(51单片机)强的太多了,不管是性能还是功耗上和51是没法比的,而且还有许多的... -
PyTorch语音识别框架,将语音转成文本格式
2019-09-22 10:18:45PyTorch中的语音到文本框架,初始支持DeepSpeech2架构(及其变体)。 特征 基于文件的语料库定义配置,模型体系结构和可重复性的培训配置 DeepSpeech模型具有高度可配置性 各种RNN类型(RNN,LSTM,GRU)和大小... -
Java实现树数据Tree与List互转并逐级汇总节点的值(支持树节点多列统计)
2019-06-19 18:42:01实现树Tree与List互转 b.Tree实现多列统计数据汇总。前度采用MiniUI。 逐级汇总数据:找到最小节点,然后回溯其所有父节点,注意值的重复计算问题。 构造一棵树的基本节点: package com.example.demo.tree;... -
支持向量机
2018-07-27 23:11:51支持向量机是一种二类分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器。支持向量机可以形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题,支持向量机的学习算法是求解... -
一个机械毕业生的转编程之路
2021-07-24 19:00:45同时在最近的面试过程中也感觉到了,java的内卷严重性,面试造火箭是必须的,虽然MySQL redis这类东西我是半年前才接触到的,但现在我在简历里写的是深入理解MySQL redis的原理和使用,深入理解并发编程的原理和使用... -
监督学习——支持向量机SVM
2018-07-15 17:06:13支持向量机属于监督学习,是一种二类分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,支持向量机包括核心技巧,这使它成为实质上的非线性分类器。支持向量机的学习策略是间隔最大化,可形式化为一... -
主板支持PCIE4.0都有什么先决条件?从芯片和插槽开始分析
2020-12-29 03:15:27PCIE 4.0是今明两年电脑发展的重要风向,有很多主板都号称支持PCIE 4.0,他们之间有什么不同?让我们从头开始梳理。主板上支持PCIE4.0设备的接口主要有两类:PCIE插槽和M.2插槽,而前者又可细分为全部插槽支持PCIE ... -
简单易学的机器学习算法——非线性支持向量机
2014-06-30 13:21:20前面三篇博文主要介绍了支持向量机的基本概念,线性可分支持向量机的原理以及线性支持向量机的原理,线性可分支持向量机是线性支持向量机的基础。对于线性支持向量机,选择一个合适的惩罚参数 ,并构造凸二次规划... -
SVM支持向量机+实例展示
2019-08-05 15:54:29SVM定义:支持向量机(英语:support vector machine,常简称为SVM,又名支持向量网络)是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一... -
通用安防摄像机通过RTSP转RTMP推流进行H5(RTMP/HLS)直播的方案
2017-12-27 21:37:43EasyNVR摄像机无插件直播方案随着互联网的发展,尤其是移动互联网的普及,基于H5...都无法直接在Web网页或者微信公众号上进行直播播放,那么,就产生了一种安防设备互联网化转型的需求,基本要求就是:无插件、纯web、 -
libsvm支持向量机工具箱在MATLAB中的安装与使用
2017-06-07 09:28:45这几天帮别人做一个关于svm分类的东西,由于是多类多特征的分类,发现徒手写对于我这样的菜鸟来...他不但提供了编译好的可在Windows系列系统的执行文件,还提供了源代码,方便改进、修改以及在其它操作系统上应用;该软 -
双十一的“后方战场”,闲鱼和转转吃饱了吗?
2021-11-19 20:33:59转转启动了“回血节”,帮助消费者及时处理家中闲置或囤积的物品,闲鱼也不甘示弱推出“看我如何节后鱼生”活动,邀请品牌方、明星以及普通消费者,围绕闲置物品展开新一轮的种草和拔草。 有意思的是,闲鱼还接入了... -
一次性说清楚秒验(本机号码一键登录)基本原理、优势、场景、交互过程和常见的问题
2019-10-30 09:10:36一、关于秒验(一键登录)基本原理 秒验(一键登录)产品整合了三大运营商特有的数据网关认证能力,升级短信验证码体验,应用于用户注册、登陆、支付、安全校验等场景,可实现用户无感知校验,操作更安全、便捷、低... -
IPTV机顶盒和网络盒子及转换
2019-03-16 10:05:01因为光猫、路由、机顶盒一般都有拨号或路由功能,所以IPTV拨号可能通过光猫或机顶盒实现。 一般情况下,IPTV账号是跟机顶盒的MAC地址绑定的?不能两个机顶盒同时用一个账号。 唐山电信送的机顶盒,我的是IPoE接... -
[怕难?]支持向量机SVM基础实战篇(一)
2020-04-23 16:50:53 这几篇SVM介绍是从0到1慢慢学会支持向量机,将是满满的干货,都是我亲自写的,没有搬运,可以随我一起从头了解SVM,并在短期内能使用SVM做到想要的分类或者预测~我也将附上自己基础训练的完整代码,建议同我一样... -
支持向量机通俗导论(理解SVM的三层境界)
2012-06-01 22:48:43支持向量机通俗导论(理解SVM的三层境界) 作者:July 。致谢:pluskid、白石、JerryLead。 说明:本文最初写于2012年6月,而后不断反反复复修改&优化,修改次数达上百次,最后修改于2016年11月。 声明:... -
使用神经计算棒二代在OpenVino下推理基于Keras转换的TensorFlow 模型
2019-01-08 20:04:39使用神经计算棒二代在OpenVino下推理基于Keras转换的TensorFlow 模型 一、安装系统环境 WIN10或者Ubuntu 16.04,我们用的是在固态硬盘上搭建的Ubuntu 16.04,可使用工具rufus进行启动盘制作,然后进入U盘启动盘... -
小米路由的IPv6支持教程(纯转保存)
2019-10-06 08:28:332017年11月26日,中共中央办公厅、国务院办公厅印发了《推进互联网协议第六版(IPv6)规模...在官方正式支持之前,以下教程给出一种打开小米路由对宽带IPv6支持的方案。 请注意: IPv6需要宽带运营商的支持。 ... -
3. GDI+ Bitmap和GDI HBITMAP互转
2017-10-21 15:05:35本文详细的讲解了带透明度的HBITMAP和Bitmap的转换,解决常见的Bitmap转HBITMAP背景变浅,HBITMAP转Bitmap背景变黑的问题,并演示了如何输出HBITMAP和Bitmap的每行像素,所有代码封装成了类,可以直接在生产环境中... -
Windows PC、 Linux、 Android、 iOS多平台支持H5无插件播放RTSP摄像机解决方案
2022-03-31 14:17:34Windows PC、 Linux、 Android、 iOS多平台支持 H5无插件播放RTSP摄像机解决方案