几种常见模式识别算法整理和总结

1. K-Nearest Neighbor

K-NN可以说是一种最直接的用来分类未知数据的方法。基本通过下面这张图跟文字说明就可以明白K-NN是干什么的

 

knn

简单来说,K-NN可以看成:有那么一堆你已经知道分类的数据,然后当一个新数据进入的时候,就开始跟训练数据里的每个点求距离,然后挑离这个训练数据最近的K个点看看这几个点属于什么类型,然后用少数服从多数的原则,给新数据归类。一个比较好的介绍k-NN的课件可以见下面链接,图文并茂,我当时一看就懂了

http://courses.cs.tamu.edu/rgutier/cs790_w02/l8.pdf

 

实际上K-NN本身的运算量是相当大的,因为数据的维数往往不止2维,而且训练数据库越大,所求的样本间距离就越多。就拿我们course project的人脸检测来说,输入向量的维数是1024维(32x32的图,当然我觉得这种方法比较silly),训练数据有上千个,所以每次求距离(这里用的是欧式距离,就是我们最常用的平方和开根号求距法) 这样每个点的归类都要花上上百万次的计算。所以现在比较常用的一种方法就是kd-tree。也就是把整个输入空间划分成很多很多小子区域,然后根据临近的原则把它们组织为树形结构。然后搜索最近K个点的时候就不用全盘比较而只要比较临近几个子区域的训练数据就行了。kd-tree的一个比较好的课件可以见下面链接:

http://www.inf.ed.ac.uk/teaching/courses/inf2b/learnnotes/inf2b-learn06-lec.pdf

当然,kd-tree有一个问题就是当输入维数跟训练数据数量很接近时就很难优化了。所以用PCA(稍后会介绍)降维大多数情况下是很有必要的

 

 

2. Bayes Classifier

贝叶斯方法一篇比较科普的中文介绍可以见pongba的平凡而神奇的贝叶斯方法: http://mindhacks.cn/2008/09/21/the-magical-bayesian-method/,实际实现一个贝叶斯分类器之后再回头看这篇文章,感觉就很不一样。

在模式识别的实际应用中,贝叶斯方法绝非就是post正比于prior*likelihood这个公式这么简单,一般而言我们都会用正态分布拟合likelihood来实现。

用正态分布拟合是什么意思呢?贝叶斯方法式子的右边有两个量,一个是prior先验概率,这个求起来很简单,就是一大堆数据中求某一类数据占的百分比就可以了,比如300个一堆的数据中A类数据占100个,那么A的先验概率就是1/3。第二个就是likelihood,likelihood可以这么理解:对于每一类的训练数据,我们都用一个multivariate正态分布来拟合它们(即通过求得某一分类训练数据的平均值和协方差矩阵来拟合出一个正态分布),然后当进入一个新的测试数据之后,就分别求取这个数据点在每个类别的正态分布中的大小,然后用这个值乘以原先的prior便是所要求得的后验概率post了。

贝叶斯公式中还有一个evidence,对于初学者来说,可能会一下没法理解为什么在实际运算中它不见了。实则上,evidence只是一个让最后post归一化的东西,而在模式分类中,我们只需要比较不同类别间post的大小,归一化反而增加了它的运算量。当然,在有的地方,这个evidence绝对不能省,比如后文提到的GMM中,需要用到EM迭代,这时候如果不用evidence将post归一化,后果就会很可怕。

Bayes方法一个不错的参考网页可见下面链接:

http://www.cs.mcgill.ca/~mcleish/644/main.html


 

3. Principle Component Analysis

PCA,译为主元分析或者主成份分析,是一种很好的简化数据的方法,也是PR中常见到不能再常见的算法之一。CSDN上有一篇很不错的中文博客介绍PCA,《主元分析(PCA)理论分析及应用》,可以见下面链接:

http://blog.csdn.net/ayw_hehe/archive/2010/07/16/5736659.aspx

对于我而言,主元分析最大的意义就是让我明白了线性代数中特征值跟特征向量究竟代表什么,从而让我进一步感受到了线性代数的博大精深魅力无穷。- -|||

 

PCA简而言之就是根据输入数据的分布给输入数据重新找到更能描述这组数据的正交的坐标轴,比如下面一幅图,对于那个椭圆状的分布,最方便表示这个分布的坐标轴肯定是椭圆的长轴短轴而不是原来的x y。

PCA

