首页 文章 精选 留言 我的

精选列表

搜索[系统],共10000篇文章
优秀的个人博客,低调大师

《Arduino家居安全系统构建实战》——1.7 我们学到了什么

本节书摘来异步社区《机器学习项目开发实战》一书中的第1章,第1.7节,作者:【美】Mathias Brandewinder(马蒂亚斯·布兰德温德尔),更多章节内容可以访问云栖社区“异步社区”公众号查看 1.7 我们学到了什么 我们在本章中介绍了许多基础知识!在机器学习方面,你现在已经熟悉了一些关键概念和方法学。如果你是F#的新手,现在也已经编写了第一段F#代码! 下面回顾一些要点,先从机器学习方面开始。 首先,我们讨论了交叉验证——使用不同数据集进行训练和验证,留出某些数据评估预测模型质量的过程。这从许多方面看都是关键的过程。首先,它为你提供一个基准——指导试验的“真实状态”。没有验证集,就无法判断特定模型是否比另一个模型好。交叉验证可以科学地计量质量,它的作用类似于自动化测试套件,可以在开发工作偏离方向时提出警告。 建立了交叉验证机制,就可以在可量化的基础上试验、选择模型或者方向。反复尝试方法是“进行机器学习”的关键部分。没有一种方法能够事先知道特定的方法是否有效,所以必须在数据上尝试,自行观察,因此为成功做好准备,接受“可复制研究”的思路非常重要。尽可能用脚本使你的研究过程自动化,大量使用源代码控制,以便在任何时点、没有人工干预的情况下复制模型的每一步。总而言之,做好准备,使自己能够轻松地更改和运行代码。 1.7.1 在好的距离函数中能找到什么 在数字识别器的探索中,我们发现所使用的距离中的小小变化就能显著地改进模型,大部分(所有?)机器学习模型的核心中都有一个距离函数。所有学习过程归根结底都是计算机找出为特定问题搭配已知数据的最佳方式的尝试——“最佳搭配”的定义完全封装在距离函数中。 在某种程度上,距离函数的作用是利用数学方法,将你的目标从人类理解的形式转换成机器理解的语句。距离函数也常常被称作代价函数,从代价上考虑更多地强调了“坏”解决方案之所以不好的原因——所招致的惩罚,帮助我们避免选择不好的解决方案。 在我的经验中,花时间思考代价函数总是值得的。不管使用的算法有多巧妙,如果代价函数有缺陷,结果就很糟糕。想象一个包含两个计量值的个人数据集:以英尺为单位的身高和以磅为单位的体重。如果我们按照图像识别中使用的方法,在数据集中搜索“最相似的人”,就会发生这样的情况:身高的范围通常在5~6英尺(1英尺0.3048米)之间,而体重的范围更广,差别更大,例如100~200磅(1磅=0.4536千克)。因此,直接根据两个计量值之间的差值计算距离实际上将忽略身高的差别,因为1英尺的差别等价于1磅的差别。解决这个问题的方法之一是转换所有身体特征,确保它们处于一致的比例——这一过程称作“规格化”,是后面将要详细讨论的一个主题。幸运的是,所有像素都在相同的标度上编码,在本章中可以忽略这个问题,但是我希望这个“距离产生错误”的例子能够让你认识到,为什么距离函数需要深思熟虑! 这也是正确的数学定义真正起作用的情况之一。如果你翻起在学校时的数学笔记,就会看到距离函数(数学家们有时候称之为“度量标准”)由几个属性定义: Distance(A,B) > 0(距离不能为负数)。 当且仅当A=B时,Distance(A,B) = 0(只有A和自己的距离为0)。 Distance(A,B) = Distance(B,A)(对称性:从A到B的距离等于从B到A的距离)。 Distance(A,B) <= Distance(A,C) +Distance(C,B)(“三角不等式”:两点之间直线最短)。 在本章中我们只关注两种距离,但是满足上述属性的函数多种多样,每一种都以不同的方式定义了相似性。因此,模型中的代价函数不需要满足所有属性,但是一般来说,如果不满足某些属性,你应该问问自己可能会因此引起什么意外的副作用。例如,在曼哈顿距离的第一个例子中,如果我们忽略了绝对值,就明显地违反了规则1(距离非负)和规则3(对称性)。在某些情况下,随意使用不为度量指标的函数有充足的理由,但是发生这种情况时,应该多花一点时间思考可能出现问题的地方! 1.7.2 模型不一定要很复杂 最后,我希望强调的是,有效的模型并不一定很复杂!不管在C#还是F#中,两个分类器都很小,使用的是相当简单的数学方法。当然,有些复杂模型也能提供惊艳的结果,但是如果能用容易理解和修改的简单模型得到相同的结果,那么为什么不省点事呢? 这一原则称作“奥卡姆剃刀”,名称来源于中世纪哲学家“奥卡姆的威廉”。奥卡姆剃刀遵循经济原理。试图解释某一事物时,在多个可能合适的模型中选择最简单的一个。只有在简单的解释无法奏效时,才选择复杂的模型。 同理,我们首先实施“可能有效的最简方法”,我很鼓励你遵循这一方法。如果不这样做,可能会发生这样的情况:你开始实施几个可能有效的方法,它们激发出新的思路,因此很快你将有许多不成熟的原型,在丛林中越陷越深,而没有清晰的过程或者方法。突然之间,你将意识到自己已经为编码花费了几周,却还没有确定任何有效的方法或者前进的方向。这不是一种好的感觉。管理自己的时间,花费一天(或者一周、一小时——任何对你的问题来说切合实际的时间)用能够想到的最蠢、最简单的预测模型建立一个端到端模型。这个模型可能已经足够好了,这样的情况下就不会浪费任何时间。如果它不够好,此时你已经有了合适的机制,准备了数据集成和交叉验证,也很有可能已经发现了数据集中存在的意外问题。你将从合适的位置进入丛林。 1.7.3 为什么使用F#? 如果这是你第一次遭遇F#,开始时可能会觉得奇怪:我为什么介绍那种语言,而不坚持使用C#? 我希望书中的例子清楚地说明了原因!在我看来,C#虽然是一种很出色的语言,但是F#和机器学习及数据探索的搭配简直不可思议!在接下来的几章中将看到F#的更多特性,但是我希望这些理由在本章中就已经很清晰。 首先,F#的交互执行和脚本环境绝对可以节约时间。在开发机器学习模型时,快速试验、更改代码、查看效果是至关重要的,因此需要一个脚本环境。我的典型F#工作流是在每天开始时将数据加载到交互执行环境中。我不需要再次加载它们——数据已经在内存中,可以自由地摆弄模型。相比之下,在C#中测试新思路迫使我重建代码并重新加载数据,这最终会成为一个巨大的时间陷阱。 而且,F#的一些语言特性使其极适合于数据操纵。它聚焦于函数而非对象,擅长将函数应用到数据,以任何需要的方式组成函数。管道向前操作符|>对组合这些转换很方便,创建了一个管道,以非常容易理解的方式表现数据转换工作流。结合将数据打包为元组和用模式匹配解包元组的能力,以及Array、List和Seq模块中大量的内建函数,就可以得到和LINQ一样的增强功能,以任何方式转换和改造数据。

