复杂度

模型优化评估

≡放荡痞女 提交于 2019-12-06 08:20:01
Basis Expansion 这个咋翻译呢, 线性扩充基? 无所谓其实, 这里主是用它来处理 因变量 和 自变量 的非线性关系的 Basis Expansion 是指通过对数据进行转换来扩充或替换数据集的的特征. 我最初的数据分析工具是R语言嘛, 当时没有接触ML这些什么 正则 的概念, 就统计学理论. 在做线性模型的时候, 拟合的不是很好, 我当时真的就凭感觉, 给方程加上一些高阶项 然后就拟合得可以了. 不过呢,后来还是放弃了, 因为很难解释, 尤其是经管方面, 模型的参数的解释尤为重要 这点跟ML不太同, 当然,更不会用神经网络, 我感觉我的水平,怕是解释不清楚里面是怎么工作的. 这里的 Basis Expansion, 举个栗子, 给定输入特征X, Basis Expansion 可以将X 扩充到多个特征, 如 1, X, X^2 等. 这种映射允许各类学习算法来 捕捉数据中的非线性趋势, 同时仍然使用线性模型来分析这些转换后的特征 . 比如增加一些非线性的高阶项等, 线性而言, 其中有一个比较耳熟的名称 多项式回归 case1 线性回归 进行一个升维(多项式项)的变换 \(\phi(x) = [1,x, x^2]\) 即之前是对一个特征求参数, 现在变为了3个特征了. \(w_0 + w_1x + w_2x^2 = \phi(x).[w_0, w_1, w_2 ]\)

Transformer模型---decoder

南笙酒味 提交于 2019-12-05 20:23:27
一、结构 1.编码器 Transformer模型---encoder - nxf_rabbit75 - 博客园 2.解码器 (1)第一个子层也是一个多头自注意力multi-head self-attention层,但是,在计算位置i的self-attention时屏蔽掉了位置i之后的序列值,这意味着:位置i的attention只能依赖于它之前的结果,不能依赖它之后的结果。因此,这种self-attention也被称作masked self-attention。 (2)第二个子层是一个多头注意力multi-head attention层,用于捕获decoder output和encoder output之间的attention。第三个子层是一个简单的全连接层。 (3)和encoder一样:每个子层都使用残差直连,并且残差直连之后跟随一个layer normalization:LN;decoder所有层的输入、输出的向量维度也是$d_{model}=512$维。 二、Tips 1.使用multi-head attention的三个适用场景:   encoder-decoder attention: 使用multi-head attention,输入为encoder的输出和decoder的self-attention输出,其中encoder的self-attention作为 key

如何降低前端开发的复杂度

痞子三分冷 提交于 2019-12-05 17:03:29
优秀的程序员总是能优雅的组织自己的代码,清晰的编写思路,合理的组织结构划分,从小的功能组件,到大的模块结构,都能通过合理的巧妙的搭配,不仅能化复杂为简单,更能提升代码运行效率,提高代码的可维护性。我们作为前端开发,都应该具有这样的能力。 那么如何才能降低业务开发的复杂度呢? 细分组件 都说模块化开发,其实在AMD,CMD这些思想规范之前就已经有模块化开发的规范了,虽然JavaScript标准从es1-es4 然后隔了n年才有了es5,在那N年基本都是‘函数式开发’,一切皆函数。之前还没有模块化加载的思想,毕竟也不需要,富客户端还是flash的天下,基本都是简单的网页嵌套一些后端的代码逻辑,然后通过后端渲染引擎渲染或者解释器解释产出html页面,什么ASP,PHP,JSP等等。 然而之前的模块化称不上是模块,为什么呢?因为没有模块加载器,主要是通过JS加载顺序来控制加载的,依赖的JS文件放在前面。模块主要是按照文件来划分,每个文件是个独立的功能模块,在自定义的命名空间下挂在需要暴露出来的函数,其他函数可以调用。当然也有一些打包工具,可以根据事先定义好的文件列表,把多个文件打包成一个bundle。 而现在,且不说你是喜欢自己编写或者用现有的模块加载器,或者直接用像Angular,React,Vue等现成的脚手架做开发,当然自带的就有了模块加载,配合Webpack、Rollup等打包工具

leetcode101 对称二叉树