那么如何求出这个长轴和短轴呢?于是线性代数就来了:我们求出这堆数据的协方差矩阵(关于什么是协方差矩阵,详见本节最后附的链接),然后再求出这个协方差矩阵的特征值和特征向量,对应最大特征值的那个特征向量的方向就是长轴(也就是主元)的方向,次大特征值的就是第二主元的方向,以此类推。

 

关于PCA,推荐两个不错的tutorial:

(1) A tutorial on Principle Component Analysis从最基本的数学原理到应用都有,让我在被老师的讲课弄晕之后瞬间开悟的tutorial:

 http://www.cs.otago.ac.nz/cosc453/student_tutorials/principal_components.pdf

(2) 里面有一个很生动的实现PCA的例子,还有告诉你PCA跟SVD是什么关系的,对编程实现的帮助很大(当然大多数情况下都不用自己编了):

 http://www.math.ucsd.edu/~gptesler/283/pca_07-handout.pdf

 

 


 

 

 

4. Linear Discriminant Analysis

LDA,基本和PCA是一对双生子,它们之间的区别就是PCA是一种unsupervised的映射方法而LDA是一种supervised映射方法,这一点可以从下图中一个2D的例子简单看出

lda

图的左边是PCA,它所作的只是将整组数据整体映射到最方便表示这组数据的坐标轴上,映射时没有利用任何数据内部的分类信息。因此,虽然做了PCA后,整组数据在表示上更加方便(降低了维数并将信息损失降到最低),但在分类上也许会变得更加困难;图的右边是LDA,可以明显看出,在增加了分类信息之后,两组输入映射到了另外一个坐标轴上,有了这样一个映射,两组数据之间的就变得更易区分了(在低维上就可以区分,减少了很大的运算量)。

 

在实际应用中,最常用的一种LDA方法叫作Fisher Linear Discriminant,其简要原理就是求取一个线性变换,是的样本数据中“between classes scatter matrix”(不同类数据间的协方差矩阵)和“within classes scatter matrix”(同一类数据内部的各个数据间协方差矩阵)之比的达到最大。关于Fisher LDA更具体的内容可以见下面课件,写的很不错~

http://www.csd.uwo.ca/~olga/Courses//CS434a_541a//Lecture8.pdf 

 

 

 

5. Non-negative Matrix Factorization

NMF,中文译为非负矩阵分解。一篇比较不错的NMF中文介绍文可以见下面一篇博文的链接,《非负矩阵分解:数学的奇妙力量》

http://chnfyn.blog.163.com/blog/static/26954632200751625243295/

 

这篇博文很大概地介绍了一下NMF的来龙去脉(当然里面那幅图是错的。。。),当然如果你想更深入地了解NMF的话,可以参考Lee和Seung当年发表在Nature上面的NMF原文,"Learning the parts of objects by non-negative matrix factorization"

http://www.seas.upenn.edu/~ddlee/Papers/nmf.pdf

读了这篇论文,基本其他任何介绍NMF基本方法的材料都是浮云了。

 

NMF,简而言之,就是给定一个非负矩阵V,我们寻找另外两个非负矩阵W和H来分解它,使得后W和H的乘积是V。论文中所提到的最简单的方法,就是根据最小化||V-WH||的要求,通过Gradient Discent推导出一个update rule,然后再对其中的每个元素进行迭代,最后得到最小值,具体的update rule见下图,注意其中Wia等带下标的符号表示的是矩阵里的元素,而非代表整个矩阵,当年在这个上面绕了好久。。

nmf

当然上面所提的方法只是其中一种而已,在http://spinner.cofc.edu/~langvillea/NISS-NMF.pdf中有更多详细方法的介绍。

相比于PCA、LDA,NMF有个明显的好处就是它的非负,因为为在很多情况下带有负号的运算算起来都不这么方便,但是它也有一个问题就是NMF分解出来的结果不像PCA和LDA一样是恒定的。

 


 

 

 

6. Gaussian Mixture Model

GMM高斯混合模型粗看上去跟上文所提的贝叶斯分类器有点类似,但两者的方法有很大的不同。在贝叶斯分类器中,我们已经事先知道了训练数据(training set)的分类信息,因此只要根据对应的均值和协方差矩阵拟合一个高斯分布即可。而在GMM中,我们除了数据的信息,对数据的分类一无所知,因此,在运算时我们不仅需要估算每个数据的分类,还要估算这些估算后数据分类的均值和协方差矩阵。。。也就是说如果有1000个训练数据10租分类的话,需要求的未知数是1000+10+10(用未知数表示未必确切,确切的说是1000个1x10标志向量,10个与训练数据同维的平均向量,10个与训练数据同维的方阵)。。。反正想想都是很头大的事情。。。那么这个问题是怎么解决的呢?