优秀的个人博客,低调大师

Android应用性能优化最佳实践.2.1 Android系统显示原理

绘?制?优?化 Android应用启动慢,使用时经常卡顿,是非常影响用户体验的,应该尽量避免出现。卡顿的场景有很多,按场景可以分成4类:UI绘制、应用启动、页面跳转、事件响应,如 图2-1所示。在这四种场景下又有多个小分类,基本上覆盖了卡顿的各个场景。 图2-1 卡顿主要场景 这4种卡顿场景的根本原因又可以分成两大类。 界面绘制:主要原因是绘制的层级深、页面复杂、刷新不合理,由于这些原因导致卡顿的场景更多出现在UI和启动后的初始界面以及跳转到页面的绘制上。 数据处理:导致这种卡顿场景的原因是数据处理量太大,一般分为三种情况,一是数据处理在UI线程(这种应该避免),二是数据处理占用CPU高,导致主线程拿不到时间片,三是内存增加导致GC频繁,从而引起卡顿。 本章主要通过优化UI界面编程来减少卡顿,以场景为纬度,通过工具深入分析症结所在,找到导致问

优秀的个人博客,低调大师

【Spark Summit East 2017】基于Elastic Spark Streaming的自动伸缩系统

更多精彩内容参见云栖社区大数据频道https://yq.aliyun.com/big-data;此外,通过Maxcompute及其配套产品,低廉的大数据分析仅需几步,详情访问https://www.aliyun.com/product/odps。 本讲义出自PhuDuc Nguyen在Spark Summit East 2017上的演讲,主要介绍了不支持开箱即用的在不中断实时Spark Streaming任务的同时能够添加或删除节点的功能。并介绍了Elastic Spark Streaming任务能够自动调整对于数据流的体积和流量的需求。

