精华内容
下载资源
问答
  • 针对这一特点,对图像理解特征工程中的特征提取、表示、学习和变换,基于概率图模型的图像整体场景理解特征工程研究价值和意义、典型特征工程等多方面进行了归纳与分析,重点介绍了四种代表性的基于概率图模型的图像...
  • 特征工程基本流程

    千次阅读 2018-03-25 23:37:24
    特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。过程包含了特征提取、特征构建、特征选择等模块。   特征工程的目的是筛选出更好的特征,获取更好的训练数据。...

    https://www.cnblogs.com/infaraway/p/8645133.html

    前言

      特征是数据中抽取出来的对结果预测有用的信息,可以是文本或者数据。特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。过程包含了特征提取、特征构建、特征选择等模块。 

      特征工程的目的是筛选出更好的特征,获取更好的训练数据。因为好的特征具有更强的灵活性,可以用简单的模型做训练,更可以得到优秀的结果。“工欲善其事,必先利其器”,特征工程可以理解为利其器的过程。互联网公司里大部分复杂的模型都是极少数的数据科学家在做,大多数工程师们做的事情基本是在数据仓库里搬砖,不断地数据清洗,再一个是分析业务不断地找特征。 例如,某广告部门的数据挖掘工程师,2周内可以完成一次特征迭代,一个月左右可以完成模型的小优化,来提升auc。


    1. 数据采集 / 清洗 / 采样

    数据采集:数据采集前需要明确采集哪些数据,一般的思路为:哪些数据对最后的结果预测有帮助?数据我们能够采集到吗?线上实时计算的时候获取是否快捷? 

      举例1:我现在要预测用户对商品的下单情况,或者我要给用户做商品推荐,那我需要采集什么信息呢? 

      -店家:店铺的评分、店铺类别…… 

      -商品:商品评分、购买人数、颜色、材质、领子形状…… 

      -用户:历史信息(购买商品的最低价最高价)、消费能力、商品停留时间…… 


    数据清洗: 数据清洗也是很重要的一步,机器学习算法大多数时候就是一个加工机器,至于最后的产品如何,取决于原材料的好坏。数据清洗就是要去除脏数据,比如某些商品的刷单数据。 

      那么如何判定脏数据呢? 

      1) 简单属性判定:一个人身高3米+的人;一个人一个月买了10w的发卡。

      2) 组合或统计属性判定:号称在米国却ip一直都是大陆的新闻阅读用户?你要判定一个人是否会买篮球鞋,样本中女性用户85%? 

      3) 补齐可对应的缺省值:不可信的样本丢掉,缺省值极多的字段考虑不用。 


    数据采样:采集、清洗过数据以后,正负样本是不均衡的,要进行数据采样。采样的方法有随机采样和分层抽样。但是随机采样会有隐患,因为可能某次随机采样得到的数据很不均匀,更多的是根据特征采用分层抽样。  

    正负样本不平衡处理办法:

       正样本 >> 负样本,且量都挺大 => downsampling

       正样本 >> 负样本,量不大 =>  

         1)采集更多的数据

         2)上采样/oversampling(比如图像识别中的镜像和旋转) 

         3)修改损失函数/loss function (设置样本权重)

     


    2. 特征处理

    2.1 数值型

      1.  幅度调整/归一化:python中会有一些函数比如preprocessing.MinMaxScaler()将幅度调整到 [0,1] 区间。

      2.统计值:包括max, min, mean, std等。python中用pandas库序列化数据后,可以得到数据的统计值。 
    这里写图片描述

      3.离散化:把连续值转成非线性数据。例如电商会有各种连续的价格表,从0.03到100元,假如以一元钱的间距分割成99个区间,用99维的向量代表每一个价格所处的区间,1.2元和1.6元的向量都是 [0,1,0,…,0]。pd.cut() 可以直接把数据分成若干段。

      4.柱状分布:离散化后统计每个区间的个数做柱状图。

    2.2 类别型

      类别型一般是文本信息,比如颜色是红色、黄色还是蓝色,我们存储数据的时候就需要先处理数据。处理方法有: 

      1. one-hot编码,编码后得到哑变量。统计这个特征上有多少类,就设置几维的向量,pd.get_dummies()可以进行one-hot编码。 

      2. Hash编码成词向量: 
       这里写图片描述 

      3. Histogram映射:把每一列的特征拿出来,根据target内容做统计,把target中的每个内容对应的百分比填到对应的向量的位置。优点是把两个特征联系起来。 

       这里写图片描述 

      上表中,我们来统计“性别与爱好的关系”,性别有“男”、“女”,爱好有三种,表示成向量 [散步、足球、看电视剧],分别计算男性和女性中每个爱好的比例得到:男[1/3, 2/3, 0],女[0, 1/3, 2/3]。即反映了两个特征的关系。

    2.3 时间型

      时间型特征的用处特别大,既可以看做连续值(持续时间、间隔时间),也可以看做离散值(星期几、几月份)。

      连续值

        a) 持续时间(单页浏览时长)

        b) 间隔时间(上次购买/点击离现在的时间)

      离散值

        a) 一天中哪个时间段(hour_0-23)

        b) 一周中星期几(week_monday...)

        c) 一年中哪个星期

        d) 一年中哪个季度

        e) 工作日/周末

      数据挖掘中经常会用时间作为重要特征,比如电商可以分析节假日和购物的关系,一天中用户喜好的购物时间等。

    2.4 文本型

      1. 词袋:文本数据预处理后,去掉停用词,剩下的词组成的list,在词库中的映射稀疏向量。Python中用CountVectorizer处理词袋. 

      2. 把词袋中的词扩充到n-gram:n-gram代表n个词的组合。比如“我喜欢你”、“你喜欢我”这两句话如果用词袋表示的话,分词后包含相同的三个词,组成一样的向量:“我 喜欢 你”。显然两句话不是同一个意思,用n-gram可以解决这个问题。如果用2-gram,那么“我喜欢你”的向量中会加上“我喜欢”和“喜欢你”,“你喜欢我”的向量中会加上“你喜欢”和“喜欢我”。这样就区分开来了。 

      3. 使用TF-IDF特征:TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF(t) = (词t在当前文中出现次数) / (t在全部文档中出现次数),IDF(t) = ln(总文档数/ 含t的文档数),TF-IDF权重 = TF(t) * IDF(t)。自然语言处理中经常会用到。

    2.5 统计型

       加减平均:商品价格高于平均价格多少,用户在某个品类下消费超过平均用户多少,用户连续登录天数超过平均多少...

       分位线:商品属于售出商品价格的多少分位线处

       次序型:排在第几位

       比例类:电商中,好/中/差评比例,你已超过全国百分之…的同学

      

    2.6 组合特征

      1. 拼接型:简单的组合特征。例如挖掘用户对某种类型的喜爱,对用户和类型做拼接。正负权重,代表喜欢或不喜欢某种类型。 

      - user_id&&category: 10001&&女裙 10002&&男士牛仔 

      - user_id&&style: 10001&&蕾丝 10002&&全棉 

      2. 模型特征组合: 

      - 用GBDT产出特征组合路径 

      - 组合特征和原始特征一起放进LR训练


    3. 特征选择

      特征选择,就是从多个特征中,挑选出一些对结果预测最有用的特征。因为原始的特征中可能会有冗余和噪声。 

      特征选择和降维有什么区别呢?前者只踢掉原本特征里和结果预测关系不大的, 后者做特征的计算组合构成新特征。

    3.1 过滤型

       - 方法:  评估单个特征和结果值之间的相关程度, 排序留下Top相关的特征部分。 

       - 评价方式:Pearson相关系数, 互信息, 距离相关度。 

       - 缺点:只评估了单个特征对结果的影响,没有考虑到特征之间的关联作用, 可能把有用的关联特征误踢掉。因此工业界使用比较少。 

       - python包:SelectKBest指定过滤个数、SelectPercentile指定过滤百分比。

    3.2 包裹型

      - 方法:把特征选择看做一个特征子集搜索问题, 筛选各种特征子集, 用模型评估效果。 

      - 典型算法:“递归特征删除算法”。 

      - 应用在逻辑回归的过程:用全量特征跑一个模型;根据线性模型的系数(体现相关性),删掉5-10%的弱特征,观察准确率/auc的变化;逐步进行, 直至准确率/auc出现大的下滑停止。 

      - python包:RFE 
      

    3.3 嵌入型

       - 方法:根据模型来分析特征的重要性,最常见的方式为用正则化方式来做特征选择。 

       - 举例:最早在电商用LR做CTR预估, 在3-5亿维的系数特征上用L1正则化的LR模型。上一篇介绍了L1正则化有截断作用,剩余2-3千万的feature, 意味着其他的feature重要度不够。 

       - python包:feature_selection.SelectFromModel选出权重不为0的特征。

    《注:以上总结来自于七月在线课程》

    展开全文
  • 特征工程基本流程

    千次阅读 2019-05-15 11:16:41
    特征工程基本流程0 前言1 数据采集 / 清洗 / 采样2 特征处理2.1 数值型2.2 类别型2.3 时间型2.4 文本型2.5 统计型2.6 组合特征3 特征选择3.1 过滤型3.2 包裹型3.3 嵌入型 0 前言 特征是数据中抽取出来的对结果预测...

    0 前言

    特征是数据中抽取出来的对结果预测有用的信息,可以是文本或者数据。特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。过程包含了特征提取、特征构建、特征选择等模块。

    特征工程的目的是筛选出更好的特征,获取更好的训练数据。因为好的特征具有更强的灵活性,可以用简单的模型做训练,更可以得到优秀的结果。“工欲善其事,必先利其器”,特征工程可以理解为利其器的过程。互联网公司里大部分复杂的模型都是极少数的数据科学家在做,大多数工程师们做的事情基本是在数据仓库里搬砖,不断地数据清洗,再一个是分析业务不断地找特征。 例如,某广告部门的数据挖掘工程师,2周内可以完成一次特征迭代,一个月左右可以完成模型的小优化,来提升auc。

    1 数据采集 / 清洗 / 采样

    数据采集: 数据采集前需要明确采集哪些数据,一般的思路为:哪些数据对最后的结果预测有帮助?数据我们能够采集到吗?线上实时计算的时候获取是否快捷?
      举例1:我现在要预测用户对商品的下单情况,或者我要给用户做商品推荐,那我需要采集什么信息呢?
      -店家:店铺的评分、店铺类别……
      -商品:商品评分、购买人数、颜色、材质、领子形状……
      -用户:历史信息(购买商品的最低价最高价)、消费能力、商品停留时间……
    数据清洗: 数据清洗也是很重要的一步,机器学习算法大多数时候就是一个加工机器,至于最后的产品如何,取决于原材料的好坏。数据清洗就是要去除脏数据,比如某些商品的刷单数据。
      那么如何判定脏数据呢?
      1) 简单属性判定:一个人身高3米+的人;一个人一个月买了10w的发卡。
      2) 组合或统计属性判定:号称在米国却ip一直都是大陆的新闻阅读用户?你要判定一个人是否会买篮球鞋,样本中女性用户85%?
      3) 补齐可对应的缺省值:不可信的样本丢掉,缺省值极多的字段考虑不用。

    数据采样:采集、清洗过数据以后,正负样本是不均衡的,要进行数据采样。采样的方法有随机采样和分层抽样。但是随机采样会有隐患,因为可能某次随机采样得到的数据很不均匀,更多的是根据特征采用分层抽样。

    正负样本不平衡处理办法:
      正样本 >> 负样本,且量都挺大 => downsampling
      正样本 >> 负样本,量不大 =>
        1)采集更多的数据
        2)上采样/oversampling(比如图像识别中的镜像和旋转)
        3)修改损失函数/loss function (设置样本权重)

    2 特征处理

    2.1 数值型

    1. 幅度调整/归一化:python中会有一些函数比如preprocessing.MinMaxScaler()将幅度调整到 [0,1] 区间。
    2. 统计值:包括max, min, mean, std等。python中用pandas库序列化数据后,可以得到数据的统计值。
      在这里插入图片描述
    3. 离散化:把连续值转成非线性数据。例如电商会有各种连续的价格表,从0.03到100元,假如以一元钱的间距分割成99个区间,用99维的向量代表每一个价格所处的区间,1.2元和1.6元的向量都是 [0,1,0,…,0]。pd.cut() 可以直接把数据分成若干段。
    4. 柱状分布:离散化后统计每个区间的个数做柱状图。

    2.2 类别型

    类别型一般是文本信息,比如颜色是红色、黄色还是蓝色,我们存储数据的时候就需要先处理数据。处理方法有:

    1. one-hot编码,编码后得到哑变量。统计这个特征上有多少类,就设置几维的向量,pd.get_dummies()可以进行one-hot编码。
    2. Hash编码成词向量:
      在这里插入图片描述

    3. Histogram映射:把每一列的特征拿出来,根据target内容做统计,把target中的每个内容对应的百分比填到对应的向量的位置。优点是把两个特征联系起来。
    在这里插入图片描述
    上表中,我们来统计“性别与爱好的关系”,性别有“男”、“女”,爱好有三种,表示成向量 [散步、足球、看电视剧],分别计算男性和女性中每个爱好的比例得到:男[1/3, 2/3, 0],女[0, 1/3, 2/3]。即反映了两个特征的关系。

    2.3 时间型

    时间型特征的用处特别大,既可以看做连续值(持续时间、间隔时间),也可以看做离散值(星期几、几月份)。
    连续值
        a) 持续时间(单页浏览时长)
        b) 间隔时间(上次购买/点击离现在的时间)
    离散值
        a) 一天中哪个时间段(hour_0-23)
        b) 一周中星期几(week_monday…)
        c) 一年中哪个星期
        d) 一年中哪个季度
        e) 工作日/周末
      数据挖掘中经常会用时间作为重要特征,比如电商可以分析节假日和购物的关系,一天中用户喜好的购物时间等。

    2.4 文本型

    1. 词袋:文本数据预处理后,去掉停用词,剩下的词组成的list,在词库中的映射稀疏向量。Python中用CountVectorizer处理词袋.
    2. 把词袋中的词扩充到n-gram:n-gram代表n个词的组合。比如“我喜欢你”、“你喜欢我”这两句话如果用词袋表示的话,分词后包含相同的三个词,组成一样的向量:“我 喜欢 你”。显然两句话不是同一个意思,用n-gram可以解决这个问题。如果用2-gram,那么“我喜欢你”的向量中会加上“我喜欢”和“喜欢你”,“你喜欢我”的向量中会加上“你喜欢”和“喜欢我”。这样就区分开来了。
    3. 使用TF-IDF特征:TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF(t) = (词t在当前文中出现次数) / (t在全部文档中出现次数),IDF(t) = ln(总文档数/ 含t的文档数),TF-IDF权重 = TF(t) * IDF(t)。自然语言处理中经常会用到。

    2.5 统计型

    加减平均:商品价格高于平均价格多少,用户在某个品类下消费超过平均用户多少,用户连续登录天数超过平均多少…
       分位线:商品属于售出商品价格的多少分位线处
       次序型:排在第几位
       比例类:电商中,好/中/差评比例,你已超过全国百分之…的同学

    2.6 组合特征

    1. 拼接型:简单的组合特征。例如挖掘用户对某种类型的喜爱,对用户和类型做拼接。正负权重,代表喜欢或不喜欢某种类型。
        - user_id&&category: 10001&&女裙 10002&&男士牛仔
        - user_id&&style: 10001&&蕾丝 10002&&全棉

    2. 模型特征组合:
        - 用GBDT产出特征组合路径
        - 组合特征和原始特征一起放进LR训练

    3 特征选择

    特征选择,就是从多个特征中,挑选出一些对结果预测最有用的特征。因为原始的特征中可能会有冗余和噪声。
    特征选择和降维有什么区别呢?前者只踢掉原本特征里和结果预测关系不大的, 后者做特征的计算组合构成新特征。

    3.1 过滤型

    - 方法:  评估单个特征和结果值之间的相关程度, 排序留下Top相关的特征部分。
       - 评价方式:Pearson相关系数, 互信息, 距离相关度。
       - 缺点:只评估了单个特征对结果的影响,没有考虑到特征之间的关联作用, 可能把有用的关联特征误踢掉。因此工业界使用比较少。
       - python包:SelectKBest指定过滤个数、SelectPercentile指定过滤百分比。

    3.2 包裹型

    - 方法:把特征选择看做一个特征子集搜索问题, 筛选各种特征子集, 用模型评估效果。
      - 典型算法:“递归特征删除算法”。
      - 应用在逻辑回归的过程:用全量特征跑一个模型;根据线性模型的系数(体现相关性),删掉5-10%的弱特征,观察准确率/auc的变化;逐步进行, 直至准确率/auc出现大的下滑停止。
      - python包:RFE

    3.3 嵌入型

    - 方法:根据模型来分析特征的重要性,最常见的方式为用正则化方式来做特征选择。
       - 举例:最早在电商用LR做CTR预估, 在3-5亿维的系数特征上用L1正则化的LR模型。上一篇介绍了L1正则化有截断作用,剩余2-3千万的feature, 意味着其他的feature重要度不够。
       - python包:feature_selection.SelectFromModel选出权重不为0的特征。

    原文链接: 机器学习(一)特征工程基本流程

    展开全文
  • 今天接着前一篇文章讲,主要分享基于显性特征工程的一些最基本的处理方法。关于显性特征是什么,大家可以去看系列文章一。关于显性特征的处理方法可以做这样的类比:不知道大家平时会不会自己做菜,我个人的话基本...

    今天接着前一篇文章讲,主要分享基于显性特征工程的一些最基本的处理方法。关于显性特征是什么,大家可以去看系列文章一。关于显性特征的处理方法可以做这样的类比:不知道大家平时会不会自己做菜,我个人的话基本每周都会做。我们从菜市场买的菜,不经过处理是不能下锅的,因为需要清洗、摘取烂的叶子、切段等操作后才可以下锅。如果把机器学习整个流程比做炒一盘青菜的话,今天要介绍这些方式就有点像菜的前期处理过程。那我们就分类别介绍下,对于一份数据,需要针对特征做哪些处理。

     

    1.    数据清洗

    主要包括两方面,一方面是填充缺失值,因为在机器学习算法的计算过程中会对数据进行各种运算符的计算,需要把一些空值填充,通常会被填充为0或者是对应特征列的均值。第二方面是乱码问题,如果是文本数据,经常会出现编码问题,需要把数据的类型全部处理好,最好是double型的。

     

    2.    去量纲

    因为数据的量纲会影响到某些算法的计算,比如有两个字段数据分别是一个人吃饭用了多少秒、吃了多少斤饭,那一个是时间数据,另一个是重量数据,算法是无法感知这些量纲的影响的,所以需要一些数学手段规避。去量纲常用的方法是归一化和标准化。

     

    标准化就是每个特征值减去均值再除以方差,表现的是数据的一个分布情况。

    归一化是把数据的分布强制性的限制到0和1之间,使得向量单位化。

    个人认为标准化对于刻画数据的特征效果更好。

     

    3.    数据平滑

    大家可能平时会接触到一些分布极不均匀的数据,比如一个数据区间是[0,256],但是百分之九十以上的数据分布在[0,10]和[200,256]这两个区间中。对于这样的数据可以通过取对数的方式来处理,让数据的分布更加平滑。或者干脆数据分桶,去一个中间阈值,小于128的标记为0,大于128的标记为1。

     

    4.    数据去噪

    很多时候数据因为采集方式可能出现各别事故,比如有的数据是靠调查问卷采集上来的,但是就有一个人不认真写,瞎写,造成了噪声数据。这种跟事实偏差极大的数据,可以通过正态分布的原理去除,因为可以设想数据的分布大部分是比较平均的,符合正态分布,那与均值偏差极大的部分就很有可能是噪声,需要去除。

     

    5.    降维

    降维的方式很多啦,如果要讲的话需要非常大的篇幅,之前在写书的时候已经写了一遍了~有点懒,在这里简单题下。其实除了PCA、LDA这两种降维方式以外,逻辑回归中的正则L1也可以理解为一种降维处理。


    展开全文
  • 逆向工程基本概念

    2020-11-22 13:37:17
    逆向工程技术的基本概念 学习i春秋课程 > Windows逆向工程技术 > 逆向工程技术的基本概念 侵权删,i春秋课程很好呀,小伙伴萌对网络安全感兴趣可以学习一下???? 基本概念 软件工程:通常被认为是开发一个新...

    学习i春秋课程 > Windows逆向工程技术 > 逆向工程技术的基本概念
    侵权删,i春秋课程很好呀,小伙伴萌对网络安全感兴趣可以学习一下😀

    基本概念

    软件工程:通常被认为是开发一个新的系统

    正向工程:从用户的需求,到高层设计,再到底层设计,最后实现的过程。正向工程解决了功能的实现问题,说明了哪些功能需要增加和删除。

    逆向工程:对系统进行分析,从而确定系统的组件,和组件间的相互作用,以其他形式来表现系统,或者在较高层次上表示系统的过程。
    对一个系统实施逆向工程时,不改变系统本身,也不包括在此系统上构建新系统。逆向工程解决了程序理解的问题;

    再工程:通过逆向工程重构和正向工程,对现有系统审查和改造,将其重组为新的形式,再工程改变了系统的功能和方向(除了正向和逆向的分析,还有重构的问题,它是在抽象的层次上改变了表示形式和系统)。

    在这里插入图片描述

    逆向工程最早出现在对硬件产品的分析中,指通过拆解机器装置并观察其运行情况来推导其制造方法、工作原理和原始设计的行为。

    这个课程所讲授的逆向工程主要指的是阅读反汇编(将机器语言代码转换成汇编语言代码)后的代码及使用调试器分析软件行为等工作。

    在这里插入图片描述

    软件逆向分上图两部分,首先对早期程序大范围分析观察-》系统及逆向,它帮助我们确定程序的结构,可能帮我们找到感兴趣的区域,一旦对程序有了一个基础的认识,并确定了感兴趣的区域,就可以进入下一个阶段—》》代码级逆向技术

    代码级逆向技术为我们提供所选择块代码的详细信息,系统级逆向包括运行各种工具,利用不同操作系统服务获取信息,检查程序可执行文件,跟踪程序输入输出……这些信息大多数来自操作系统(一个程序与外界的任何交互必须来自操作系统=所以逆向工作者必须了解操作系统)

    在逆向过程中,通过OS可以获取所研究程序的大量信息

    代码级逆向是一个复杂的过程,它是从程序二进制代码中提取实际理念和算法,要求逆向工程师不但要掌握逆向技术,而且还要对软件开发、CPU、OS有深入的了解,软件的复杂度深不可测,即使能够得到编写良好,文档齐全的源代码,人们理解起来也是很困难的,破解构成程序所使用的指令序列更是难上加难。

    代码级逆向从非常低层次观察代码,我们会看到运转软件所有微小细节,这些细节大多由编译器自动生成,理解这些细节如何与程序及其功能连接起来,成为一件非常困难的事情

    在这里插入图片描述

    从高级语言程序到目标代码,需要经过编译、链接,工作过程大致为:

    1. 词法分析:对源程序从前到后或者从左到右逐个字符扫描,从中识别出一个个单词符号
    2. =》语法分析:语法分析器以单词符号作为输入,分析单词符号串是否符合语法规则,如表达式,赋值,循环……最后分析检查每条语句是否有正确的逻辑结构
    3. =》语义分析:检查原程序是否存在语义错误,并且收集类型信息供后面代码生成阶段使用
    4. =》中间代码生成:根据语义分析的输出,生成中间语言程序。中间代码起一个编译器前端与后端分水岭的作用,目的便于编译器的开发和移植以及代码的优化,它既与机器指令的结构相近,又与具体机器无关。!!并不是所有编译程序都生成中间语言程序。一般快速编译程序直接生成目标代码,没有将中间代码翻译成目标代码的额外开销
    5. =》代码优化:对程序进行多种等价变换,使得从变换后的程序出发,能生成更有效的目标代码
    6. =》具体目标代码生成:目标代码生成器把语法分析后或优化后的中间代码变换成目标代码包括exe、dll……等类型

    编译和反编译不一定要生成汇编代码,一般生成某种设计好的中间语言。但在反编译的二进制解码过程中,首先会生成一种类汇编或汇编代码,因此二进制解码也可称为反汇编,并且反编译的过程中中间代码也有很多级别,类汇编或汇编代码只是低级中间语言。

    软件工程应用

    实际工作重要应用–反汇编

    代码恢复理解
    分析有价值的二进制程序,获取并理解其(关键)功能结构,提高自己的技术水平,扩展学习获取技术的渠道,摆脱自身研究的不足。(可能有些时候还需要脱壳方面的技术

    算法的识别
    利用(密码)算法在汇编级别的特征,进行相关的算法识别;当然也有在抽象语言级别上进行的(现阶段研究不太成熟,非主要手段)。

    软件破解、恶意代码分析
    通过动态跟踪分析恶意软件的执行过程,收集观查恶意软件的行为,为编写恶意代码查杀工具提供思路,甚至进行取证提供依据。

    漏洞挖掘和利用
    对于操作系统和应用软件,漏洞的挖掘和利用,是主动攻击的重要手段,一旦成功效果明显应用起来也比较广泛,难度和工作量较大,现阶段的一般研究方法是在反汇编分析的基础上,结合动态跟踪、调试技术来进行。

    Rootkit深入
    Rootkit(原意是根权限工具,而实际中常指使用了Rootkit技术的病毒、木马,他与传统木马(R3)的不同在于:通过加载一个驱动或者其它手段,使部分代码或者全部代码都在内核(RO)中进行) VS HIPS(主机入侵检测):胜负取决于谁做得更底层,谁知道更多没有公开的底层内容,这需要在反汇编的基础上进行内核的调试,探索底层未知的部分,网上发表的都是过时的或者不是非常重要的"点拨"。

    软件逆向过程

    在这里插入图片描述

    从具体目标代码到高级语言程序的反过程

    软件逆向分析发展现状

    根据应用用途大致分为反汇编和反编译两个发展方向

    反汇编是将二进制指令翻译成汇编代码
    反编译是将其翻译成高级语言的代码(比如C#)

    反汇编工具

    IDA
    全名(IDA Pro Disassembler and Debugger),DataRescue公司的强大专业反汇编调试软件;最好的静态反汇编工具,针对80X86架构作了许多的优化和额外的识别分析(现今分析最为透彻的产品),当然也支持其它架构的处理器,另外也支持跟踪调试。
    强大的功能扩展
    Processor:扩展处理器支持
    Plug-in:插件IDA功能扩展
    Loader:支持不同的可执行文件支持
    Debugger:不同平台和(远程)调试的支持

    IDA在静态密码算法识别有很广泛应用,特别是嵌入式系统的非X86结构

    这个课程在静态调试技术具体讲解此软件

    OllyDbg
    32位Windows系统环境下的二进制文件分析调试工具,其重点在于动态跟踪分析二进制代码,但由于这些操作都是在目标代码进行反汇编后进行,因此也常被作为一款反汇编工具使用。

    这个课程在动态调试技术具体讲解此软件

    C32Asm

    国产的针对Windows平台下PE格式文件的优秀反汇编器,其提供快速的静态反汇编和16进制文件编辑功能,另外还有一些便利的内存操作和修改功能。

    IDA全面且强大,C32系统开销小,比较轻快

    反编译工具
    dcc/UQBT/Boomerang

    dcc:Cristina Cifuentes在澳大利亚昆士兰大学博士论文中的反编译原型系统,作为从DOS到C反编译EXE文件的先驱代表,主要通过传统编译优化技术和图论来执行相关分析操作1994年停止发展更新,有许多的局限,只是概念上的证明程序。
    UQBT:主要作者Cristina Cifuentes,其作为一个通用的二进制翻译框架,输入的二进制代码通过逆向分析产生高级的C代码,再通过普通的C编译器编译和优化,最终生成目标平台上对应代码。UQBT目标识二进制翻译,但其框架中前端技术可供逆向分析借鉴使用。
    Boomerang:主旨为通过开源社区发展一个通用的反编译器。其重用了dcc和UQBT中的相关技术,并成为新代码逆向研究的主题,不过其也存在不足。

    反编译
    常用工具Hex-rays,主要用于局部函数的反编译,便于理解函数。

    其它应用
    内核调试
    深入底层研究的重要必备手段,也是之后技术突破所必需的。现阶段内核调试都是用Windbg进行联机调试。

    漏洞挖掘利用
    需要对目标代码进行动态的跟踪调试。

    二者都是在反汇编的基础上进行-反汇编是前提和基础

    展开全文
  • 理解特征工程(Part 2) - 分类数据 本章作者主要将的是处理离散分类数据的策略,参见英文原文。 Introduction(引言) 我们在本系列的前一篇文章中介绍了处理结构化连续数值数据的各种特征工程策略。 在本文中,我们...
  • 金融工程基本分析方法 绝对定价法就是根据金融工具未来现金流的特征,运用恰当的贴现率将这些现金流贴现成现值,该现值就是绝对定价法要求的价格。 股票和债券定价大多使用绝对定价法。 优点:比较直观,也便于...
  • 软件工程基本概念

    千次阅读 2015-06-09 19:16:36
    软件工程基本概念   软件工程是指导计算机软件开发和维护的工程学科。软件工程强调使用生存周期方法学和各种结构分析及结构设计技术。本文扼要介绍软件生存周期每个阶段的基本任务和结束标准。  关键词 软件...
  • 比较详细的讲解了特征工程的一些流程,好像最先发表在知乎,其中的流程图不要画的太牛逼,但好像说也只是个入门。。。花了一个星期的时间把里面的东西的原理都看了一遍,当然只是浅尝辄止,总之是挖的越深觉得能挖的...
  • 一个前端工程师的基本修养

    千次阅读 多人点赞 2018-01-23 13:25:42
    有人说互联网是前端工程师的舞台,先不论这个说法...那么,应该怎么定位前端工程师这个岗位,怎么描绘这个岗位的基本要求呢?下面让我们从前端的发展历史中寻找答案吧。1. 前端工程师的发展历史1990年,Tim Berners Le
  • 特征工程特征预处理

    千次阅读 2019-12-24 19:36:38
    在前面我们分别讨论了特征工程中的特征选择与特征表达,本文我们来讨论特征预处理的相关问题。主要包括特征的归一化和标准化,异常特征样本清洗与样本数据不平衡问题的处理。 1. 特征的标准化和归一化 由于标准化...
  • STM32CubeMX新建工程+基本IO配置过程

    万次阅读 多人点赞 2016-08-22 23:12:30
    C.Project工程设置,这个选项是配置工程重要的一个选项,其中配置的信息也比较重要,且容易理解。   4.Pinout 配置 这接下的配置才是与我们最终运行代码密切相关的,我们这里以简单的配置IO(PF11引脚...
  • 对前端工程化的理解

    千次阅读 2018-12-22 15:15:18
    对前端工程化的理解 目录 前端-GUI 软件 构建工程化的几个阶段 工程化需要考虑的几大因素 一.GUI软件 现如今前端可谓包罗万象,产品形态五花八门,涉猎极广,什么高大上的基础库/框架,拽炫酷...
  • 特征工程

    万次阅读 多人点赞 2016-06-12 16:16:23
    “工欲善其事,必先利其器”,特征工程可以理解为利其器的过程。互联网公司里大部分复杂的模型都是极少数的数据科学家在做,大多数工程师们做的事情基本是在数据仓库里搬砖,不断地数据清洗,再一个是分析业务不断地...
  • “工欲善其事,必先利其器”,特征工程可以理解为利其器的过程。互联网公司里大部分复杂的模型都是极少数的数据科学家在做,大多数工程师们做的事情基本是在数据仓库里搬砖,不断地数据清洗,再一个是分析业务不断地...
  • 对于工程师的一些理解

    千次阅读 2015-12-12 16:45:53
    一种职业需要有专门的知识以及长期的、精深的准备,它包括在技能和方法上的指导,以及构成这些技能...人们对于合乎逻辑地运用定量法则的需求将工程与其他的学术路线区分了开来。学术知识、实践训练、经验以及半工半读都
  • Spring框架两大核心特征基本理解

    千次阅读 2018-07-21 19:25:18
    Spring框架的两大核心特征:AOP和IoC IoC(控制反转)是Spring的一个容器,他不是一种技术,而是一种思想,依旧是基于面向对象编程的。它能指导我们怎么样设计出松耦合、更优良的程序。 简单来说,如果现在有两个...
  • 特征工程(完)

    万次阅读 多人点赞 2019-02-23 23:53:28
    机器学习入门系列(2)–如何构建一个完整的机器学习项目,第六篇! 该系列的前五篇文章: ...这也是特征工程系列最后一篇文章,介绍特征提取、特征选择、特征构建三个工作,通常特征工程被认为分为这三方面的内容,...
  • 软件工程基本知识和方法

    千次阅读 2018-05-01 23:16:59
    3)增量模型:融合了瀑布模型的基本成分和原型实现的迭代特征,它假设可以将需求分段为一系列增量产品 ,每一增量可以分别开发。 使用增量模型,第1个增量往往是核心的产品。客户对每个增量的使用和评估都作为下一个...
  • 软件工程师具备六大基本素质

    千次阅读 2017-06-19 08:41:58
    必知:软件企业要求基础软件工程师具备六大基本素质,即良好的编码能力、自觉的规范意识和团队精神、认识和运用数据库的能力、较强的英语阅读和写作能力、具有软件工程的概念和求知欲和进取心。  1.良好的编码...
  • [特征工程系列一] 论特征的重要性

    千次阅读 2018-02-01 18:08:20
    满打满算,还有十天左右就要过年了,...《特征工程系列二,显性特征基本处理方法》:讲一下如何处理数据特征,以及最基本的概念《特征工程三,显性特征的衍生》:准备通过NBA球星的数据,展示下特征的衍生的一些概念
  • 软工的基本认识 这里主要介绍三类,软件的分类,软件工程过程,软件的生存期模型 软件的分类  软件开发是一个灵活性很强的工作,即使同样的功能给不同的人使用,需要设计的也不尽相同,比如说,同样要实现一个...
  • 用户特征工程 超详细解读

    万次阅读 多人点赞 2016-08-18 19:43:32
    这张图将用户特征工程里的大面基本都囊括了。因为ppt本身做得比较简单,现在我们试图针对图里的每一项,结合具体的业务场景,做个比较详细的分析。1.特征提取,或者说原始数据提取原作者画图的时候将第一项命名为...
  • 特征工程特征衍生+案例

    千次阅读 2019-07-11 09:03:19
    特征衍生+案例
  • 数据挖掘:特征工程——特征处理与特征构建 这里贴一张网上特征工程的流程,供大家学习。 一、什么是特征工程 特征工程:其本质是一项工程活动,目的是最大限度地从原始数据中提取特征以供算法和模型使用。。就是...
  • 特征工程综述

    千次阅读 2017-02-15 17:43:58
    然而,单纯学习机器学习的算法流程,可能仍然不会使用这些算法(现在大部分的算法网上也都有源码),尤其是应用到实际问题的时候,常常不知道怎么提取特征来建模,因此这里着重理解一下特征工程。 一、特征工程的...
  • 人工智能工程师学习路线及具备的5项基本技能

    万次阅读 多人点赞 2016-09-08 23:55:42
    数据建模就是对一个给定的数据库的基本结构进行评估的过程,目的就是发现其中所蕴含的有用模式(相互关系,聚合关系、特征矢量等)和/或者预测以前案例(分类,回归、异常检测等)的特征。评估过程的关键就是不断地对所...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 151,679
精华内容 60,671
关键字:

如何理解工程的基本特征