***Data Science***
文章平均质量分 78
图灵的猫.
给行业以ai,而不是给ai以行业
展开
-
深入浅出BP神经网络(反向传播算法)
反向传播算法(Backpropagation)是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法。其主要思想是:(1)将训练集数据输入到ANN的输入层,经过隐藏层,最后达到输出层并输出结果,这是ANN的前向传播过程;(2)由于ANN的输出结果与实际结果有误差,则计算估计值与实际值之间的误差,并将该误差从输出层向隐藏层反向传转载 2018-01-10 20:01:13 · 2130 阅读 · 1 评论 -
Toeplitz matrix 与 Circulant matrix
之所以专门定义两个新的概念,在于它们特殊的形式,带来的特别的形式。原创 2018-01-10 19:21:18 · 1783 阅读 · 0 评论 -
用Python2编译Python3.X的代码: __future__ 模块
从单词含义上猜应该是“未来”的模块。它有下面几个目的避免和现有分析import工具混淆,并得到你期望的模块确保2.1之前的版本导入__future__产生运行时异常,因为2.1之前没有这个模块文档化不兼容的改变,通常这些改变会在新版中强制执行。这类文档以可执行的形式组织,通过导入__future__进行可编程式的检查。以上是对官方解释的粗略翻译,翻译起来感觉有些拗口。原创 2018-01-09 22:05:17 · 1065 阅读 · 0 评论 -
深入浅出带你了解Python2与Python3的异同
next()(.next())是一种常用的函数(方法),这是另一种语法更改(或者说在执行时更改)值得一提:在Python2.7.5中你可以使用next()函数和.next()方法,在Python3只保留了next()函数(调用.next()方法会引发AttributeError异常)。因为它们实现了相同的方式,就会有相同的速度。在Python3中,range()实现了类似xrange()的功能,因此专门的xrange()函数不存在了(在Python3中使用xrange()会抛出一个NameError异常。原创 2018-01-09 21:35:08 · 847 阅读 · 0 评论 -
数据结构与算法(二):线性表、栈、树(二叉树,AVL树)、图
树型结构是一类非常重要的非线性数据结构,其中以树和二叉树最为常用。在介绍二叉树之前,我们先简单了解一下树的相关内容。树树 是由n(n>=1)个有限节点组成一个具有层次关系的集合。它具有以下特点:每个节点有零个或多个子节点;没有父节点的节点称为 根 节点;每一个非根节点有且只有一个 父节点 ;除了根节点外,每个子节点可以分为多个不相交的子树。树的结构二叉树基本概念 定义二叉树是每个节点最多有两棵子树的树结构。通常子树被称作“左子树”和“右子树”。二叉树常被用于实现二叉查找树和二叉堆。相关原创 2018-01-17 13:56:28 · 1058 阅读 · 0 评论 -
Unicode与UTF8:字符集与字符编码的关系
110之后的所有部分(5个bit)加上后一个字节的除10外的部分(6个bit)代表在Unicode中的序号。GB18030:GBK字符集的超集,常叫大汉字字符集,也叫CJK(Chinese,Japanese,Korea)字符集,包含了中、日、韩三国语言中的所有字符。编码字符集,用一个编码值code point来表示一个字符(即该字符在子库表中的位置),这个值称为字符对应于编码字符集(如:Unicode、ASCII)的序号。如果一个字节的第一位为0,那么代表当前字符为单字节字符,占用一个字节的空间。原创 2018-02-07 19:00:30 · 1000 阅读 · 0 评论 -
经典:一文详解socket
上面我们已经知道网络中的进程是通过socket来通信的,那什么是socket呢?socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭),这些函数我们在后面进行介绍。原创 2018-02-08 17:47:50 · 837 阅读 · 0 评论 -
一文详解什么是RNN(循环神经网络)
如图所示,你会发现每个cell都会有一个损失,我们已经定义好了损失函数,接下来就是熟悉的一步了,那就是根据损失函数利用SGD来求解最优参数,在CNN中使用反向传播BP算法来求解最优参数,但在RNN就要用到BPTT,它和BP算法的本质区别,也是CNN和RNN的本质区别:CNN没有记忆功能,它的输出仅依赖与输入,但RNN有记忆功能,它的输出不仅依赖与当前输入,还依赖与当前的记忆。在图像处理中,目前做的最好的是CNN,而自然语言处理中,表现比较好的是RNN,因此,我们能否把他们结合起来,一起用呢?原创 2018-04-25 18:21:04 · 58920 阅读 · 10 评论 -
何为启发式算法——退火算法,蚁群算法,遗传算法
由于仿照基因编码的工作很复杂,我们往往进行简化,如二进制编码,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小选择(selection)个体,并借助于自然遗传学的遗传算子(genetic operators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。此时,当前解实现了一次迭代。以上是算法学习过程中所引用的一些理论上的知识,有关应用请参看具体应用部分。原创 2018-04-24 17:00:19 · 4608 阅读 · 0 评论 -
离散傅里叶变换(DFT)与三角插值法
离散傅里叶变换(DFT)1. 标准正交基向量空间(或)的标准正交基满足以下两个条件:我们可以得到一个的标准正交基矩阵:再把每一个标准正交基对应的系数写成一个列向量:则信号的标准正交基表示:那么(这里,是指的共轭转置矩阵,不难证明)关键结论:对于一组标准正交基和标准正交基矩阵,对于任意的信号,我们有以下的表达:综合式:分析式: 或 综合式表明信号可以表示成标准正交基的线性组合。分析式给出了计算标准正...原创 2018-04-11 16:51:08 · 8598 阅读 · 1 评论 -
大数据算法面试:1亿数据在有限内存上如何排序
比如我们要找出现次数最多的前100个,我们将1000万的数据分布到10台机器上,找到每台出现次数最多的前100个,归并之后这样不能保证找到真正的第100个,因为比如出现次数最多的第100个可能有1万个,但是它被分到了10台机子,这样在每台上只有1千个,假设这些机子排名在1000个之前的那些都是单独分布在一台机子上的,比如有1001个,这样本来具有1万个的这个就会被淘汰,即使我们让每台机子选出出现次数最多的1000个再归并,仍然会出错,因为可能存在大量个数为1001个的发生聚集。如果数据无法放入内存。原创 2018-03-13 21:36:33 · 19231 阅读 · 2 评论 -
在机器学习、大数据等领域工作,该学Hadoop还是Spark?
相信看这篇文章的你们,都和我一样对Hadoop和Apache Spark的选择有一定的疑惑,今天查了不少资料,我们就来谈谈这两种 平台的比较与选择吧,看看对于工作和发展,到底哪个更好。原创 2018-03-19 12:10:19 · 11476 阅读 · 3 评论 -
快速排序 Vs. 归并排序 Vs. 堆排序——谁才是最强的排序算法
因此,算法复杂度一样只是说明随着数据量的增加,算法时间代价增长的趋势相同,并不是执行的时间就一样,这里面有很多常量参数的差别,比如在公式里各个排序算法的前面都省略了一个c,这个c对于堆排序来说是100,可能对于快速排序来说就是10,但因为是常数级所以不影响大O。堆排序每次取一个最大值和堆底部的数据交换,重新筛选堆,把堆顶的X调整到位,有很大可能是依旧调整到堆的底部(堆的底部X显然是比较小的数,才会在底部),然后再次和堆顶最大值交换,再调整下来,可以说堆排序做了许多无用功。原创 2018-02-24 19:04:28 · 28088 阅读 · 5 评论 -
深度学习入门:一句话告诉你什么是神经网络(CNN,RNN,DNN)
假设图3中m-1=1是输入层,我们需要识别一幅彩色图像,这幅图像具有四个通道ARGB(透明度和红绿蓝,对应了四幅相同大小的图像),假设卷积核大小为100*100,共使用100个卷积核w1到w100(从直觉来看,每个卷积核应该学习到不同的结构特征)。不知题主是否发现,RNN可以看成一个在时间上传递的神经网络,它的深度是时间的长度!而在RNN中,神经元的输出可以在下一个时间戳直接作用到自身,即第i层神经元在m时刻的输入,除了(i-1)层神经元在该时刻的输出外,还包括其自身在(m-1)时刻的输出!原创 2018-02-19 20:16:14 · 60082 阅读 · 5 评论 -
数据结构与算法(一):线性表、栈、树(二叉树,AVL树)、图
数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。算法是为求解一个问题需要遵循的、被清楚指定的简单指令的集合。下面是自己整理的常用数据结构与算法相关内容,如有错误,欢迎指出。原创 2018-01-08 21:55:03 · 1580 阅读 · 0 评论 -
面向对象之Python的链表实现(二)循环链表
接上一章的练习,这里接着实现单链表的变型——传说中的循环单链表。给出一个简单的类,构造4个功能并实例化测试。在下一篇文章中将会关注一个比较tricky的问题:如何判断链表有环?原创 2018-01-24 21:51:06 · 544 阅读 · 0 评论 -
一文详解Python正则表达(3.X版本)
本节我们看一下正则表达式的相关用法,正则表达式是处理字符串的强大的工具,它有自己特定的语法结构,有了它,实现字符串的检索、替换、匹配验证都不在话下。当然对于爬虫来说,有了它,我们从HTML里面提取我们想要的信息就非常方便了。原创 2018-01-16 22:16:37 · 598 阅读 · 0 评论 -
MYSQL的Commit与程序的原子性
MySQL默认操作模式就是autocommit自动提交模式。这就表示除非显式地开始一个事务,否则每个查询都被当做一个单独的事务自动执行。我们可以通过设置autocommit的值改变是否是自动提交autocommit模式。从查询结果中,我们发现Value的值是ON,表示autocommit开启。我们可以通过以下SQL语句改变这个模式值0和OFF都是一样的,当然,1也就表示ON。原创 2017-12-22 23:43:57 · 1040 阅读 · 0 评论 -
机器学习中的VC维数和分类
VC维数学习VC维要先知道的概念有:增长函数(growth function)、对分(dichotomy)、打散(shattering)和断点(break point)1.增长函数增长函数表示假设空间H对m个示例所能赋予标记的最大可能结果数。比如说现在数据集有两个数据点,考虑一种二分类的情况,可以将其分类成A或者B,则可能的值有:AA、AB、BA和BB,原创 2017-12-22 23:23:20 · 6764 阅读 · 1 评论 -
C和C++中字串符(String)和字符串字面量(String Literal)的区别
C/C++中的对象指的是一块存储区。字符串字面量是不需要创建过程就可以使用的对象,所以它既没有变量那样的声明或者定义(字符串字面量是无名对象),也不需要向动态分配的对象那样进行动态分配。由于这个原因,用来限定变量的类型限定符(如CONST、VOLATILE)以及存储类别指示符(如EXTERN、STATIC、AUTO、REGISTER)不能用在字符串字面量上。原创 2017-12-22 23:04:50 · 7471 阅读 · 1 评论 -
OLAP(On-line Analytical Processing,联机分析处理)
数据仓库的多维数据模型 可能很多人理解的数据仓库就是基于多维数据模型构建,用于OLAP的数据平台,通过上一篇文章——数据仓库的基本架构,我们已经看到数据仓库的应用可能远不止这些。但不得不承认多维数据模型是数据仓库的一大特点,也是数据仓库应用和实现的一个重要的方面,通过在数据的组织和存储上的优化,使其更适用于分析型的数据查询和获取。多维数据模型的定义和作用多维数据模型是转载 2017-12-22 23:03:49 · 2171 阅读 · 0 评论 -
DML、DDL的概念与区别
SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。DML(Data Manipulation Language)数据操纵语言: 适用范围:对数据库中的数据进行一些简单操作,如insert,delete,update,select等.DDL(Data Definition Language)数据定义语言: 适用范围:对数据库中的某些对象(例如,原创 2017-12-01 21:15:11 · 16543 阅读 · 1 评论 -
触发器(Trigger)的使用方法详解
MySQL包含对触发器的支持。触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。创建触发器在MySQL中,创建触发器语法如下:CREATE TRIGGER trigger_nametrigger_timetrigger_event ON tbl_nameFOR EACH ROWtrigger_stmt其中:trigger原创 2017-12-01 13:30:33 · 16385 阅读 · 0 评论 -
无法添加外键约束的原因(cannot add foreign key constraint)
需要注意的是,在SQL中,参照关系可以为主键,但在MYSQL中,参照关系不能为主键。原因是在SC这张表中,作为参照关系,SNO的数据类型没有保持和被参照的表STUDENT。然后,创建下面这张表,其中SNO为外键,参照关系是SC,被参照是STUDENT。在这张已经建成的STUDENT表中,SNO为Primary Key, 类型为。3.参照表的值需要在所参考的表的那一个主键中已经存在的(即不能为空)2.外键所参照的键必须为被参照表的主键;1.外键不能为新建表的主键;更多相关代码可以访问。原创 2017-12-01 12:15:00 · 23640 阅读 · 1 评论 -
Mysql中Check约束无效的原因以及解决方法
如果需要设置CHECK约束的字段范围小,并且比较容易列举全部的值,就可以考虑将该字段的类型设置为枚举类型 enum()或集合类型set()。如果需要设置CHECK约束的字段范围大,且列举全部值比较困难,比如:>0的值,那就只能使用触发器来代替约束实现数据的有效性了。如下代码,可以保证a>0。此外,在MYSQL中,域(Domain)与断言(Assertion)也是无法使用的,原因类似于CHECK,后续将会在其他文章中提到。原因是因为,不同于SQL,在MYSQL中,CHECK只是一段可调用但无意义的子句。原创 2017-11-30 22:13:36 · 19597 阅读 · 1 评论 -
C语言基础:用快速排序实现输出最大数
cat digit(cat n, cat k) //定义两个形式参数n,k。//此函数用来寻找从右往左第1位~第K位数字中最大的数。//因为数组长度较小,采用递归排序的非链表方法。/* 此为原快速排序代码main函数体。//使用快速排序返回最大值。原创 2017-11-17 23:09:26 · 1375 阅读 · 0 评论 -
初识数据库——Mysql入门
总的来说,数据库系统是由数据库,数据库管理系统DBMS以及数据库应用程序组成的对数据进行运作和储存的系统。此外,数据库的建立和维护也需要依赖人的帮助,这就需要数据库管理员(DBA)的存在。通常的数据库都是作为信息系统的核心与基础存在,从OLTP到OLAP甚至GIS,数据库的应用都遍布各处。数据库中存在很多不同的结构类型,有网状,层次,关系等。根据教材的定义:数据库是长期储存在计算机内,有组织的,可共享的大量数据集合。顾名思义,数据库是用来管理数据的储存仓库,还包括应用以及设计的技术,是CS的重要分支。原创 2017-11-17 12:51:15 · 816 阅读 · 0 评论 -
[C/C++]堆栈的概念与区别
栈:在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正确的释放本内存空间。原创 2017-12-22 23:01:19 · 641 阅读 · 0 评论 -
如何使用sklearn进行数据挖掘
目录1 使用sklearn进行数据挖掘1.1 数据挖掘的步骤1.2 数据初貌1.3 关键技术2 并行处理2.1 整体并行处理2.2 部分并行处理3 流水线处理4 自动化调参5 持久化6 回顾7 总结8 参考资料1 使用sklearn进行数据挖掘1.1 数据挖掘的步骤数据挖掘通常包括数据采集,数据分析,特征工程,训练模型,模型评估等步骤。使用sklearn工...原创 2017-12-22 23:07:34 · 613 阅读 · 0 评论 -
正交矩阵和Gram-Schmidt正交化
我们很容易得出,如果一个矩阵Q的列向量是标准正交的,那么Q’Q=I.如果Q还是个方阵,那么就称矩阵Q是正交矩阵.且有Q’Q=I ==> Q’ = Q-1。我现在想找两个向量A,B,他们不仅相互独立,且正交,也就是A和B生成的空间与a和b生成的空间一样,但是A和B是垂直的.P=Q(Q’Q)-1Q’=QQ’=I,对于最小二乘问题Q’Qx=Q’b,可简化为x=Q’b,即。向量a和b的方向都是任意的,但是二者并不垂直,a的方向不是一定为水平的,这里只是为了好看起见。由此,引出了重要的矩阵分解中的QR分解。原创 2017-12-24 21:50:56 · 2155 阅读 · 0 评论 -
C语言:指向指针的指针
问题:如何理解指向指针的指针?我在一篇教程中看到下面这段,它描述指向指针的指针是如何运作的。引用文章相关段落如下:C12int i = 5, j = 6, k = 7;int *ip1 = &i, *ip2 = &j;现在我们可以这么写:C翻译 2018-01-05 18:00:36 · 478 阅读 · 0 评论 -
Python中函数的形参与按值传递之间的关系
我对python还不够熟悉 , 但是从近两天的学习中发现 , 其存储模型与java相似 , 即变量中存储的是引用 , 是指向真正内容的内存地址(当然 ,java中的八大基本数据类型 , 变量名和值都是存储在堆栈中的 ) , 对变量重新赋值 , 相当于修改了变量副本存储的内存地址 , 而这时的变量已经和函数体外的变量不是同一个了, 在函数体之外的变量 , 依旧存储的是原本的内存地址 , 其值自然没有发生改变 .- 在函数体中改变变量指向的堆中的值 , 对函数外变量有效.原创 2018-01-22 22:09:15 · 811 阅读 · 0 评论 -
Mysql中Drop,Truncate,Delete的区别
1、delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表空间要足够大,需要手动提交(commit)操作才能生效,可以通过rollback撤消操作。(6)truncate与不带where的delete :只删除数据,而不删除表的结构(定义)drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);新行标识所用的计数值重置为该列的种子。原创 2017-12-01 21:09:42 · 1437 阅读 · 0 评论 -
if __name__ == ‘__main__‘ 的正确理解
如果你接触过这些语言,对于程序入口这个概念应该很好理解,C,C++都需要有一个main函数作为程序的入口,也就是程序的运行会从main函数开始。之后,就会判断这个文件的程序入口是不是main(把Python中的程序想象成一个类,那么__name__就相当于构造函数里的__self__),换句话说,如果这个文件是正在执行的,那么它的入口必然是'main'也就是从脚本第一行开始运行,没有统一的入口。对于很多编程语言来说,程序都必须要有一个入口,比如C,C++,以及完全面向对象的编程语言Java,C#等。原创 2018-01-13 23:15:46 · 1019 阅读 · 0 评论 -
Python入门之类与面向对象(一)
我的机器学习教程「美团」算法工程师带你入门机器学习 以及「三分钟系列」数据结构与算法已经开始更新了,欢迎大家订阅~这篇专栏整合了这几年的算法知识,简单易懂,也将是我实体书的BLOG版。欢迎大家扫码关注微信公众号「图灵的猫」,除了有更多AI、算法、Python相关文章分享,还有免费的SSR节点和外网学习资料。其他平台(微信/知乎/B站)也是同名「图灵的猫」,不要迷路哦~...原创 2018-01-13 22:50:36 · 411 阅读 · 0 评论 -
Mysql学习笔记(一):子查询与选择
下列代码是我在学习MOOC的视频时做的一些练习,内容比较简单,主要涉及子查询与连接,大家可以作为练习参考直接使用代码如下:Create database MOOC;Use MOOC;SET NAMES utf8; CREATE TABLE IF NOT EXISTS tdb_goods( goods_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INC原创 2017-12-28 12:07:33 · 549 阅读 · 0 评论 -
判断一个单链表是否有环及环的链接点
3中求出了连接点的位置,就可以求出头结点到连接点的长度。在环上相遇后,记录第一次相遇点为Pos,之后指针slow继续每次走1步,fast每次走2步。在环上相遇后,记录第一次相遇点为Pos,连接点为Join,假设头结点到连接点的长度为。,因此,分别从第一次碰撞点Pos、头指针head开始走,相遇的那个点就是连接点。在下次相遇的时候fast比slow正好又多走了一圈,也就是多走的距离等于环长。第一次碰撞点Pos到连接点Join的距离=头指针到连接点Join的距离。第一次相遇时,fast走的长度 2S =原创 2018-01-12 23:03:36 · 637 阅读 · 0 评论 -
内存、cache和寄存器之间的关系及区别
是中央处理器内的组成部份。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。3. 寄存器是CPU内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,,常见的容量有256KB或512KB L2 Cache。,L2 Cache早期一般是焊在主板上,原创 2018-01-12 22:51:27 · 6003 阅读 · 1 评论 -
一文详解蒙特卡洛(Monte Carlo)法及其应用
蒙特卡罗方法是一种计算方法。原理是通过大量随机样本,去了解一个系统,进而得到所要计算的值。它非常强大和灵活,又相当简单易懂,很容易实现。对于许多问题来说,它往往是最简单的计算方法,有时甚至是唯一可行的方法。它诞生于上个世纪40年代美国的"曼哈顿计划",名字来源于赌城蒙特卡罗,象征概率。原创 2018-01-12 17:42:01 · 91187 阅读 · 4 评论 -
MYSQL的用户变量(@)和系统变量(@@)
设置会话变量不需要特殊权限,但客户端只能更改自己的会话变量,而不能更改其它客户端的会话变量。如果我们移除一个与某个GLOBAL变量具有相同名字的SESSION变量,具有SUPER权限的客户可能会意外地更改GLOBAL变量而不是它自己的连接的SESSION变量。如果我们添加一个与某个GLOBAL变量具有相同名字的SESSION变量,想更改GLOBAL变量的客户可能会发现只有自己的SESSION变量被更改了。设置变量并在同一语句中使用它的另一个问题是变量的默认结果的类型取决于语句前面的变量类型。原创 2018-01-03 22:14:21 · 2980 阅读 · 1 评论