狂风中的少年 提交于 2019-12-05 09:26:40
方法:递归 如果一个树的左子树与右子树镜像对称,那么这个树是对称的。 因此,该问题可以转化为:两个树在什么情况下互为镜像? 如果同时满足下面的条件,两个树互为镜像: 它们的两个根结点具有相同的值。 每个树的右子树都与另一个树的左子树镜像对称。 就像人站在镜子前审视自己那样。镜中的反射与现实中的人具有相同的头部,但反射的右臂对应于人的左臂,反之亦然。 public boolean isSymmetric(TreeNode root) { return isMirror(root, root); } public boolean isMirror(TreeNode t1, TreeNode t2) { if (t1 == null && t2 == null) return true; if (t1 == null || t2 == null) return false; return (t1.val == t2.val) && isMirror(t1.right, t2.left) && isMirror(t1.left, t2.right); } 复杂度分析 时间复杂度:O(n),因为我们遍历整个输入树一次,所以总的运行时间为 O(n),其中 nn 是树中结点的总数。 空间复杂度:递归调用的次数受树的高度限制。在最糟糕情况下,树是线性的,其高度为 O(n)。因此,在最糟糕的情况下

leetcode101 对称二叉树

末鹿安然 提交于 2019-12-05 09:26:25
方法:递归 如果一个树的左子树与右子树镜像对称,那么这个树是对称的。 因此,该问题可以转化为:两个树在什么情况下互为镜像? 如果同时满足下面的条件,两个树互为镜像: 它们的两个根结点具有相同的值。 每个树的右子树都与另一个树的左子树镜像对称。 就像人站在镜子前审视自己那样。镜中的反射与现实中的人具有相同的头部,但反射的右臂对应于人的左臂,反之亦然。 public boolean isSymmetric(TreeNode root) { return isMirror(root, root); } public boolean isMirror(TreeNode t1, TreeNode t2) { if (t1 == null && t2 == null) return true; if (t1 == null || t2 == null) return false; return (t1.val == t2.val) && isMirror(t1.right, t2.left) && isMirror(t1.left, t2.right); } 复杂度分析 时间复杂度:O(n)O(n),因为我们遍历整个输入树一次,所以总的运行时间为 O(n)O(n),其中 nn 是树中结点的总数。 空间复杂度:递归调用的次数受树的高度限制。在最糟糕情况下,树是线性的,其高度为 O(n)O(n)

测试理论 - 代码覆盖率

本小妞迷上赌 提交于 2019-12-05 08:57:20
概述 整理一下我对 代码覆盖率 的认识 背景 理解了 白盒测试 用例设计 设计完了, 总需要一个 标准, 来评估用例的某些方面 这个可能, 是 覆盖率 提出的意义吧 至于这个是谁最先提出, 又是出于 什么目的, 现已无从考证 主要是我 懒得考证... 1. 回顾: 白盒测试用例设计思路 概述 回顾一下白盒测试用例的设计思路 思路 代码覆盖 分支覆盖 条件覆盖 分支条件覆盖 多重条件覆盖 ref 后面会有 2. 覆盖率 概述 简单介绍 覆盖率 覆盖率 作用 度量 测试用例 对 代码 测试程度 意义 找出那些地方没有测 重视没有覆盖的部分 重点是解释这些问题 为什么没有覆盖 能否覆盖 对于 测试质量, 没有任何的表述 是的, 覆盖率高, 未必就是 测试得好 计算方式 代码覆盖率 覆盖率 = 被测代码行数 / 代码总行数 当然还有其他的 覆盖率 那些怎么算的, 我目前还不清楚 3. 常见的 覆盖率 指标 概述 以 jacoco 的指标为例, 简单说明一下 jacoco 执行结果 概述 简单描述下 jacoco 执行结果 列 Element 被测的包 Missed Instructions & Cov 指令覆盖 Missed Branhes & Cov 分支覆盖 Missed & Cxty 圈复杂度 Missed & Lines 代码覆盖 Missed & Method 方法覆盖

Oracle数据库加固之密码策略

妖精的绣舞 提交于 2019-12-05 07:08:46
  我们都知道密码策略加固的参数一般包括密码长度、复杂度检测、最大最小使用时间、过期警报时间、最大登录失败次数以及锁定时间等设置。   Oracle默认提供了一个密码策略的sql执行文件utlpwdmg.sql.linux/unix默认路径是$ORACLE_HOME/rdbms/admin/utlpwdmg.sql .windows路径位置可以通过搜索来获得。   首先我们先看一下Oracle默认安装后密码策略设置是怎样的。      图1      图2   通过配置文件可以发现目前密码策略中密码长度设置为不小于4位,同时也设置了密码存活时间为180天,密码警告时间为7天,登录失败次数显示为10次,锁定时间为1分钟。   接下来我们通过测试来看一下此策略设置脚本是否生效。   修改scott恩口令tiger为123成功,说明utlpwdmg.sql脚本文件未被执行。   下面我们重新修改好utlpwdmg.sql配置,然后执行。      图4      图5   执行脚本:   然后我们查看是否密码长度、密码复杂度检测功能是否已经开启。      图7   有图可知:新密码设置为123失败,要求必须是8位以上。   由图可知:新密码设置为12345678失败,要求必须至少一个数字、一个字母,说明密码复杂度检测已经开启。      图9   由图可知,utlpwdmg

