代码优化和目标代码生成有什么区别?
所谓代码优化是指对程序代码进行等价(指不改变程序的运行结果)变换。程序代码可以是中间代码(如四元式代码),也可以是目标代码。等价的含义是使得变换后的代码运行结果与变换前代码运行结果相同。优化的含义是最终生成的目标代码短(运行时间更短、占用空间更小),时空效率优化。原则上,优化可以再编译的各个阶段进行,但最主要的一类是对中间代码进行优化,这类优化不依赖于具体的计算机。目标代码(objectcode)指计算机科学中编译器或汇编器处理源代码后所生成的代码,它一般由机器代码或接近于机器语言的代码组成。[1]目标文件(objectfile)即存放目标代码的计算机 目标代码文件,它常被称作二进制文件(binaries)。目标文件包含着机器代码(可直接被计算机中央处理器执行)以及代码在运行时使用的数据,如重定位信息,如用于链接或调试的程序符号(变量和函数的名字),此外还包括其他调试信息。[2]目标文件是从源代码文件产生程序文件这一过程的中间产物,链接器正是通过把目标文件链接在一起来生成可执行文件或库文件。目标文件中唯一的要素是机器代码,例如,用于嵌入式系统的目标文件可能仅仅含有机器代码。
最基本的区别就是建模对象不同, 但目的都是求出P(Y|X)
判别模型Discriminative Model:
直接对P(Y|X)进行建模, ? 判别模型不考虑如何生成 X 和 Y 的联合事件, 比如 SVM 只考虑把点分开而已, 鲁棒性比较强, 但需要更多的训练数据.
生成模型 Generative Model:
利用贝叶斯公式, 先对P(X|Y)进行建模, 然后利用训练集中的 P(Y) 求出联合**概率分布 P(X,Y)**, 最后除以X的概率分布P(X)得出我们的目标(P(Y|X)). 最常见的例子朴素贝叶斯. 生成模型需要做出更多的假设, 因此适用于数据较少的情况下, 但鲁棒性不强, 因为假设错了就效果很差了.
给一个栗子, 外星人来地球拿了一个数据集包含了地球人的身体特征, 标签有2类:男和女. 如果训练数据集只有1%是数据是男性, 而99%是女性. 那么外星人科学家就有可能认为给定随机一个人类, 该人类是女性的P(y=female)概率是99%, 按照这个假设去做生成模型就会很不给力, 但判别模型就没有这个问题.
——Matthew_zeng
我们从几句话进入这两个概念:?
1、机器学习分为有监督的机器学习和无监督的机器学习;?
2、有监督的机器学习就是已知训练集数据的类别情况来训练分类器,无监督的机器学习就是不知道训练集的类别情况来训练分类器;?
3、所以说,有监督的机器学习可以抽象为一个分类task,而无监督的基本完成的是聚类;?
4、有监督的机器学习中,我们可以概述为通过很多有标记的数据,训练出一个模型,然后利用这个,对输入的X进行预测输出的Y。这个模型一般有两种:
决策函数:Y=f(X)?
条件概率分布:P(Y|X)
5、根据通过学习数据来获取这两种模型的方法,我们可以分为判别方法和生成方法;
6、概念正式介绍
判别方法:由数据直接学习决策函数Y=f(X)或条件概率分布P(Y|X)作为预测模型,即判别模型。判别方法关心的是对于给定的输入X,应该预测什么样的输出Y。
数据直接学习决策函数Y=f(X)或条件概率分布P(Y|X)得到的预测模型,就是判别模型;
生成方法:由数据学习联合概率分布P(X,Y), 然后由P(Y|X)=P(X,Y)/P(X)求出概率分布P(Y|X)作为预测的模型。该方法表示了给定输入X与产生输出Y的生成关系
P(Y|X)作为的预测的模型就是生成模型;
两个模型的范例
生成模型:朴素贝叶斯、隐马尔可夫(em算法)?
判别模型:k近邻法、感知机、决策树、逻辑回归、线性回归、最大熵模型、支持向量机(SVM)、提升方法、条件随机场(CRF)
对比
1、生成模型可以还原出联合概率分布(还原数据本身相似度),而判别方法不能;?
2、生成方法的学习收敛速度更快,当样本容量增加的时候,学到的模型可以更快的收敛于真实模型;?
3、当存在隐变量时,仍可以利用生成方法学习,此时判别方法不能用;?
4、判别学习不能反映训练数据本身的特性,但它寻找不同类别之间的最优分类面,反映的是异类数据之间的差异,直接面对预测,往往学习的准确率更高,由于直接学习P(Y|X)或Y=f(X),从而可以简化学习;?
5、简单的说,生成模型是从大量的数据中找规律,属于统计学习;而判别模型只关心不同类型的数据的差别,利用差别来分类。
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!