精华内容
下载资源
问答
  •  所以这就需要我们通过机器机器学习完成特殊物体的库。本次我的检测目标物体是茶杯,所以我在网上收集了大量的图标并进行了标记,然后通过机器训练生产了自己的库,最后完成物体有有效识别。 ...

           由于每个项目需要检查的目标对象都不一定相同,一个大而全面的库固然是好多,但是如果仅仅是为了识别一个视角中的一种或少数种类的物体,庞大的库就会显得笨重,严重占用cpu资源和存储空间。

           所以这就需要我们通过机器机器学习完成特殊物体的库。本次我的检测目标物体是茶杯,所以我在网上收集了大量的图标并进行了标记,然后通过机器训练生产了自己的库,最后完成物体有有效识别。

            下面第一张图是我在网上收集的各种茶杯的图片,第二张是通过调用自己的库实现对茶杯的检测,除了茶杯其他的物体一概忽略,所以对目标物体能够更加快速准确的检测出二不存在其他的干扰。





    完整的源教程分为大概五部分,大部分都是英文,视频的那部分需要翻墙(在YouTube上):

    https://pythonprogramming.net/video-tensorflow-object-detection-api-tutorial/点击打开链接


    第一部分:

    参考源:

    视频和基本介绍:

    https://pythonprogramming.net/custom-objects-tracking-tensorflow-object-detection-api-tutorial/


    LabelImg安装流程:

    下载地址:https://github.com/tzutalin/labelImg

    安装流程:Windows+anaconda

    1、安装qt:(方法一:anaconda界面中点击qtconsole进行安装;方法二:在pycharm指定的环境下,于底部terminal窗口中输入:conda install pyqt=5

    2、执行安装:进入下载后的文件目录中,pyrcc5 -o resources.py resources.qrc


    第二部分:

    参考源:

    https://pythonprogramming.net/creating-tfrecord-files-tensorflow-object-detection-api-tutorial/


    Xml文件合成为csv文件:

    代码:

    https://github.com/datitran/raccoon_dataset/blob/master/xml_to_csv.py

    直接执行

    生成对象检测模型的TFRecord文件:

    代码:

    https://github.com/datitran/raccoon_dataset/blob/master/generate_tfrecord.py

    执行:

    python generate_tfrecord.py --csv_input=data/train_labels.csv  --output_path=data/train.record

    python generate_tfrecord.py --csv_input=data/test_labels.csv  --output_path=data/test.record

     

    代码局部需要修改


    第三部分:

    参考源:

    https://pythonprogramming.net/training-custom-objects-tensorflow-object-detection-api-tutorial/

     

    ssd_mobilenet_v1_pets.config文件源:

    https://github.com/tensorflow/models/blob/master/research/object_detection/samples/configs/ssd_mobilenet_v1_pets.config

     

    sd_mobilenet_v1_coco_11_06_2017.tar.gz文件源:

    http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_11_06_2017.tar.gz

     

    python train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/ssd_mobilenet_v1_pets.config


    第四部分:

    python export_inference_graph \
        --input_type image_tensor \
        --pipeline_config_path path/to/ssd_inception_v2.config \
        --trained_checkpoint_prefix path/to/model.ckpt \
        --output_directory path/to/exported_model_directory

     

    python export_inference_graph.py \
        --input_type image_tensor \
        --pipeline_config_path training/ssd_mobilenet_v1_pets.config \
        --trained_checkpoint_prefix training/model.ckpt-553 \
        --output_directory cup_graph

     

    python export_inference_graph.py --input_type image_tensor --pipeline_config_path training/ssd_mobilenet_v1_pets.config  --trained_checkpoint_prefix training/model.ckpt-553 --output_directory cup_graph

     

    得到训练文件夹cup_graph,修改调用源码即可(图片形式或者视频形式)


    第五部分:

    修改应用程序,可以在Tensorflow 摄像头物体实时识别 基础上进行修改

    附上完整代码

    import numpy as np
    import os
    import six.moves.urllib as urllib
    import sys
    import tarfile
    import tensorflow as tf
    import zipfile
    
    from collections import defaultdict
    from io import StringIO
    from matplotlib import pyplot as plt
    from PIL import Image
    from object_detection.utils import ops as utils_ops
    
    import cv2
    cap = cv2.VideoCapture(0)
    
    if tf.__version__ < '1.4.0':
      raise ImportError('Please upgrade your tensorflow installation to v1.4.* or later!')
    
    sys.path.append("..")
    
    from utils import label_map_util
    
    from utils import visualization_utils as vis_util
    
    # What model to download.
    MODEL_NAME = 'cup_graph'
    
    # Path to frozen detection graph. This is the actual model that is used for the object detection.
    PATH_TO_CKPT = MODEL_NAME + '/frozen_inference_graph.pb'
    
    # List of the strings that is used to add correct label for each box.
    PATH_TO_LABELS = os.path.join('data', 'object-detection.pbtxt')
    
    NUM_CLASSES = 1
    
    detection_graph = tf.Graph()
    with detection_graph.as_default():
      od_graph_def = tf.GraphDef()
      with tf.gfile.GFile(PATH_TO_CKPT, 'rb') as fid:
        serialized_graph = fid.read()
        od_graph_def.ParseFromString(serialized_graph)
        tf.import_graph_def(od_graph_def, name='')
    
    label_map = label_map_util.load_labelmap(PATH_TO_LABELS)
    categories = label_map_util.convert_label_map_to_categories(label_map, max_num_classes=NUM_CLASSES, use_display_name=True)
    category_index = label_map_util.create_category_index(categories)
    
    def load_image_into_numpy_array(image):
      (im_width, im_height) = image.size
      return np.array(image.getdata()).reshape(
          (im_height, im_width, 3)).astype(np.uint8)
    
    # For the sake of simplicity we will use only 2 images:
    # image1.jpg
    # image2.jpg
    # If you want to test the code with your images, just add path to the images to the TEST_IMAGE_PATHS.
    PATH_TO_TEST_IMAGES_DIR = 'test_images'
    TEST_IMAGE_PATHS = [ os.path.join(PATH_TO_TEST_IMAGES_DIR, 'image{}.jpg'.format(i)) for i in range(3, 6) ]
    
    # Size, in inches, of the output images.
    IMAGE_SIZE = (12, 8)
    
    with detection_graph.as_default():
      with tf.Session(graph=detection_graph) as sess:
        while True:
          ret, image_np = cap.read()
          image_np = cv2.flip(image_np, 0)
          # Expand dimensions since the model expects images to have shape: [1, None, None, 3]
          image_np_expanded = np.expand_dims(image_np, axis=0)
          image_tensor = detection_graph.get_tensor_by_name('image_tensor:0')
          # Each box represents a part of the image where a particular object was detected.
          boxes = detection_graph.get_tensor_by_name('detection_boxes:0')
          # Each score represent how level of confidence for each of the objects.
          # Score is shown on the result image, together with the class label.
          scores = detection_graph.get_tensor_by_name('detection_scores:0')
          classes = detection_graph.get_tensor_by_name('detection_classes:0')
          num_detections = detection_graph.get_tensor_by_name('num_detections:0')
          # Actual detection.
          (boxes, scores, classes, num_detections) = sess.run(
              [boxes, scores, classes, num_detections],
              feed_dict={image_tensor: image_np_expanded})
    
          vis_util.visualize_boxes_and_labels_on_image_array(
              image_np,
              np.squeeze(boxes),
              np.squeeze(classes).astype(np.int32),
              np.squeeze(scores),
              category_index,
              use_normalized_coordinates=True,
              line_thickness=8)
    
          cv2.imshow('object detection', cv2.resize(image_np, (800,600)))
          if cv2.waitKey(25) & 0xFF == ord('q'):
            cv2.destroyAllWindows()
            break






    展开全文
  • catalogue 1. 特征工程是什么?有什么作用? 2. 特征获取方案 - 如何获取这些特征? 3. 特征观察 - 运用各种统计工具、图标等工具帮助我们从直观和精确层面认识...从某种程度上来说,数据和特征决定了机器学习的...

    catalogue

    复制代码
    1. 特征工程是什么?有什么作用?
    2. 特征获取方案 - 如何获取这些特征?
    3. 特征观察 - 运用各种统计工具、图标等工具帮助我们从直观和精确层面认识特征中的概率分布
    4. 特征处理 - 特征清洗
    5. 特征护理 - 特征预处理
    6. 特征处理 - 特征选择
    7. 特征监控
    复制代码

     

    1. 特征工程是什么?有什么作用?

    从某种程度上来说,数据和特征决定了机器学习的上限,而模型和算法能做的只是逼近这个上限。特征工程本质上是一项工程活动,目的是最大限度地从原始数据中提取特征以供算法和模型使用

    我们本章围绕该xmin思维导图展开讨论

    Relevant Link:

    http://www.cnblogs.com/jasonfreak/p/5448385.html
    http://weibo.com/ttarticle/p/show?id=2309403973170330790744

     

    2. 特征获取方案 - 如何获取这些特征?

    0x1: 结合具体业务场景从原始日志中提取特征 - 结合业务!业务!业务!

    在大部分时候我们从产品中得到的原始日志都不能直接进行数据挖掘,我们需要进行特征提取,但特征提取也不能简单的直接就粗暴地分为数字型/文本型/序列型等等,这一步的思考非常重要,我们需要明确我们的业务场景细节,以及业务目标

    以暴力破解识别为具体场景我们展开讨论:

    1. 我们的日志从哪里来?是什么形式的?

    对于网络层面的数据,我们的原始日志常常是Gateway网络采集的原始五元组数据,包含

    session_time: '会话发生时间'
    src_ip: '源IP'
    src_port: '源端口'
    dst_ip: '目的IP'
    dst_port: '目的端口'

    样本的形式是字符串型的,但是要注意到的五元组单条日志本身是不包含"异常特征"规律的,也即规律不在原始日志本身,而在于多条原始日志内的统计分布规律,只有将原始日志进行良好的聚合才能将包含爆破特征的规律暴露出来

    2. 从攻防业务角度初步观测暴力破解的规律特征是怎样的?

    我们将发起暴力破解的机器设定为攻击者(不管是主动行为还是被入侵后沦为肉鸡的情况),从攻击者角度看暴力破解有2种方式:

    1. 针对单点目标的深度破解;
    2. 针对大范围(常常是B/C段)目标的广度破解;

    思考清楚了这2点,可以指导我们在观测样本数据的时候抓住哪些重点,即观察发生爆破安全事件的时候,有哪些样本日志含有广度特征,有哪些样本日志含有深度特征。特征提取分析的第一步是要在了解业务场景的前提下观察样本数据的特征分布,这一步前期调研很重要,它可以帮助我们判断后续用什么模型进行抽象建模,用什么算法进行计算

    我们以暴力破解广度扫描为例观测一组存在异常事件的服务器和一台不存在安全事件的服务器,在一天中按照30min为原子时间窗口进行切分, 在初始阶段,我们还不能非常好的定义我们的特征提取范围,根据业务的理解直觉,我们先尝试用最简单的【src_ip;dst_port;protocal(协议)】三元组进行时间窗口区间内的发包频率攻击目标dst_ip的广度统计,来获取样本数据整体上的特征分布判断

    复制代码
    src_ip,proto,dst_port,dst_ip_cn,send_cn,timeindex
    106.14.xxx.xx,tcp,22,7012,7012,3
    

    106.14.xxx.xx,udp,65500,8,8,3
    106.14.xxx.xx,udp,65500,4,4,4

    106.14.xxx.xx,tcp,80,1,1,0
    106.14.xxx.xx,tcp,80,6,6,3
    106.14.xxx.xx,tcp,80,82,82,4
    106.14.xxx.xx,tcp,80,1,1,10
    106.14.xxx.xx,tcp,80,1,1,14
    106.14.xxx.xx,tcp,80,2,2,16
    106.14.xxx.xx,tcp,80,1,1,18
    106.14.xxx.xx,tcp,80,1,1,19
    106.14.xxx.xx,tcp,80,1,1,31
    106.14.xxx.xx,tcp,80,1,1,33
    106.14.xxx.xx,tcp,80,1,1,34

    106.14.xxx.xx,tcp,9183,1,1,42

    复制代码

    这该ip的全天五元组日志中,我们已知该机器当前发生了:22端口暴力扫描行为,可以看到存在异常的样本聚合后,特征比较明显,即在较短的时间窗口内产生大量对外发包频率,以及对较多的dst_ip发起发包行为。而该服务器其他的正常通信行为则呈现出少且均匀的对外发包曲线

    我们挑选一个不存在异常行为的服务器进行频次聚合统计

    src_ip,proto,dst_port,dst_ip_cn,send_cn,timeindex
    114.215.175.203,tcp,22,1,1,29
    

    114.215.175.203,tcp,443,2,2,0

    由此证实了我们的猜想,暴力破解的特征提取要从发包频次和攻击目标dst_ip广度重点入手

    0x2: 定义特征模型,我们该从原始日志样本中抽取哪些特征?

    对于这个问题,有一个专门的研究分支叫"feature selection(特征选择)",似乎可以先将所有能想到的特征都抽出来,然后用例如相关性分析、信息增益、互信息这些评价指标来选择对算法模型分类效果最好的一系列特征。但我个人认为,特征选择和提取的最好人选还是熟悉业务的人来完成,这个过程可以说是非常依赖经验的参与,我们要在理解业务背景的基础上,将人的判别经验沉淀为需要提取的特征

    以暴力破解为例,我们来尝试定义出一组样本特征(对每30min时间区间内的所有原始日志按照不同的维度进行聚合)

    广度暴力破解特征

    复制代码
    1. proto:协议类型(tcp、udp):不同的网络协议可能导致我们之后要为每个协议单独建模,但是也有可能在一个模型中同学拟合2个协议样本集的特征
    2. dst_port:目标端口,代表了目标主机的网络服务类型,从业务经验上看,对22这种sshd服务端口发起的密集发包行为比对一个非常用端口发起的密集发包更倾向于在暴力破解,我们抽取这个特征的目的是需要模型尽量学习到不同的dst_port目的端口(代表了不同的服务)对判断结果的权重是不一样的
    3. count(相同 dst_port):在一个时间统计窗口内和当前连接具有相同服务(不管dst_ip是否相同)的发包频数,这个特征体现了暴力破解攻击的强度
    4. count(distinct dst_ip 去重):在一个时间统计窗口内攻击的目标主机的个数,这个特征体现了广度暴力破解攻击的范围广度
    5. max(session_time) - min(session_time):在一个时间统计窗口内和当前连接具有相同服务的攻击包,第一个发包时间和最后一个发包时间的间隔,该特征越接近于时间窗口大小,表明攻击的持续性越强
    复制代码

    深度暴力破解特征

    复制代码
    1. proto:协议类型(tcp、udp):不同的网络协议可能导致我们之后要为每个协议单独建模,但是也有可能在一个模型中同学拟合2个协议样本集的特征
    2. count(相同 dst_ip):在一个时间统计窗口内和当前连接具有相同目标主机(不论dst_port是否相同)的发包频数,这个特征体现了暴力破解攻击的强度
    3. count(distinct dst_port 去重):在一个时间统计窗口内攻击同一个目标主机的服务端口的个数,这个特征体现了深度暴力破解攻击的范围
    4. max(session_time) - min(session_time):在一个时间统计窗口内和当前连接具有相同目标主机的攻击包,第一个发包时间和最后一个发包时间的间隔,该特征越接近于时间窗口大小,表明攻击的持续性越强
    复制代码

    关于聚合的time windows的长度,读者也需要根据具体的业务场景仔细思考,对于暴力破解来说,爆破事件的特征规律是包含在一个时间窗口内的频率统计特征,但是对每个安全事件而言,攻击的持续时间是不同的,这就导致每个样本的length是变长的,我们需要对日级别的时间区间统计特征进行定长的切分,例如:按照30min为一个原子时间窗口,将样本集中在这个time windows内的所有原始日志聚合成单条特征向量(具体情况视原始数据采样能力和算法模型而定)

    Relevant Link:

    https://mp.weixin.qq.com/s?__biz=MzA5NzkxMzg1Nw==&mid=2653159305&idx=1&sn=077410cb7d95af0c343a13dbbd4e53fc&mpshare=1&scene=1&srcid=0510gYeDGwNdlniGYhamMGjn#wechat_redirect

     

    3. 特征观察 - 运用各种统计工具、图标等工具帮助我们从直观和精确层面认识特征中的概率分布

    拿到样本特征之后,我们可能需要做的是观察样本的特征概率分布、是否包含异常/离群点、空间分布上大致分为几个族群等

    0x1: 直方图统计法

    直方图是在图像处理上很常见也很有效的方法,它可以认为是图像灰度密度函数的近似。直方图虽然不能直接反映出图像内容,但对它进行分析可以得出图像的一些有用特征,这些特征能反映出图像的特点。例如:当图像对比度较小时,它的灰度直方图只在灰度轴上较小的一段区间上非零

    1. 较暗的图像由于较多的像素灰度值低,因此它的直方图的主体出现在低值灰度区间上,其在高值灰度区间上的幅度较小或为零
    2. 而较亮的图像情况正好相反

    为使图像变清晰,可以通过变换使图像的灰度动态范围变大,并且让灰度频率较小的灰度级经变换后,其频率变得大一些,使变换后的图像灰度直方图在较大的动态范围内趋于均化。同样,区分度(对比度)这个概念也同样适用于非图像分类领域,在直方图上低频区间和高频区间的间隔越大,对于分类器的训练越容易

    下面是kdd99的特征直方图

    从直方图上我们可以得出一个大致的判断,特征选取(feature selection)要尽量选择在直方图区间上分布较离散的特征(在分类问题场景中)

    0x2: 经验概率密度图

    经典统计推断主要的思想就是用样本来推断总体的状态,因为总体是未知的(即真实的规律是未知的),我们只能通过多次试验的样本(即实际值)来推断总体。经验分布函数是在这一思想下的一种方法,通过样本分布函数来估计总体的分布函数。

    若已知概率分布函数F(x)或概率密度函数p(x),便能解决大部分统计推断的问题,但问题是概率分布函数F(x)未知,这本身就是我们希望通过算法推断出来的结果
    为了解决这个问题,依泛函空间的大数定律得出:可通过该未知分布函数下的样本集{xi}构造的经验分布函数F_{l}(x) 依概率收敛去逼近F(x)。然后,通过积分方程:\int_{-\infty }^{x}p(t)dt=F_{l}(x)  的求解,得出概率密度函数p(x);
    需要特别注意的,该积分方程的求解是一个不适定计算问题,需使用正则化技术才能较好处理。也就是最大似然估计中的经验风险结构化风险

    下面以KDD99样本集为例

    可以看到,在这个特征的经验分布中,不同类型的样本集还是大致可分的,同时,在左边的mascan和netpture存在一个混淆区,在个该维度上基本不可分了,这会带来一定误报;同时在右边guess_passwd出现了一个小的波峰(peak mode),它可能代表了一些异常点样本点,可能暗示我们在进行后续的特征处理环节需要进行离群点过滤

    0x3: 统计样本特征各个离散值的离散度、gini指数、信息增益

    gini指数、信息增益都来自于香浓信息论中的混乱度的概念,值越大,体现当前样本的混乱度越大(区分度也越大)

    从图上可以看到,该特征离散值从0到100区间,gini指数逐渐下降,即指示如果用决策树或者其他分类器,分界线设定在这个区间内才能获得有效的信息增益

    同时在100到109区间中,样本在这个区间内只有一个单一的类别,分界线不应该选取在这个区间中,因为不能进行任何有效分类

    在109到101区间,样本在这个区间有有了不同的类别,即有一定的混乱度,特征分界面可以考虑在这个区间选取

    0x4: Measures of Shape: Skewness and Kurtosis

    Skewness 是描述数据分布是否对称的指标。越对称的分布,skewness越小。该指标可以暗示我们是否要进行特征标准化处理

    Kurtosis 是用来描述数据是否heavy tail,如果一个分布异常点很多或者很长尾,那么其kurtosis也越大。该指标可以用于评估在该特征维度上离群样本的密度 结合直方图,可以很好解释这两个指标的意义

    Relevant Link:

    https://brownmath.com/stat/shape.htm

     

    4. 特征处理 - 特征清洗

    通过理解业务场景,深入观察样本数据后,我们建立了初步的特征模型,并据此抽取出了一些训练样本,但此时还不能盲目直接进入算法建模,我们还需要继续深入观察样本,思考其中是否包含了异常离群数据、是否需要进行无量纲化处理?

    0x1: 清洗异常样本

    日志数据中可能存在对挖掘无用的噪音数据或者由于系统异常出现的异常样本数据,这需要我们结合业务情况和专家领域知识进行清洗过滤

    除了结合业务经验之外,还可以采用异常点检测算法对样本进行分析,常用的异常点检测算法包括

    复制代码
    1. 偏差检测:例如
        1) 聚类
        2) 最近邻等 
    2. 基于统计的异常点检测算法:这种方法适合于挖掘单变量的数值型数据,常用的方法有
        1) 极差(又称全距(Range)):是用来表示统计资料中的变异量数(measures of variation) ,其最大值与最小值之间的差距
        2) 四分位数间距:四分位距通常是用来构建箱形图,以及对概率分布的简要图表概述
        3) 均差
        4) 标准差等
    3. 基于距离的异常点检测算法,主要通过距离方法来检测异常点,将数据集中与大多数点之间距离大于某个阈值的点视为异常点,主要使用的距离度量方法有
        1) 绝对距离(曼哈顿距离)
        2) 欧氏距离
        3) 马氏距离等方法。
    4. 基于密度的异常点检测算法,考察当前点周围密度,可以发现局部异常点,例如LOF算法
    复制代码

    暴力破解场景中不存在本身是正常程序却发起对外密集发包的情况,所以不需要进行异常样本清洗

    0x2: 特征采样

    机器学习模型要求正负样本数量相差不多,而安全事件场景中发生暴力破解的情况毕竟是极少的几个,所以还要对负样本进行采样。不然会导致负样本(正常情况样本)主导了参数调优过程,而忽略核心的正样本的判别效果。

    当正样本数量远少于负样本的时候,即使训练和测试精确率到了99.99%,也可能是因为正样本被分错了正好在那0.01%内,而导致整个模型面对真实线上样本的时候表现非常差

    Relevant Link:

    https://www.zhihu.com/question/28641663

     

    5. 特征护理 - 特征预处理

    通过特征提取,我们能得到未经处理的特征,这时的特征可能有以下问题:

    复制代码
    1. 不属于同一量纲:即特征的取值范围不一样,不能够放在一起比较。无量纲化可以解决这一问题
    2. 信息冗余:对于某些定量特征,其包含的有效信息为区间划分,例如学习成绩,假若只关心“及格”或不“及格”,那么需要将定量的考分,转换成“1”和“0”表示及格和未及格。二值化可以解决这一问题
    3. 定性特征不能直接使用:某些机器学习算法和模型只能接受定量特征的输入,那么需要将定性特征转换为定量特征。最简单的方式是为每一种定性值指定一个定量值,但是这种方式过于灵活,增加了调参的工作。通常使用哑编码的方式(即one-hot编码思路)将定性特征转换为定量特征
        1) 假设有N种定性值,则将这一个特征扩展为N种特征,当原始特征值为第i种定性值时,第i个扩展特征赋值为1,其他扩展特征赋值为0
        2) 哑编码的方式相比直接指定的方式,不用增加调参的工作,对于线性模型来说,使用哑编码后的特征可达到非线性的效果
    4. 存在缺失值:缺失值需要补充
    5. 信息利用率低:不同的机器学习算法和模型对数据中信息的利用是不同的,例如在线性模型中,使用对定性特征哑编码可以达到非线性的效果。类似地,对定量变量多项式化,或者进行其他的转换,都能达到非线性的效果 
    复制代码

    我们使用sklearn中的preproccessing库来进行数据预处理,可以覆盖以上问题的解决方案。我们来逐一讨论下,然后再讨论本例中的暴力破解要如何进行特征预处理

    进行无量钢化处理有一点要特别注意,一定要仔细区分“异常点”和“无量钢化”问题,如果是因为观测采样造成的异常点,是不能简单地进行无量钢化处理的,否则会影响到样本本身的概率分布

    0x1: sklearn进行特征预处理的编程方法

    1. 无量纲化

    对于量纲不一致会影响模型训练效率和效果的问题,可以参阅这篇文章的第一章

    无量纲化使不同规格的数据转换到同一规格,下面我们逐一介绍常用的无量纲化方法

    标准化(z-score 标准化(zero-mean normalization))

    标准化的前提是特征值服从正态分布,标准化后,其转换成标准正态分布。标准化需要计算特征的均值和标准差,公式表达为:

    使用preproccessing库的StandardScaler类对数据进行标准化的代码如下:

    from sklearn.preprocessing import StandardScaler
    

    #标准化,返回值为标准化后的数据
    StandardScaler().fit_transform(iris.data)

    z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况

    我们的目的是根据样本训练分类器,并不是具体关心样本内某一个属性的绝对值,而是关注不同样本之间的相对值区别,因此z-score标准化不会影响到最后分类器的效果

    区间缩放法(归一化)(min-max标准化(Min-max normalization)) 

    区间缩放法利用了边界值信息,将特征的取值区间缩放到某个特点的范围,例如[0, 1]等。区间缩放法的思路有多种,常见的一种为利用两个最值进行缩放,公式表达为:

    使用preproccessing库的MinMaxScaler类对数据进行区间缩放的代码如下:

    from sklearn.preprocessing import MinMaxScaler
    

    #区间缩放,返回值为缩放到[0, 1]区间的数据
    MinMaxScaler().fit_transform(iris.data)

    正则化(Normalization)

    正则化的过程是将每个样本缩放到单位范数(每个样本的范数为1),如果后面要使用如二次型(点积)或者其它核方法计算两个样本之间的相似性这个方法会很有用。Normalization主要思想是对每个样本计算其p-范数,然后对该样本中每个元素除以该范数,这样处理的结果是使得每个处理后样本的p-范数等于1。

    p-范数的计算公式:||X||p=(|x1|^p+|x2|^p+...+|xn|^p)^1/p

    该方法主要应用于文本分类和聚类中。例如,对于两个TF-IDF向量的l2-norm进行点积,就可以得到这两个向量的余弦相似性

    复制代码
    >>> X = [[ 1., -1.,  2.],
    ...      [ 2.,  0.,  0.],
    ...      [ 0.,  1., -1.]]
    >>> X_normalized = preprocessing.normalize(X, norm='l2')
    

    >>> X_normalized
    array([[
    0.40…, -0.40…, 0.81…],
    [
    1. …, 0. …, 0. …],
    [
    0. …, 0.70…, -0.70…]])

    复制代码

    2. 数据变换

    常见的数据变换有基于多项式的、基于指数函数的、基于对数函数的

    Logistic/Softmax变换(尺度变化函数

    常用于逻辑斯蒂回归和深度神经网络中,用于将输出层结果压缩到[0,1]的概率区间范围内。这本质上是一种特征数值压缩方法

    3. 连续特征离散化

    对定量特征二值化

    定量特征二值化的核心在于设定一个阈值,大于阈值的赋值为1,小于等于阈值的赋值为0,公式表达如下:

    使用preproccessing库的Binarizer类对数据进行二值化的代码如下:

    from sklearn.preprocessing import Binarizer
    

    #二值化,阈值设置为3,返回值为二值化后的数据
    Binarizer(threshold=3).fit_transform(iris.data)

    4. 缺失值处理

    缺失值计算

    在一般情况下,在一个采集机制良好的系统中,样本集中不会存在缺失值,缺失值的发生可能在于我们对原始数据进行了一些聚合的join处理后,左/右表出现的缺失值;或者是在cnn图像处理时在边缘出现缺失值。这个时候我们需要根据业务场景具体需求补充缺失值,或者采集通用做法补零

    0x2: 对于暴力破解识别场景来说需要做哪些特征处理?

    对暴力破解场景来说,需要进行特征的问题可能有如下几个

    复制代码
    1. 问题3,在广播破解模型中,dst_port目标端口这个特征是一个数字,也许需要通过one-hot的思路将其扩展成一定数量的特征,每个特征代表了一个服务类型,例如如果dst_port = 22,即在ssh特征置一,其他置零。但这里问题是目标端口服务可能不可枚举,会有越来越多的服务加入进来,对建模来说存在困难。这步可以放到模型调优阶段去考虑
    2. 在一个时间区间内的频数从十几到几千不等,这里需要进行z-score标准化处理,将频数压缩到标准正态分布
    3. 用于标识使用协议的"tcp""udp"需要数值化为1(tcp)和2(udp)
    复制代码

    Relevant Link:

    http://blog.csdn.net/pipisorry/article/details/52247379
    http://www.cnblogs.com/chaosimple/p/4153167.html 

     

    6. 特征处理 - 特征选择

    数据预处理完后第一步为分析数据,对数据整体结构有一个大致的把握,每种类型数据有自己特定的分析方式,这里我们将数据分为:

    1. 类别型:输出饼图,观察样本数据分布,做频繁项分析
    2. 连续型(暴力破解频数也属于连续型,离散频数也属于连续的一种特例):输出直方图、KDE图、CDF图,做回归分析
    3. 日期型
    4. 单词型:输出词频
    5. 文本型

    这里以暴力破解为例,打印频数特征的散点分布图来观察样本特征的空间距离分布,重点考察标准化后样本数据是否含有一定的正态分布特性

    z-score标准化前:

    z-score标准化后:

    当对数据有一个大致理解后,我们需要选择有意义的特征输入机器学习的算法和模型进行训练。通常来说,从两个方面考虑来选择特征:

    1. 特征是否发散:如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么贡献
    2. 特征与目标的相关性:这点比较显见,与目标相关性高的特征,应当优选选择 

    特征选择的目标是寻找最优特征子集。特征选择能剔除不相关(irrelevant)或冗余(redundant )的特征,从而达到减少特征个数,提高模型精确度,减少运行时间的目的。另一方面,选取出真正相关的特征简化模型,协助理解数据产生的过程。特征选择的一般过程如下图所示:

    下面讨论特征选择-产生过程和生成特征子集方法

    0x1: Filter过滤法 - 与具体模型无关,而只关注自变量和因变量之间的关联

    按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征

    1. 方差/标准差 - 体现发散性的数学评价标准

    我们知道,如果一个特征对应的样本取值发散度越大,说明这个特征在不同样本间的差异性越明显,根据该特征训练得到的分类器效果也越好

    使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。使用feature_selection库的VarianceThreshold类来选择特征的代码如下

    复制代码
    # -*- coding: utf-8 -*-
    

    from sklearn.feature_selection import VarianceThreshold
    from sklearn.datasets import load_iris

    if name == main:
    iris
    = load_iris()

    print </span><span style="color: #800000;">"</span><span style="color: #800000;">iris.data: </span><span style="color: #800000;">"</span>, iris.data[:<span style="color: #800080;">5</span><span style="color: #000000;">]
    
    # 方差选择法,返回值为特征选择后的数据
    # 参数threshold为方差的阈值
    res </span>= VarianceThreshold(threshold=<span style="color: #800080;">3</span><span style="color: #000000;">).fit_transform(iris.data)
    
    print </span><span style="color: #800000;">"</span><span style="color: #800000;">VarianceThreshold: </span><span style="color: #800000;">"</span>, res[:<span style="color: #800080;">5</span><span style="color: #000000;">]
    

    iris.data: [[ 5.1 3.5 1.4 0.2]
    [
    4.9 3. 1.4 0.2]
    [
    4.7 3.2 1.3 0.2]
    [
    4.6 3.1 1.5 0.2]
    [
    5. 3.6 1.4 0.2]]
    VarianceThreshold: [[
    1.4]
    [
    1.4]
    [
    1.3]
    [
    1.5]
    [
    1.4]]

    复制代码

    可以看到,设定了方差为3后,鸢尾花的样本特征中的第三个特征被filter出来,表明第三列这个特征的离散方差最大

    2. 相关系数法

    使用相关系数法,先要计算各个特征对目标值的相关系数以及相关系数的P值。用feature_selection库的SelectKBest类结合相关系数来选择特征的代码如下

    复制代码
    # -*- coding: utf-8 -*-
    

    from sklearn.datasets import load_iris
    from sklearn.feature_selection import SelectKBest
    from scipy.stats import pearsonr
    from numpy import *

    if name == main:
    iris
    = load_iris()

    print </span><span style="color: #800000;">"</span><span style="color: #800000;">iris.data: </span><span style="color: #800000;">"</span>, iris.data[:<span style="color: #800080;">5</span><span style="color: #000000;">]
    
    # 选择K个最好的特征,返回选择特征后的数据
    # 第一个参数为计算评估特征是否好的函数,该函数输入特征矩阵和目标向量,输出二元组(评分,P值)的数组,数组第i项为第i个特征的评分和P值。在此定义为计算相关系数
    # 参数k为选择的特征个数
    res </span>= SelectKBest(lambda X, Y: tuple(map(tuple,array(list(map(lambda x:pearsonr(x, Y), X.T))).T)), k=<span style="color: #800080;">2</span><span style="color: #000000;">).fit_transform(iris.data, iris.target)
    print res[:</span><span style="color: #800080;">5</span><span style="color: #000000;">]
    

    iris.data: [[ 5.1 3.5 1.4 0.2]
    [
    4.9 3. 1.4 0.2]
    [
    4.7 3.2 1.3 0.2]
    [
    4.6 3.1 1.5 0.2]
    [
    5. 3.6 1.4 0.2]]
    [[
    1.4 0.2]
    [
    1.4 0.2]
    [
    1.3 0.2]
    [
    1.5 0.2]
    [
    1.4 0.2]]

    复制代码

    3. 卡方检验

    经典的卡方检验是检验定性自变量对定性因变量的相关性。假设自变量有N种取值,因变量有M种取值,考虑自变量等于i且因变量等于j的样本频数的观察值与期望的差距,构建统计量:

    这个统计量的含义简而言之就是自变量对因变量的相关性。用feature_selection库的SelectKBest类结合卡方检验来选择特征的代码如下:

    复制代码
    # -*- coding: utf-8 -*-
    

    from sklearn.datasets import load_iris
    from sklearn.feature_selection import SelectKBest
    from sklearn.feature_selection import chi2
    from numpy import *

    if name == main:
    iris
    = load_iris()

    print </span><span style="color: #800000;">"</span><span style="color: #800000;">iris.data: </span><span style="color: #800000;">"</span>, iris.data[:<span style="color: #800080;">5</span><span style="color: #000000;">]
    
    # 选择K个最好的特征,返回选择特征后的数据
    res </span>= SelectKBest(chi2, k=<span style="color: #800080;">2</span><span style="color: #000000;">).fit_transform(iris.data, iris.target)
    print </span><span style="color: #800000;">"</span><span style="color: #800000;">SelectKBest: </span><span style="color: #800000;">"</span>, res[:<span style="color: #800080;">5</span><span style="color: #000000;">]
    

    iris.data: [[ 5.1 3.5 1.4 0.2]
    [
    4.9 3. 1.4 0.2]
    [
    4.7 3.2 1.3 0.2]
    [
    4.6 3.1 1.5 0.2]
    [
    5. 3.6 1.4 0.2]]
    SelectKBest: [[
    1.4 0.2]
    [
    1.4 0.2]
    [
    1.3 0.2]
    [
    1.5 0.2]
    [
    1.4 0.2]]

    复制代码

    可以看到,卡方检验得出特征3、4的相关性最大,这和我们用线性模型分析相关R指数的结果一致

    4. 互信息法(信息增益)- 信息熵原理

    经典的互信息也是评价定性自变量对定性因变量的相关性的,互信息计算公式如下:

    为了处理定量数据,最大信息系数法被提出,使用feature_selection库的SelectKBest类结合最大信息系数法来选择特征的代码如下

    复制代码
    # -*- coding: utf-8 -*-
    

    from sklearn.datasets import load_iris
    from sklearn.feature_selection import SelectKBest
    from minepy import MINE
    from numpy import *

    #由于MINE的设计不是函数式的,定义mic方法将其为函数式的,返回一个二元组,二元组的第2项设置成固定的P值0.5
    def mic(x, y):
    m
    = MINE()
    m.compute_score(x, y)
    return (m.mic(), 0.5)

    if name == main:
    iris
    = load_iris()

    print </span><span style="color: #800000;">"</span><span style="color: #800000;">iris.data: </span><span style="color: #800000;">"</span>, iris.data[:<span style="color: #800080;">5</span><span style="color: #000000;">]
    
    # 选择K个最好的特征,返回特征选择后的数据
    res </span>= SelectKBest(lambda X, Y: array(map(lambda x: mic(x, Y), X.T)).T, k=<span style="color: #800080;">2</span><span style="color: #000000;">).fit_transform(iris.data, iris.target)
    print </span><span style="color: #800000;">"</span><span style="color: #800000;">SelectKBest: </span><span style="color: #800000;">"</span>, res[:<span style="color: #800080;">5</span>]</pre>
    
    复制代码

    0x2: Wrapper包装法 - 依赖具体模型,通过目标函数来决定是否加入一个特征

    根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征,即

    复制代码
    1. 序列前向选择( SFS , Sequential Forward Selection )
    从空集开始,每次加入一个选最优。
    

    2. 序列后向选择( SBS , Sequential Backward Selection )
    从全集开始,每次减少一个选最优。

    3. 增L去R选择算法 ( LRS , Plus-L Minus-R Selection )
    从空集开始,每次加入L个,减去R个,选最优(L
    >R)或者从全集开始,每次减去R个,增加L个,选最优(L<R)。

    复制代码

    关于特征的选取可以参阅这篇文章回归变量的选择与逐步回归 - 建立多元线性回归模型前怎么去做特征工程部分的讨论

    0x3: Embedded集成法 - 学习器自身自动选择特征

    集成法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练模型之后来确定特征的优劣。深度神经网络的一个很重要的优势就是算法能在训练过程中自动选择特征

    1. 基于L1/L2惩罚项的特征选择法

    2. 基于树模型的特征选择法

    树模型中GBDT也可用来作为基模型进行特征选择,使用feature_selection库的SelectFromModel类结合GBDT模型,来选择特征的代码如下:

    复制代码
    # -*- coding: utf-8 -*-
    

    from sklearn.datasets import load_iris
    from sklearn.feature_selection import SelectFromModel
    from sklearn.ensemble import GradientBoostingClassifier
    from numpy import *

    if name == main:
    iris
    = load_iris()

    print </span><span style="color: #800000;">"</span><span style="color: #800000;">iris.data: </span><span style="color: #800000;">"</span>, iris.data[:<span style="color: #800080;">5</span><span style="color: #000000;">]
    
    # GBDT作为基模型的特征选择
    res </span>=<span style="color: #000000;"> SelectFromModel(GradientBoostingClassifier()).fit_transform(iris.data, iris.target)
    print </span><span style="color: #800000;">"</span><span style="color: #800000;">RFE: </span><span style="color: #800000;">"</span>, res[:<span style="color: #800080;">5</span><span style="color: #000000;">]
    

    iris.data: [[ 5.1 3.5 1.4 0.2]
    [
    4.9 3. 1.4 0.2]
    [
    4.7 3.2 1.3 0.2]
    [
    4.6 3.1 1.5 0.2]
    [
    5. 3.6 1.4 0.2]]
    RFE: [[
    1.4 0.2]
    [
    1.4 0.2]
    [
    1.3 0.2]
    [
    1.5 0.2]
    [
    1.4 0.2]]

    复制代码

    0x4: 降维 - 获取一个和原始特征空间分类效果等价的子特征空间

    在一些情况下,可能会出现由于特征矩阵过大,导致计算量大,训练时间长的问题,因此降低特征矩阵维度也是必不可少的。常见的降维方法有

    1. 基于L1惩罚项的模型
    2. 主成分分析法(PCA):PCA和LDA有很多的相似点,其本质是要将原始的样本映射到维度更低的样本空间中,但是PCA和LDA的映射目标不一样:PCA是为了让映射后的样本具有最大的发散性;而LDA是为了让映射后的样本有最好的分类性能。所以说PCA是一种无监督的降维方法,而LDA是一种有监督的降维方法
    3. 线性判别分析(LDA):线性判别分析本身也是一个分类模型。

    PCA和LDA有很多的相似点,其本质是要将原始的样本映射到维度更低的样本空间中,但是PCA和LDA的映射目标不一样:PCA是为了让映射后的样本具有最大的发散性;而LDA是为了让映射后的样本有最好的分类性能。所以说PCA是一种无监督的降维方法,而LDA是一种有监督的降维方法。

    1. 主成分分析法(PCA)

    使用decomposition库的PCA类选择特征的代码如下

    复制代码
    # -*- coding: utf-8 -*-
    

    from sklearn.datasets import load_iris
    from sklearn.decomposition import PCA
    from numpy import *

    if name == main:
    iris
    = load_iris()

    print </span><span style="color: #800000;">"</span><span style="color: #800000;">iris.data: </span><span style="color: #800000;">"</span>, iris.data[:<span style="color: #800080;">5</span><span style="color: #000000;">]
    
    # 主成分分析法,返回降维后的数据
    # 参数n_components为主成分数目
    res </span>= PCA(n_components=<span style="color: #800080;">2</span><span style="color: #000000;">).fit_transform(iris.data)
    print res[:</span><span style="color: #800080;">5</span><span style="color: #000000;">]
    

    iris.data: [[ 5.1 3.5 1.4 0.2]
    [
    4.9 3. 1.4 0.2]
    [
    4.7 3.2 1.3 0.2]
    [
    4.6 3.1 1.5 0.2]
    [
    5. 3.6 1.4 0.2]]
    PCA: [[
    -2.68420713 0.32660731]
    [
    -2.71539062 -0.16955685]
    [
    -2.88981954 -0.13734561]
    [
    -2.7464372 -0.31112432]
    [
    -2.72859298 0.33392456]]

    复制代码

    2. 线性判别分析法(LDA)

    使用lda库的LDA类选择特征的代码如下:

    复制代码
    # -*- coding: utf-8 -*-
    

    from sklearn.datasets import load_iris
    from sklearn.lda import LDA
    from numpy import *

    if name == main:
    iris
    = load_iris()

    print </span><span style="color: #800000;">"</span><span style="color: #800000;">iris.data: </span><span style="color: #800000;">"</span>, iris.data[:<span style="color: #800080;">5</span><span style="color: #000000;">]
    
    # 线性判别分析法,返回降维后的数据
    # 参数n_components为降维后的维数
    res </span>= LDA(n_components=<span style="color: #800080;">2</span><span style="color: #000000;">).fit_transform(iris.data, iris.target)
    print </span><span style="color: #800000;">"</span><span style="color: #800000;">PCA: </span><span style="color: #800000;">"</span>, res[:<span style="color: #800080;">5</span><span style="color: #000000;">]
    

    iris.data: [[ 5.1 3.5 1.4 0.2]
    [
    4.9 3. 1.4 0.2]
    [
    4.7 3.2 1.3 0.2]
    [
    4.6 3.1 1.5 0.2]
    [
    5. 3.6 1.4 0.2]]
    PCA: [[
    -8.0849532 0.32845422]
    [
    -7.1471629 -0.75547326]
    [
    -7.51137789 -0.23807832]
    [
    -6.83767561 -0.64288476]
    [
    -8.15781367 0.54063935]]

    复制代码

    对于暴力破解这个场景来说,我们提取出的特征数量较少,同时从业务理解上看都和判别有较好的因果关系,因此不需要进行特征选择步骤

    Relevant Link:

    https://www.zhihu.com/question/29316149
    https://zhuanlan.zhihu.com/p/27076389
    http://blog.csdn.net/onlyqi/article/details/50843541
    http://blog.csdn.net/onlyqi/article/details/50844826 
    http://www.cnblogs.com/jasonfreak/p/5448385.html

     

    7. 特征监控

    在机器学习任务中,特征非常重要。对于重要的特征进行监控与有效性分析,了解模型所用的特征是否存在问题,当某个特别重要的特征出问题时,需要做好备案,防止灾难性结果。需要建立特征有效性的长效监控机制

    Relevant Link:

    https://tech.meituan.com/machinelearning-data-feature-process.html

    Copyright (c) 2017 LittleHann All rights reserved

    展开全文
  • tensorflow,机器学习
  • 1. 机器学习之用Hog+Svm人脸检测、交通标志和字符识别等(初学者)  http://blog.csdn.net/Serious_Tanx/article/details/52648911 2. SVM交通标志识别 样本图片一直显示无法读取  ...


    1. 机器学习之用Hog+Svm人脸检测、交通标志和字符识别等(初学者)

     http://blog.csdn.net/Serious_Tanx/article/details/52648911

    2. SVM交通标志识别 样本图片一直显示无法读取

     http://www.opencv.org.cn/forum.php?mod=viewthread&tid=265669


    3. 基于OpenCV的交通标志识别(SVM+Hu不变矩, 部分测试源代码)

     https://www.cnblogs.com/tcysky/p/6542882.html




    展开全文
  • 但是该公司刚刚推出了一项全新功能,该功能使用机器学习来自动识别并标记每个按钮,滑块和标签。 屏幕识别(iOS 14中现已提供)是一种计算机视觉系统,已经对正在使用的应用程序的数千张图像进行了培训,可以学习...

    苹果一直不遗余力地为残障用户构建功能,iOS上的VoiceOver对于视力障碍的人来说是无价的工具,假设界面的每个元素均已手动标记。但是该公司刚刚推出了一项全新功能,该功能使用机器学习来自动识别并标记每个按钮,滑块和标签。

    屏幕识别(iOS 14中现已提供)是一种计算机视觉系统,已经对正在使用的应用程序的数千张图像进行了培训,可以学习按钮的外观,图标的含义等。

    现在在任何应用程序中,用户都可以调用该功能,并且在不到一秒钟的时间内,屏幕上的每个项目都将被标记。

    在iOS 13中,苹果自动为图标添加了标签,屏幕识别又向前迈出了一步。我们可以查看屏幕上的像素,并确定可以与之交互的对象的层次结构,所有这些操作都在设备上的十分之一秒之内发生。

    佛山市东联科技有限公司表示:“这项新功能应有助于使数以百万计的应用程序更容易被视力障碍的用户完全可以访问。” 您可以通过以下方法打开它:“辅助功能”设置,然后依次选择“ VoiceOver”和“ VoiceOver识别”,在此处可以打开和关闭图像,屏幕和文本识别。(欢迎转载分享)

    展开全文
  • 邵龙闯【期刊名称】《《中国新通信》》【年(卷),期】2019(021)016【摘要】近年来,机器视觉越来越多的用于人类的交通、物流和安防等方面,它在代替人工重复机械的特征识别等方面发挥着重要的作用.但是自然环境、物种...
  • C#学习 01_类.htm.txt 02_构造函数的执行序列.htm.txt 03_抽象类和接口.htm.txt 04_结构类型.htm.txt 05_类成员的定义.htm.txt 06_类成员的其他议题.htm.txt 07_接口的执行.htm.txt 08_集合.htm.txt 09_...
  • C#学习 01_类.htm.txt 02_构造函数的执行序列.htm.txt 03_抽象类和接口.htm.txt 04_结构类型.htm.txt 05_类成员的定义.htm.txt 06_类成员的其他议题.htm.txt 07_接口的执行.htm.txt 08_集合.htm.txt 09_...
  • LSTM(Long Short Term Memory,长短期记忆网络)介绍 介绍:LSTM,也就是长短期记忆网络,是一种 RNN 特殊的类型,...应用领域:语音识别、语言建模、机器翻译、命名实体识别、图像描述文本生成。 图说LSTM结构 LSTM图标
  • Grab 'n Tag-crx插件

    2021-04-04 14:12:16
    背景:Grab'n Tag使用一种称为人工神经网络(ANN)的机器学习形式来分析网络上的图像。 -页。 通过向ANN提供大量样本数据(在这种情况下,这些图像已经为其内容添加了标签),ANN被训练为具有高度准确性。 训练后,...
  • Trustium-crx插件

    2021-03-09 00:24:54
    Trustium将高级机器学习模型与人工评级系统相结合,以识别和区分声音新闻,观点,讽刺和内容伪装成优质新闻。 我们知道了解新闻的可信度令人困惑。 Trustium直接在浏览器扩展上的简单红色,橙色和绿色图标一览无余,...
  • 语言:日本語 ...您可以将Kotoba的网站顺利移动到Kotoba...5.单击弹出窗口中的扬声器图标,以播放人类母语扬声器的正确发音,而不是机器音频。6.成语通过拖动和选择来显示意义。·它与多种形式的介词,固定名词,名词等。
  • ApWiFi Route v1.0.5.3

    2012-05-11 16:52:17
    修正检测机器码不稳定Bug 加入服务器状态的刷新功能 修复一处可能的内存异常 一些细小修改 1.0.4.6[2011.07.10] 优化与新服务器的连通性 (连接VIP服务器负载均衡算法) 为安卓版本公测预留接口 修正部份英文语法...
  • 标注样本: 标注渠道是有一定讲究的,一般采用多个渠道组合,因为现在大多是机器识别,导致保存过滤下来的正确样本可能存在特征缺失,举个例子,这个渠道把所有的b都识别成a,为了避免这种情况建议通过多个渠道组合...
  • 金盾2019破解版

    2016-12-22 11:15:13
    1、正式版增加了自定义播放器图标功能,个性化图标和个性化界面可以显著提升企业形象 ; 2、正式版增加了默认水印功能,无需设置播放密码就可以给视频添加水印; 3、正式版采用更高强度加密内核,让所有形式的翻版...
  • 进入桌面,鼠标右击“我的电脑”图标,在出现的菜单中选择“属性”,打开“系统属性”窗口,点击“硬件--设备管理器”,在“设备管理器”中显示了机器配置的所有硬件设备。从上往下依次排列着光驱、磁盘控制器芯片、...
  • vc源代码合集.rar

    热门讨论 2012-06-11 09:43:42
    2012-06-11 08:46 3,628,865 神经网络PPT教程汇总 BP神经网络详解与实例 BP算法 神经网络 机器学习 马尔科夫链.rar 2012-06-11 08:36 889,798 精通Windows Sockets网络开发源码.rar 2012-06-11 08:40 16,068 获取...
  • awesome-python 是 vinta 发起维护的 Python 资源列表,内容包括:Web 框架、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等。由「开源前哨...
  • 建议在运行 wukong-robot 的机器上重新训练一下唤醒词,不同设备录制出来的唤醒词模型使用效果会大打折扣。 不论使用哪个厂商的API,都建议注册并填上自己注册的应用信息,而不要用默认的配置。这是因为这些API都有...
  • 导入图片后不能编辑,所有的编辑图标都是灰色的 首选项-图像-打开JPEG编辑、打开tiff编辑、打开png编辑都勾上。 没找着 打开JPEG编辑 然后,查看英文界面发现乃session一词,就是允许用户...
  • SqlToolBox 1.8.2

    2010-05-22 10:25:56
    SqlToolBox是一款纯绿色的免费数据库客户端软件,基于Java Swing编制而成,旨在于为开发人员,系统工程师和数据库管理员提供一种通用方便和快捷的数据库操作工具,使他们摆脱需要学习掌握使用多种数据库客户端的苦恼...
  • 新的问答模块提供了一组简单而引人注目的工具,可促进课堂上对学习的积极评估。它让教师能够加强和巩固教学要点,即时估量学生在课堂上的理解 采用“游戏节目”的方法,教师可以快速向班级提出口头问题,允许根据...
  • 新的问答模块提供了一组简单而引人注目的工具,可促进课堂上对学习的积极评估。它让教师能够加强和巩固教学要点,即时估量学生在课堂上的理解 采用“游戏节目”的方法,教师可以快速向班级提出口头问题,允许根据...
  • 机器学习:常用机器学习库 微软办公软件 自然语言处理 网络:与网络各层配合使用的库 视频:用于处理视频的库 其他 常用包 常用包 说明 fmt 实现格式化的输入输出操作,其中的fmt.Printf()和fmt....
  • windows 程序设计

    2011-07-24 21:16:30
    视讯显示器以图标和输入设备(例如按钮和滚动条)的形式显示多种图形对象。使用者可以使用键盘(或者更直接地使用鼠标等指向设备)直接在屏幕上操纵这些对象,拖动图形对象、按下鼠标按钮以及滚动滚动条。 因此,...
  • C#微软培训资料

    2014-01-22 14:10:17
    <<page 1>> page begin==================== 目 目目 目 录 录录 录 第一部分 C#语言概述.4 第一章 第一章第一章 第一章 .NET 编 编 ... 比尔....这一天 微软公司正式推出了其下一代...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    C#--微软.NET的第一语言 本书着重介绍语言本身,比较少涉及应用,不错的入门书,从头讲起,不怕不明白。 <<page 1>> page begin==================== 目 目目 目 录 ... 比尔.... 2000 年 6 月 ...

空空如也

空空如也

1 2
收藏数 33
精华内容 13
关键字:

机器学习识别图标