优秀的个人博客,低调大师

Search-guard在ELK Stack日志分析系统中的应用

打开微信扫一扫,关注微信公众号【数据与算法联盟】 转载请注明出处: http://blog.csdn.net/gamer_gyt 博主微博: http://weibo.com/234654758 Github: https://github.com/thinkgamer 写在前边的话 在之前的一篇文章中介绍了Shield在Elk Stack中的权限保护,但由于Shield是收费的,所以就有人给出了免费的解决方案——Search-guard 简单说明 search-guard是elastcisearch的一款插件,提供加密,身份验证和授权,基于search guard SSL,另外提供可插入的身份验证/授权模块,search-guard是shield的替代品,可免费提供所有的基本安全功能,其功能特性: 基于用户和角色的权限控制 支持SSL和TLS方式安全认证 支持LDAP认证 环境说明 Ubuntu 16.04 Elasticsearch 2.4.1 Logstash 2.4.0 Kibana 4.6.1 部署 Elasticsearch配置search-guard 进入elasticsearch的根目录 安装search-guard-ssl bin/plugin install -b com.floragunn/search-guard-ssl/2.4.1.16 这里我们需要配置密钥和证书 依旧是在es 的根目录 git clone https://github.com/floragunncom/search-guard-ssl.git cd searchguard_ssl/example-pki-scripts 执行 ./example.sh 会默认生成证书 当然这里我们可以执行clean.sh删除安装的东西 拷贝相应的文件到指定目录,后续会有需要 cp node-0-keystore.jks ../../config cp truststore.jks ../../config 编辑ec根目录下的config/elasticsearch.yml,加入 searchguard.ssl.transport.keystore_filepath: node-0-keystore.jks searchguard.ssl.transport.keystore_password: changeit searchguard.ssl.transport.truststore_filepath: truststore.jks searchguard.ssl.transport.truststore_password: changeit searchguard.ssl.transport.enforce_hostname_verification: false web访问:http://192.168.1.193:9200/ 会看到如下信息 { "name" : "M-Twins", "cluster_name" : "elasticsearch", "cluster_uuid" : "X6U0RRiaQ4ucBXokFj30Yw", "version" : { "number" : "2.4.1", "build_hash" : "c67dc32e24162035d18d6fe1e952c4cbcbe79d16", "build_timestamp" : "2016-09-27T18:57:55Z", "build_snapshot" : false, "lucene_version" : "5.5.2" }, "tagline" : "You Know, for Search" } web访问 http://192.168.1.193:9200/_searchguard/sslinfo?pretty { "principal" : null, "peer_certificates" : "0", "ssl_protocol" : null, "ssl_cipher" : null, "ssl_openssl_available" : false, "ssl_openssl_version" : -1, "ssl_openssl_version_string" : null, "ssl_openssl_non_available_cause" : "java.lang.ClassNotFoundException: org.apache.tomcat.jni.SSL", "ssl_provider_http" : null, "ssl_provider_transport_server" : "JDK", "ssl_provider_transport_client" : "JDK" } 在config/elasticsearch.yml配置文件中加入 #configure https searchguard.ssl.http.enabled: true searchguard.ssl.http.keystore_filepath: node-0-keystore.jks searchguard.ssl.http.keystore_password: changeit searchguard.ssl.http.truststore_filepath: truststore.jks searchguard.ssl.http.truststore_password: changeit https://192.168.1.193:9200/ (会提示证书错误) { "name" : "Zero", "cluster_name" : "elasticsearch", "cluster_uuid" : "X6U0RRiaQ4ucBXokFj30Yw", "version" : { "number" : "2.4.1", "build_hash" : "c67dc32e24162035d18d6fe1e952c4cbcbe79d16", "build_timestamp" : "2016-09-27T18:57:55Z", "build_snapshot" : false, "lucene_version" : "5.5.2" }, "tagline" : "You Know, for Search" } https://192.168.1.193:9200/_searchguard/sslinfo?pretty (会提示证书错误) { "principal" : null, "peer_certificates" : "0", "ssl_protocol" : "TLSv1.2", "ssl_cipher" : "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", "ssl_openssl_available" : false, "ssl_openssl_version" : -1, "ssl_openssl_version_string" : null, "ssl_openssl_non_available_cause" : "java.lang.ClassNotFoundException: org.apache.tomcat.jni.SSL", "ssl_provider_http" : "JDK", "ssl_provider_transport_server" : "JDK", "ssl_provider_transport_client" : "JDK" } 配置客户认证 searchguard.ssl.http.clientauth_mode: REQUIRE 出现web不能访问的情况,由于该配置是可选的,所以暂时不配置 这里需要解释一下: 默认执行的./example.sh 是以kiri为用户名的,这个我们可以通过vim example.sh可以看的出来,在elasticsearch.yml中的**.passwordd可以自己设置 安装search-guard bin/plugin install -b com.floragunn/search-guard-2/2.4.1.7 安装之后不做任何设置再次重启elasticsearch,web访问会出现以下状况: Search Guard not initialized (SG11) 这是提示我们没有进行初始化 编辑config/elasticsearch.yml,加入以下两行 searchguard.authcz.admin_dn: - CN=kirk,OU=client,O=client,L=test, C=DE #由于我们是采用的默认的example.sh进行密钥生成的 - cn=admin,ou=Test,ou=ou,dc=company,dc=com 此时需要重新启动elasticsearch,因为需要把我们新更改的elasticsearch.yml加载进来,否则在初始化的时候会报错 复制 kirk-keystore.jks和truststore.jks到 plugins/search-guard-2/tools目录下,然后执行初始化命令 ./sgadmin.sh -ts truststore.jks -ks kirk-keystore.jks -cd ../sgconfig -icl 然后重启启动elasticsearch,web访问会提示你输入账号和密码 Logstash配置search-guard 依旧采用rsyslog的例子,机器配置rsyslog.conf,最后两行加入 *.* @@localhost:5000 *.* @localhost:5000 重启rsyslog服务 在logstash目录下编辑一个新文件rsyslog.conf,内容如下: input { tcp{ port => 5000 type => syslog } udp{ port => 5000 type => syslog } } output { stdout { codec=> rubydebug } elasticsearch { hosts => ["localhost:9200"] ssl => true ssl_certificate_verification => true truststore => "/opt/elk/elasticsearch-2.4.1/config/truststore.jks" truststore_password => changeit user => logstash password => logstash } } 这里的logstash用户在 elasticsearch安装目录下的plugin/seach-guard-2/sgconfig/sg_roles.yml中 这里我们说一下sgconfig这几个文件: Search-guard的动态配置 sg_config.yml:配置验证器和授权后端 sg_roles.yml:定义角色和相关的权限 sg_roles_mapping.yml:将后端角色,主机和用户映射到角色 sg_internal_users.yml:用户和散列密码(使用hasher.sh哈希) sg_action_groups.yml:组权限在一起 接着我们设置logstash用户的权限,我们可以在sg_roles.yml中方看到logstash用户具有的权限 sg_logstash: cluster: - indices:admin/template/get - indices:admin/template/put indices: 'logstash-*': '*': - CRUD - CREATE_INDEX '*beat*': '*': - CRUD - CREATE_INDEX 启动配置文件,测试登录,elasticsearch便可以接收到rsyslog发送过来的日志 Kibana配置 编辑kibana.yml server.port: 5601 server.host: "0.0.0.0" elasticsearch.url: "https://localhost:9200" elasticsearch.username: "kibanaserver" elasticsearch.password: "kibanaserver" elasticsearch.ssl.ca: /opt/elk/elasticsearch-2.4.1/search-guard-ssl/example-pki-scripts/kirk-signed.pem elasticsearch.ssl.verify: false 启动kibana服务,web访问,便会提示你输入密码 验证器配置: 验证器配置: Vim plugins/search-guard-2/sgconfig/sg_config.yml searchguard: dynamic: http: ... authc: kibana_auth_domain: enabled: true order: 1 http_authenticator: type: basic challenge: true authentication_backend: type: internal authz: ... 其他的自定义角色和角色对应的权限请参考官网资料对sgconfig文件夹的几个文件进行配置即可

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册