Oracle数据库加固——密码策略

我与影子孤独终老i 提交于 2019-12-05 07:04:38
我们都知道密码策略加固的参数一般包括密码长度、复杂度检测、最大最小使用时间、过期警报时间、最大登录失败次数以及锁定时间等设置。 Oracle 默认提供了一个密码策略的 sql 执行文件 utlpwdmg.sql 。 linux/unix 默认路径是 $ORACLE_HOME/rdbms/admin/utlpwdmg.sql 。 windows 路径位置可以通过搜索来获得。 首先我们先看一下 Oracle 默认安装后密码策略设置是怎样的。 图1 图2 通过配置文件可以发现目前密码策略中密码长度设置为不小于 4 位,同时也设置了密码存活时间为 180 天,密码警告时间为 7 天,登录失败次数显示为 10 次,锁定时间为 1 分钟。 接下来我们通过测试来看一下此策略设置脚本是否生效。 图 3 修改 scott 恩口令 tiger 为 123 成功,说明 utlpwdmg.sql 脚本文件未被执行。 下面我们重新修改好 utlpwdmg.sql 配置,然后执行。 图 4 图5 执行脚本: 图 6 然后我们查看是否密码长度、密码复杂度检测功能是否已经开启。 图 7 有图可知:新密码设置为 123 失败,要求必须是 8 位以上。 图 8 由图可知:新密码设置为 12345678 失败,要求必须至少一个数字、一个字母,说明密码复杂度检测已经开启。 图 9 由图可知, utlpwdmg.sql

什么是数据驱动编程

送分小仙女□ 提交于 2019-12-05 06:49:11
转自: https://blog.csdn.net/chgaowei/article/details/6658260 前言: 最近在学习《Unix编程艺术》。以前粗略的翻过,以为是介绍unix工具的。现在认真的看了下,原来是介绍设计原则的。它的核心就是第一章介绍的unix的哲学以及17个设计原则,而后面的内容就是围绕它来展开的。以前说过,要学习适合自己的资料,而判断是否适合的一个方法就是看你是否能够读得下去。我对这本书有一种相见恨晚的感觉。推荐有4~6年工作经验的朋友可以读一下。 正题: 作者在介绍Unix设计原则时,其中有一条为“表示原则:把知识叠入数据以求逻辑质朴而健壮”。结合之前自己的一些经验,我对这个原则很有共鸣,所以先学习了数据驱动编程相关的内容,这里和大家分享出来和大家一起讨论。 数据驱动编程的核心 数据驱动编程的核心出发点是相对于程序逻辑,人类更擅长于处理数据。数据比程序逻辑更容易驾驭,所以我们应该尽可能的将设计的复杂度从程序代码转移至数据。 真的是这样吗?让我们来看一个示例。 假设有一个程序,需要处理其他程序发送的消息,消息类型是字符串,每个消息都需要一个函数进行处理。第一印象,我们可能会这样处理: void msg_proc(const char *msg_type, const char *msg_buf) { if (0 == strcmp(msg_type,

2019年11月20日开发手记

只愿长相守 提交于 2019-12-05 03:09:47
两种运动检测算法的介绍: 帧差法: 帧差法是目前运动目标检测中最常用的算法。帧差法依据的原则是:当视频中存在移动物体的时候,相邻帧(或相邻三帧)之间在灰度上会有差别,求取两帧图像灰度差的绝对值,则静止的物体在差值图像上表现出来全是0,而移动物体特别是移动物体的轮廓处由于存在灰度变化为非0,当绝对值超过一定阈值时,即可判断为运动目标,从而实现目标的检测功能。 二维频域运动目标检测: 通过对动态图像的行列分解, 将三维频域内的运动检测问题转化到两组二维频域内进行, 从而降低了滤波器设计的难度。给出了一种提取主运动能量的自适应滤波算法, 通过剔除背景和噪声的频率成分, 有效地检测出运动目标。 复杂度分析: 针对帧差法进行分析,代码复杂度主要集中在absdiff与findContours部分,其中absdiff的迭代次数为2*500*500=50000次,时间为88.46ms(取两百帧计算平均的时间) 针对二维频域运动目标检测算法,这里有两个代码版本: 针对py-new-fuliye.py,代码的复杂度主要集中在两个部分:傅里叶变换以及遍历,在py-new-fuliye.py中,共使用了两次傅里叶变换与两次遍历,遍历的迭代次数次数为2*50*30=300次,时间为:54.175ms 针对pepoplefft.py(改进版)进行分析,使用了两次傅里叶变换(一次正一次逆),进行了一次嵌套遍历