<改变未来的九大算法>读书笔记二

原理

数据库的一致性

1.事务和代办事项表把戏(预写日志记录)

1.代办事项表把戏:先把要执行的的操作写入硬件,即写日志。即使数据库操作错误,也可根据日志来纠正。对日志的操作具有等幂性,即日志中的每项操作不管执行一次或多次,都会有相同的效果。

2.事务:以事务作为一个整体,要么全部完成,要么中途失败则根据日志取消之前的操作(即逆向操作,之前加,现在就减),使数据库回到事务之前的状态(回滚事务)。即事务具备原子性,不可分割,避免出现事务中有些执行了,有些没执行的情况。

2.预备提交把戏(两段提交协议)

1.在有复制数据库时,对于主数据库的将要执行的事务,预备阶段:先由主数据库锁定对应数据行,将新数据写入预写日志,然后将新数据发给各备份数据库,各备份数据库也锁定对应数据行,在日志中写入新数据。第二阶段:各备份数据库返回是否执行成功,任何一个失败,都会让主数据库回滚事务,同时通知其他个备份数据库回滚,否则主数据会发信息让各数据库执行事务。

3.关系数据库与虚表把戏

1.原理:每张表都存储不同的信息集,但不同的表的个体通常以某种方式相连。即让用户把信息以表的形式保存,然后把表中重复的信息分离出去以新表放置,原表和新表通过各自保存的同一重复来匹配(类似于程序中把经常出现的代码分离出去做成函数或类),即用少量重复代替戴良重复,从而节省大量存储空间,而且也具备了一处改动到处收益的优点。

2.虚表把戏:查询时,先把用到的表通过各自保存的重复来匹配(即合并)从而形成一个用完即删的虚表,抛射操作来移除部分不必要的栏(如不是要展示的栏也不是作为查询条件的栏),接着根据查询条件选定部分行抛弃掉其他得到新的虚表,再把不是要展示的栏抛弃掉得到一张回答原始查询的虚表。

图像识别(即分类)

学习通过两种方式:1.他人的详尽教授   2.观看用来教授自己的例子 。第一种对于计算机难以实现,只能第二种。所以计算机学习的过程即是让计算机自动"学习"如何分类样本。基本策略是:给计算机大量标记数据(已分类的样本),让计算机找出各种类的特征,从而根据这些特征对未分类的样本分类。

原理:分类即为把待分类样本大概定位到某个学习样本上去

1.最近邻分类把戏

把要分类的样本和学习样例比较,最接近的样本的类别即是该样本的类别。

无需训练,并未知道分类规则,但分类需要大量实现比对

情况:1.若是地理位置,则是距离待分类样本最近的一个或k个学习样本

2.若是图像,则为与待分类样本区别度最小的学习样本

2.决策树

即使用二分法,通过合适的条件,最终把待分类样本定位到某个学习样本上。而这些问题由计算机通过学习样本训练得出,经过了不断的优化。

需训练,但得出了分类规则,分类时间极短

3.神经网络

事物的决策即是根据各种条件综合得出结论的过程,结论取决于各条件(即变量)

实际中个变量的结论的影响不仅相同,而且很多条件会共同对结论做出影响,需综合起来看,符合这些条件的模型只有神经网络。如对结论的影响是必须综合起来的指向同一神经元(得出该部分变量所占综合权重的节点,之后该节点代表该部分节点去和其他综合计算的模型),然后把带分析样本分块,每块根据神经网络得出最终权值,从而得出结论。

训练过程,先随机预设网络和个节点的权重值,在用实习样本来测试,然后调整网络和权值来使结果接近样本应该的结论,当学习用例足够多,神经网络得到足够的调整,那么神经网络对样本的分类就越准确 。

问题:即使准确度足够高,神经网络部分节点看起来仍似随机的,然而就像神经元的绝大部分连接看起来很随机,但作为整体行动时,这些连接强度松散的集合产生了人类的智能行为。

时间: 2024-11-04 18:55:26

<改变未来的九大算法>读书笔记二的相关文章

Android深度探索HAL读书笔记9

看了本书第九章,我学习到了: HAL(抽象硬件层)是建立在linux驱动之上的一套程序库,这套程序库是属于内核层之上的应用层——系统运行库层. Linux驱动代码类型:访问硬件寄存器的代码和业务逻辑代码. Linux内核采用GPL协议,该协议要求源代码必须开源,即linux驱动必须开源. Android增加HAL的目的:①避免应用程序直接访问linux驱动②保护私人财产,满足不想开源的linux驱动作者的要求,带HAL的linux驱动相当于将数据从HAL传到寄存器,即从寄存器传到HAL的“数据二

Android深度探索HAL读书笔记8