这里用的是一种叫EM迭代的方法。

 

具体使用方法可以参考http://neural.cs.nthu.edu.tw/jang/books/dcpr/doc/08gmm.pdf 这份台湾清华大学的课件,写的真是相当的赞,实现代码的话可以参考:

1. 倩倩的博客http://www.cnblogs.com/jill_new/archive/2010/12/01/1893851.html 和

2. http://www.cs.ru.nl/~ali/EM.m

 

当然 Matlab里一般也会自带GMM工具箱,其用法可以参考下面链接:

http://www.mathworks.com/help/toolbox/stats/gmdistribution.fit.html

  • 21
    点赞
  • 173
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
非常详细的资源,历时三天整理。摄影技巧学习 机器上的参数 镜头上的 OIS 相机上的 为什么要用取景器? 没有取景器的微单拍摄,在以下场景非常苦恼: 1、强光下 2、老花眼,尤其是我这样37岁就开始老花眼的人 3、尤其是长焦拍摄,需要稳定的状态下。单反相机机身和脸部是一个重要的支撑点。 4、液晶取景非常费电,为了抓拍又不能随时关机,得多带几块电池。 除非在看取景器非常困难的情况下需要显示屏辅助取景(比如相机高度已高过头顶或机位很低)一般情况还是看取景器。 1是因为取景器是光学成像,镜头所拍摄的东西通过相机里的反光板能一点不差的传送到眼睛里,显示屏是电子的,从真实度和清晰度都不如取景器。 2显示屏取景更费电,如果出门拍摄一天都用显示器取景会很费电。 3一般单反相机在显示屏模式下按下快门时,快门不是马上释放,而是要有一个1秒钟左右的间隔,如果拍摄移动物体,这个世界可能被摄体已经不在预先构图中预计出现的位置了。 当然,微单用的是电子取景器,这个是要耗电的,不过关掉电子屏还是会节省很多点。 如何关闭自动连接手机传输图像? 耗电情况如何? 后期 capture one 后期 导入图片后不能编辑,所有的编辑图标都是灰色的 首选项-图像-打开JPEG编辑、打开tiff编辑、打开png编辑都勾上。 没找着 打开JPEG编辑 然后,查看英文界面发现乃session一词,就是允许用户直接访问硬盘上的图像文件并对其直接操作的意思。 这个功能是C1与LR的最大不同之一,用LR时,不导入就无法对图像进行编辑调整,而C1用户则可在会话的方式下,直接查看硬盘的目录树,在任意位置上打开图像文件。 然后,从目录树里直接选择图像文件并打开编辑,会话是首选。当用此法查看图像时,也会在图像所在的文件夹里同时生成一个CaptureOne子文件夹。 是不是和图层有关? 也无法联机拍摄? 是不是xt30不支持 是不是和激活不成功有关? 重新激活pro模式 c1 的几种模式 Express版本免费提供给Sony用户使用(在Pro for Sony的基础上,对有一些功能进行了阉割); Pro for Sony为收费版本,功能与Capture One Pro一样,但是只支持Sony机器。 DB版本免费提供给Phase One和Leaf的数码后背用户使用,不支持135系列相机。 Capture One Pro的售价为239欧元/279美刀(国内售价2390元),支持市场上绝大部分的135相机和数码后背(据我的经验来看,只不支持宾得),功能最为齐全。 如何查看已经激活? 重新安装 Capture One有几个核心功能: 1.最好的Raw格式解析算法 2.最好的联机拍摄(商业摄影师联机拍摄首选) 3.颜色编辑器 4.图层遮罩 5.关键字管理(Capture One Pro 9新功能) 6.与PS、LR相比,Capture One 提供了另外的一套后期思路,在我看来学习Capture One的成本要比LR低,但因为国内相关教程较少,所以Capture One在中国的用户没有LR的多,知名度也没有LR的高。 通俗讲capture one的优势 Capture One 可以创建属于你自己的色彩管理文件 Capture One 可以让你马上看到画面中对焦对实了的部分 有点像观看照片时的峰值 Capture One 可以用色彩编辑器做你想做的关于色彩的一切调节 Capture One 联机拍摄无人能比 还可以用iPad或iPhone无线实时监看画面 拿过去给模特看 做动作或表情调整 ram格式是个什么格式? affinity photo 拍摄技巧 如何保持手持拍摄? ①双手握持三点接触法 ②贴身握机发 ③颈部拉直肩带发 能拍一些平移的画面 ④机身防抖 ⑤后期 ⑥人肉独脚架(利用重力下坠) ⑦广角拍摄,短焦开启防抖 ⑧拍成慢动作,也能防抖 用更高的帧数 其他 有时手持拍摄也是有独特的效果的 机器拍摄 画面有点不自然,有点假 光圈快门感光度调节顺序 首先根据需要的景深选择光圈, 用光圈优先模式:这样快门速度就自动了。 这个曝光只能由相机自动决定,差不了太多。 大多数摄影师大多数场景常用光圈优先模式拍摄? 如何设置为光圈优先? 根据物体移动速度选快门速度, 快门速度会适合抓拍,或者是记录轨迹 如果用快门优先模式,可以设置相对比较快的快门速度,光圈自动,同样能满足大部分拍摄。 最后根据需要的曝光选感光度。 B什么意思? 曝光补偿和感光度的区别? 元素要少!(做减法) 元素统一 云和天空 人为产生的元素 黑夜会弱化掉所有的元素,只留下点亮的那些东西 减法 虚化 虚化了背景,统一了元素 元素划分 调色上做减法 处理前 处理后(去掉了几种颜色) 处理前 处理后 对焦 如何手动对焦? 想要收获最好的虚化效果,要达到以下三个条件 手动对焦一般都是在一些很极限的情况下才会用了。 不要太在意专业啊、手动啊啥的,千万别以为手动就是专业的,自动对焦本身就是技术的进步,没有那个摄影师会在自动能满足的情况下去考虑手动对焦,除非是职业装13的。 手动对焦适用场合大致如下: 1、弱光环境 很多拍星空的朋友都有这样的体验,当你想拍摄清晰的前景,对远处暗淡的主体对焦时,你半按快门,却发觉相机无法对焦。 在低光低对比的环境下,相机是无法准确对焦的,此时,手动对焦便是最好的选择。 2、微距拍摄   近距离拍摄物体,半按快门,图像一直在对焦和失焦之间徘徊,始终无法全按快门拍照,此时是最尴尬的时刻,这是因为景深太浅,导致相机无法自动对焦。 这时使用手动对焦就可以解决大部分问题。 3、主体前有遮挡物   在一些场合,你想拍摄的被摄主体前面,有其他物体在前景位置遮挡,比如栏杆,玻璃等等,自动对焦往往就会将焦点放在前景物体上,而不是你想拍摄的主体,此时,用手动对焦能快速解决问题。 4、使用老镜头   老镜头多没有自动对焦模式,只支持手动对焦,此时便毫无其他选择了。 5、摄影乐趣 以前很喜欢蔡司镜头,它拍出的图片色彩浓郁,德味甚浓,但蔡司头都是手动头。 犹豫再三,半年前还是禁不住诱惑进了一只蔡司50/1.4镜头。 其后,我多次用它进行街拍或人像拍摄,不得不说,手动对焦的乐趣,是旁人无法体会的。 二、手动对焦方法 1、相机设置:(以尼康相机为例) 1.1.镜头的对焦模式,调为手动,即 “M”档。 1.2.相机的对焦模式,调为手动,即 “M”档。 1.3.另外,我拍摄风光类题材,相机的拍摄模式也是手动“M”档。 2、对焦点选择: 2.1.静态风光摄影中,一般选择全景深的近三分位对焦。 2.2.城市夜景风光,对焦部位尽量选择窗户等相对高光比区域,便于合焦确认。 2.3.强光手电辅助照亮主体,也是手动快速对焦的法宝。 3、手动对焦方法: 3.1.稳定:使用三角架等设备固定相机。 3.2.光圈:一般风光摄影的光圈设置为F8-F16,在对焦时,先把它设置为镜头的最大光圈,以得到最浅景深便于合焦识别。这一步是手动精准对焦的关键! 3.3.打开相机背屏显示模式: 3.4.选择对焦点: 左右上下移动背屏上的红色方块,来选择对焦点。 3.5.最大限度放大对焦点: 按相机上的放大键,最大限度放大对焦点。 3.6.手动转动镜头的对焦环,调节到对焦点最清晰为止。 3.7.把光圈设置再调整回实拍光圈,即F8-F16。 3.8.手动对焦完毕,可以实拍。 其他的合焦确认方法: 1、相机合焦提示 调节对焦环,观察单反相机目镜,里面有合焦显示提示。尼康相机是白色的圆点,没有合焦时,是向右或向左的白色三角。 2、峰值对焦 峰值对焦是索尼微单相机所具备的一种对焦方式,其原理是将画面对比度最高的区域用高亮的方式显示出来。越是接近合焦,画面上出现的红色(颜色也可设定为其他颜色)颗粒就越是明显。而这些红色的颗粒就是所谓的峰值。 对焦环 如何手动对焦? 想要收获最好的虚化效果,要达到以下三个条件 手动对焦一般都是在一些很极限的情况下才会用了。 不要太在意专业啊、手动啊啥的,千万别以为手动就是专业的,自动对焦本身就是技术的进步,没有那个摄影师会在自动能满足的情况下去考虑手动对焦,除非是职业装13的。 手动对焦适用场合大致如下: 1、弱光环境 很多拍星空的朋友都有这样的体验,当你想拍摄清晰的前景,对远处暗淡的主体对焦时,你半按快门,却发觉相机无法对焦。 在低光低对比的环境下,相机是无法准确对焦的,此时,手动对焦便是最好的选择。 2、微距拍摄   近距离拍摄物体,半按快门,图像一直在对焦和失焦之间徘徊,始终无法全按快门拍照,此时是最尴尬的时刻,这是因为景深太浅,导致相机无法自动对焦。 这时使用手动对焦就可以解决大部分问题。 3、主体前有遮挡物   在一些场合,你想拍摄的被摄主体前面,有其他物体在前景位置遮挡,比如栏杆,玻璃等等,自动对焦往往就会将焦点放在前景物体上,而不是你想拍摄的主体,此时,用手动对焦能快速解决问题。 4、使用老镜头   老镜头多没有自动对焦模式,只支持手动对焦,此时便毫无其他选择了。 5、摄影乐趣 以前很喜欢蔡司镜头,它拍出的图片色彩浓郁,德味甚浓,但蔡司头都是手动头。 犹豫再三,半年前还是禁不住诱惑进了一只蔡司50/1.4镜头。 其后,我多次用它进行街拍或人像拍摄,不得不说,手动对焦的乐趣,是旁人无法体会的。 二、手动对焦方法 1、相机设置:(以尼康相机为例) 1.1.镜头的对焦模式,调为手动,即 “M”档。 1.2.相机的对焦模式,调为手动,即 “M”档。 1.3.另外,我拍摄风光类题材,相机的拍摄模式也是手动“M”档。 2、对焦点选择: 2.1.静态风光摄影中,一般选择全景深的近三分位对焦。 2.2.城市夜景风光,对焦部位尽量选择窗户等相对高光比区域,便于合焦确认。 2.3.强光手电辅助照亮主体,也是手动快速对焦的法宝。 3、手动对焦方法: 3.1.稳定:使用三角架等设备固定相机。 3.2.光圈:一般风光摄影的光圈设置为F8-F16,在对焦时,先把它设置为镜头的最大光圈,以得到最浅景深便于合焦识别。这一步是手动精准对焦的关键! 3.3.打开相机背屏显示模式:
数据分析 定义:是指用适当的统计分析方法对收集来的大量数据进行分析,将它们加以汇总和理 解并消化,以求最大化地开发数据的功能,发挥数据的作用。数据分析是为了提取有用 信息和形成结论而对数据加以详细研究和概括总结的过程。 目的:把隐藏在一大批看似杂乱无章的数据背后的信息集中和提炼出来,总结出所研究 对象的内在规律,帮助管理者进行判断和决策。 作用:现状分析、原因分析和预测分析 步骤:明确分析目的与框架、数据收集、数据处理、数据分析、数据展现和撰写报告等 6个阶段。 1、明确分析目的与框架 一个分析项目,你的数据对象是谁?分析目的是什么?要解决什么业务问题?目的明确 之后,就可以梳理分析思路整理分析框架。不同的项目对数据的要求,使用的分析手段 是不一样的。所以这些是进行数据分析的方向和前提。 2、数据收集 数据收集是按照确定的数据分析目的和框架内容,有目的的收集、整合相关数据的一个 过程,它是数据分析的一个基础。 3、数据处理 数据处理是指对收集到的数据进行加工、整理,以便开展数据分析,它是数据分析前必 不可少的阶段。这个过程是数据分析整个过程中最占据时间的,也在一定程度上取决于 数据仓库的搭建和数据质量的保证。数据处理主要包括数据清洗、数据转化、数据提取 和数据计算等处理方法。 4、数据分析 数据分析是指通过分析手段、方法和技巧对处理过好的数据进行探索、分析,提取有价 值的信息,从中发现因果关系、内部联系和业务规律。 这个阶段就要涉及到工具和方法的使用。其一要熟悉常规数据分析方法,如方差、回归 、因子、聚类、分类、时间序列等,这些我在学校可以学习。其二是熟悉数据分析工具 ,Excel最常见,还有专业的分析软件,如数据分析工具SPSS/SAS/R/Matlab等,便于进 行一些专业的统计分析、数据建模等。 5、数据展现 一般情况下,数据分析的结果都是通过图、表的方式来呈现,借助数据展现手段,能更 直观的让数据分析师表述想要呈现的信息、观点和建议。 常用的图表包括饼图、折线图、柱形图/条形图、散点图、雷达图等、金字塔图、矩阵图 、漏斗图、帕雷托图等。 6、撰写报告 最后阶段,就是撰写数据分析报告,这是对整个数据分析成果的一个呈现。通过分析报 告,把数据分析的目的、过程、结果及方案完整呈现出来,以供商业目的提供参考。 一份好的数据分析报告,首先需要有一个好的分析框架,并且图文并茂,层次明晰,能 够让阅读者一目了然。另外,数据分析报告需要有明确的结论、建议和解决方案,不仅 仅是找出问题,后者是更重要的,否则称不上好的分析,同时也失去了报告的意义。 数据挖掘(Data Mining) 数据挖掘是知识发现(KDD)的一个关键步骤。一般是指从数据库的海量数据中通过算法 揭示出隐含的、先前未知的并有潜在价值的信息的过程。它是一种决策支持过程,主要 基于人工智能、机器学习、模式识别、统计学、数据库、可视化技术等。 数据挖掘的定义分为技术上的定义和商业定义: 1.技术上的定义及含义 数据挖掘就是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中,提 取隐含在其中的、人们事先不知道的、但又是潜在有用的信息和知识的过程。这个定义 包括好几层含义:数据源必须是真实的、大量的、含噪声的;发现的是用户感兴趣的知 识;发现的知识要可接受、可理解、可运用;并不要求发现放之四海皆准的知识,仅支 持特定的发现问题。 2.商业角度的定义 按企业既定业务目标,对大量的企业数据进行探索和分析,揭示隐藏的、未知的或验 证已知的规律性,并进一步将其模型化的先进有效的方法。 数据挖掘任务有两类: 一:描述性挖掘任务:刻画数据库中数据的一般特性; 二:预测性挖掘任务:在当前数据的基础上进行推断,以进行预测。 数据挖掘常用的方法: 利用数据挖掘进行数据分析常用的方法主要有分类、回归分析、聚类、关联规则、特征 、变化和偏差分析、Web页挖掘等, 它们分别从不同的角度对数据进行挖掘。 1、分类 分类是找出数据库中一组数据对象的共同特点并按照分类模式将其划分为不同的类,其 目的是通过分类模型,将数据库中的数据项映射到某个给定的类别。它可以应用到客户 的分类、客户的属性和特征分析、客户满意度分析、客户的购买趋势预测等,如一个汽 车零售商将客户按照对汽车的喜好划分成不同的类,这样营销人员就可以将新型汽车的 广告手册直接邮寄到有这种喜好的客户手中,从而大大增加了商业机会。 2、回归分析 回归分析方法反映的是事务数据库中属性值在时间上的特征,产生一个将数据项映射到 一个实值预测变量的函数,发现变量或属性间的依赖关系,其主要研究问题包括数据序 列的趋势特征、数据序列的预测以及数据间的相关关系等。它可以应用到市场营销的各 个方面,如客户寻求、保持和预防客户流失活动、产品生命周期分析、销售趋势
对“info make”的翻译整理,不是一个纯粹的语言翻译版本,其中对GNU make的一些语法和用法进行了一些详细分析和说明,也加入了一些个人的观点和实践总结。 本书的所有的例子都可以在支持V3.8版本的GNU make的系统中正确执行。 中文于册 伪目标 强制目标(没有命令或依赖的规则) 空目标文件 的特殊目标 多目标 多规则目标 静态模式 静态模式规则的语法 静态模式和隐含规则 双冒号规则 自动产生依赖 第五章:规则的命令 为规则书写命令 命令回显 命令的执行 并发执行命令 命令执行的错误 中断的执行 的递归执行 变量 变量和递归 命令行选项和递归 选项 定义命令包 第六章 中的变量 使用变量 变量的引用 两种变量定义(赋值) 归展开式变量 直接展开式变量 定义一个空格 ”操作符 变量的高级用法 变量的替换引用 变量的套嵌引用 变量取值 如何设置变量 追加变量值 指示符 多行定义 系统环境变量 目标指定变量 模式指定变量 第七章 的条件执行 的条件判断 个例子 条件判断的基本语法 标记测试的条件语句 笫八章:的内嵌函数 的函数 年月日 中文于册 函数的调用语法 文本夂理函数 文件名处理函数 函数 函数 西数 函数 函数 函数 西数 的控制函数 第九章:执行 执行 指定 文件 指定终极日标 替代命令的执行 防止特定文件重建 替换变量定义 使用 进行编译测试 的命令行选项 第十章: 的隐含规则 使用隐含规则 隐含规则的使用 的隐含规则一览 隐含变量 代表命令的变量 命令参数的变量 隐含规则链 模式规 模式规则介绍 模式规则示例 自动化变量 年月日 中文于册 模式的匹配 万用规则 重建内嵌隐含规则 缺省规则 后缀规则 隐含规则搜索算法 笫十一章:使用更新静态库文件 更新静态库文件 库成员作为目标 静态库的更新 更新静态庠的符号索引表 静态库的注意享项 静态库的后缀规则 第十二章: 的特点 的一些特点 源自 的特点 源自其他版本的特点 自身的特点 第十三章和其它版本的兼容 不兼容性 第十四章 的约定 书写约定 基本的约定 规则命令行的约定 代表命令变量 安装目录变量 的标准目标名 安装命令分类 第十五章的常见错误信息 产生的错误信息 附录:关键字索引 可识别的指示符 函数 的自动化变量 环境变量 后序 年月日 中文于册 关于本书 本文瑾献给所有热爱 的程序员!本中文文档版权所有 本文比较完整的讲述 工具,涵盖 的用法、语法。同时重 讨论如何为一个工程编写 作为一个程序员, 工具的使用以及编 写 是必嚅的。系统、详细讲述的中文资料比较少,出于对广大中文 的支持,本人在工作之余,花了个多月时间完成对“ 的翻译整理,完成 这个中文版手册。夲书不是一个纯粹的语言翻译版本,其中对 的一些语法 和用法根据我个人的工作经验进行了一些详细分析和说明,也加入了一些个人的观点和 实践总结。本书的所有的例子都可以在支持版本的 的系统中正确执行。 由于个人水平限制,本文在一些地方存在描述不准确之处。恳请大家在阅读过程中 提出您宝贵的意见,也是对我个人的帮助。我的个人电子邯箱地址: 非常愿意和大家交流!共同学习 阅读本书之前,读者应该对 的工具链和 的一些常用编程工具有一定的 了解。诸如: 等;同时在书写 时,需要能够进行一些 基本的编程。这些工具是维护一个工程的基础。如果大家对这些工具的用法不是 很熟悉,可参考项目资料 阅读本文的几点建议: 如果之前你对 没有了解、当前也不想深入的学习 的读 者。可只阅读本文各章节前半部分的内容(作为各章节的基础知识) 如果你已经对 比较熟悉,你更霄要关心此版本的新增特点、功能、 和之前版本不兼容之处;也可以作为开发过程过程的参考手册。 之前你对 没有概念、或者刚开始接触,本身又想成为一个 下 的专业程序员,那么建议:完整学习本文的各个章节,包括了基础知识和高级 用法、技巧。它会为你在 下的工程开发、工程管理提供非常有用的帮助。 此中文文档当前版本 本文的所有勘误和最新版本可在主 页 上获取!! 谢谢! 徐海兵 年月日 中文于册 第一章:概述 概既述 环境下的程序员如果不会侠用 来构建和管理自己的工程,应该 不能算是一个合柊的专业程序员,至少不能称得上是程序员。在 )环 境下侠用 的 工具能够比较容易的构建一个属于你自己的工程,整个工程的 编译只需要一个命令就可以完成编译、连接以至于最后的执行。不过这需要我们投入 些时间去完成一个或者多个称之为 文件的编写。此文件正是 正常工作 的基础 所要完成的 文件描述了整个工程的编译、连接等规则。其中包括:工程 中的哪些源文件需要编译以及如何编译、需要创建那些库文件以及如何创建这些库文 件、如何最后产生我们想要得可执行文件。尽管看起来可能是很复杂的事情,但是为工 程编写
第三卷************** 不错的PDF电子书,共3个分卷,点我名字可以找全 第1部分 逆向101 第1章 基础 3 1.1 什么是逆向工程 3 1.2 软件逆向工程:逆向 4 1.3 逆向应用 4 1.3.1 与安全相关的逆向 5 1.3.2 软件开发中的逆向 8 1.4 底层软件 9 1.4.1 汇编语言 10 1.4.2 编译器 11 1.4.3 虚拟机和字节码 12 1.4.4 操作系统 13 1.5 逆向过程 13 1.5.1 系统级逆向 14 1.5.2 代码级逆向 14 1.6 工具 14 1.6.1 系统监控工具 15 1.6.2 反汇编器 15 1.6.3 调试器 15 1.6.4 反编译器 16 1.7 逆向合法吗? 17 1.7.1 互操作性 17 1.7.2 竞争 18 1.7.3 版权法 19 1.7.4 商业机密和专利权 20 1.7.5 美国数字千禧版权法 20 1.7.6 DMCA案例 22 1.7.7 许可证协议 23 1.8 代码范例与工具 23 1.9 结论 23 第2章 底层软件 25 2.1 高阶视角 26 2.1.1 程序结构 26 2.1.2 数据管理 29 2.1.3 控制流 32 2.1.4 高级语言 33 2.2 低阶视角 37 2.2.1 底层数据管理 37 2.2.2 控制流 43 2.3 汇编语言101 44 2.3.1 寄存器 44 2.3.2 标志位 46 2.3.3 指令格式 47 2.3.4 基本指令 48 2.3.5 范例 52 2.4 编译器和编译入门 53 2.4.1 定义编译器 54 2.4.2 编译器架构 55 2.4.3 列表文件 58 2.4.4 专用编译器 59 2.5 执行环境 60 2.5.1 软件执行环境(虚拟机) 60 2.5.2 现代处理器的硬件执行环境 63 2.6 结论 68 第3章 Windows基础知识 69 3.1 组件及基本架构 70 3.1.1 简要回顾 70 3.1.2 特征 70 3.1.3 支持的硬件 71 3.2 内存管理 71 3.2.1 虚拟内存和分页 72 3.2.2 工作集 74 3.2.3 内核内存和用户内存 74 3.2.4 内核内存空间 75 3.2.5 区段对象 77 3.2.6 VAD树 78 3.2.7 用户模式的内存分配 78 3.2.8 内存管理API 79 3.3 对象与句柄 80 命名对象 81 3.4 进程与线程 83 3.4.1 进程 84 3.4.2 线程 84 3.4.3 运行状态切换 85 3.4.4 同步对象 86 3.4.5 进程初始化顺序 87 3.5 应用程序编程接口 88 3.5.1 Win32 API 88 3.5.2 本地API 90 3.5.3 系统调用机制 91 3.6 可执行文件格式 93 3.6.1 基本概念 93 3.6.2 映像区段(Image Sections) 95 3.6.3 区段对齐(Section Alignment) 95 3.6.4 动态链接库 96 3.6.5 头部 97 3.6.6 导入与导出 99 3.6.7 目录 99 3.7 输入与输出 103 3.7.1 I/O系统 103 3.7.2 Win32子系统 104 3.8 结构化异常处理 105 3.9 结论 107 第4章 逆向工具 109 4.1 不同的逆向方法 110 4.1.1 离线代码分析 110 4.1.2 现场代码分析 110 4.2 反汇编器——ILDasm 110 4.3 调试器 116 4.3.1 用户模式调试器 118 4.3.2 内核模式调试器 122 4.4 反编译器 129 4.5 系统监控工具 129 4.6 修补工具 131 Hex Workshop 131 4.7 其他类型的逆向工具 133 可执行程序转储工具 133 4.8 结论 138 第2部分 应用逆向 第5章 未公开的技术 141 5.1 逆向和互操作性 142 5.2 基本原则 142 5.3 定位未公开的API函数 143 我们要找什么? 144 5.4 案例研究:NTDLL.DLL中的 5.4 Generic Table API 145 5.4.1 RtlInitializeGenericTable 146 5.4.2 RtlNumberGenericTableElements 151 5.4.3 RtlIsGenericTableEmpty 152 5.4.4 RtlGetElementGenericTable 153 5.4.5 RtlInsertElementGenericTable 168 5.4.6 RtlLookupElementGenericTable

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值