看了本书第八章,我学习到了: 蜂鸣器是开发板自带的一个硬件设备,控制蜂鸣器发声是通过向寄存器写入特定的值实现的.PWM驱动不同于LED 驱动,其由多个文件组成,在编译时将这些文件进行联合编译. 蜂鸣器也称为PWM(脉冲宽度调制),基本原理是通过脉冲来控制蜂鸣器的打开和停止. PWM连接到了TOUT1端口,使用端口F的GPFCON寄存器进行控制.宏S3C64XX_GPFCON表示寄存器GPFCON的虚拟地址.仅用最高两位(30.31位)控制PWM.最高两位为 10时,打开PWM:为00时停止PWM

《Android深度探索》读书笔记10

看了本书第十章,我学习到了: 1.printk函数:运行在内核空间,linux驱动只能用printk来打印内核调试信息.函数原型:asmlikage int printk(const char *fmt).第一个参数表示格式字符串,后面是可变参数,第一个参数若为KERN_DEBUG和KERN_WARNING,值分别为<7>.<4>,数字表示输出的日志级别,默认为KERN_WARNING.该函数既可以将日志信息写入到日志文件,也可将日志信息写到控制台.Printk文件输出日志信息的输

《Android深度探索卷一》第一章Android系统移植与驱动开发概述。

<Android深度探索>第一章讲的是Android系统移植与驱动开发概述.这一章节将对Android以及Linux驱动做一个总体的介绍. Android是一个非常优秀的的嵌入式操作系统.经过几年的发展和演进,Android已经形成了非常完善的系统架构.Android的系统架构分为四层,如下图 Android移植可分为两部分:应用移植和系统移植. Android系统移植是指让Android操作系统在某一个特定硬件平台上运行.使一个操作系统在特定硬件平台上运行的一个首要条件就是该操作系统支持硬件

《Android深度探索卷一》读书笔记二

开发,测试和调用Linux驱动,HAL程序库需要的工具: JDK6或以上版本: Eclipse3.4或以上版本: ADT(用于开发Android应用程序): CDT(用于开发AndroidNDK程序): Android SDK: Android NDK: 交叉编译环境: Linux内核源代码: Android源代码: 用于调试开发板的串口工具:minicom; 一.安装JDK 下载JDK压缩包并解压到任意目录,在Linux终端输入“getdit /etc/profile”打开profile文件,

《Android深度探索卷一》读书笔记一

一.Android系统架构 Android系统架构分为4层: 第一层:Linux内核 Android是基于Linux内核的,因此,Android内核和标准Linux2.6的内核结构基本相同,细微差异在Android在Linux内核中增加的主要是一些Android专用驱动和Android使用的设备驱动,这些驱动程序在Android不同版本中可能并不通用. 第二层:C/C++代码库 是使用C/C++编写的代码库也就是Linux下的.so文件,还有Android运行时环境(AndroidRuntime

《Android深度探索卷一》读书笔记四

下载,编译和测试Android源代码 1.配置Android源代码下载环境 下载之前必须先在Linux终端执行一些命令配置环境. 创建存放脚本文件的目录“mkdir ~/bin””PATH=~/bin:$PATH”:下载repo脚本文件“curl 地址 > ~/bin/repo””chmod a+x ~/bin/repo”;创建存放Android源代码的目录“mkdir android_source”“cd android_source”;初始化“repo init -u 地址”: 2.开始下载

《Android深度探索卷一》读书笔记五

下载和编译Linux内核源代码 Android源代码不包含Linux源代码,必须单独下载.不能直接在www.kernel.org下载Linux内核,应在Google提供的网站下载Android中使用的Linux内核. 1.下载“git clone https://android.googlesource.com/kernel/common.git”,进入common目录,“git branch -a”查看当前有的远程版本,之后导出 到导出所需版本“git checkout -b android-

探索需求读书笔记二

第2章陈述需求中的含混性        攻击含混性是因为含混性需要成本.        尽可能早地攻击含混性,因为即使你最终消除了它,在产品开发的早先阶段改正所需要的成本要比以后改正的成本少很多很多.        如何攻击含混性是全书的主题.但首先,一定要记住用一种非常有趣的方法来使用你的智慧-探索应该是一种乐趣.        探索的基本步骤:1.向某个方向移动:2.看看在那里发现了什么:3.记录所发现的东西:4.有目的地分析所发现的东西:5.通过对所发现东西的分析和记录选择下一个方向:6.

Android深度探索(卷一):HAL与驱动开发第一章节读书笔记

在课下我学习了Android深度探索(卷一)这本书.该课本的第一章节,详细介绍了如何搭建和使用Ubuntn Linux12.04 LTS.Android模拟器和S3C6410开发板. 首先,我知道了Android是一个非常优秀的嵌入式操作系统.Android的系统架构分为四层:Linux内核.c/c++代码库.Android SDK API和应用程序. 其次,是Android系统的移植.Android移植分为两部分:应用移植和系统移植.应用移植是指将应用程序层的应用程序移植到某一个特定的硬件平台