精华内容
下载资源
问答
  • 在基于文本向量表示的分类、聚类等任务中,文档向量是一个关键节点。如何将一篇文档用所带信息或概念的向量进行表示...文档向量按表示的目标分为以下几种: 句子向量 段落向量 文档向量 论坛帖子向量 表格向量 ...

    在基于文本向量表示的分类、聚类等任务中,文档向量是一个关键节点。如何将一篇文档用所带信息或概念的向量进行表示,是语义理解的基础。

    以下介绍的文档向量皆为向量化表示后的文档向量,可以直接在高维向量空间进行相似性比较。

    文档向量按表示的目标分为以下几种:

    1. 句子向量
    2. 段落向量
    3. 文档向量
    4. 论坛帖子向量
    5. 表格向量
    展开全文
  • SVM可以分为以下几种: 线性可分支持向量机:当训练样本线性可分时,通过硬间隔最大化,学习一个线性分类器。又称硬间隔支持向量机 线性支持向量机:当训练样本近似可分时,通过软间隔最大化,学习一个线性分类器。...

    这篇博客是看完李航《统计学习方法》,对其中知识点的梳理!!

    概念:

    支持向量机(SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器;SVM还包含核技巧,使它成为非线性分类器

    SVM可以分为以下几种:

    • 线性可分支持向量机:当训练样本线性可分时,通过硬间隔最大化,学习一个线性分类器。又称硬间隔支持向量机
    • 线性支持向量机:当训练样本近似可分时,通过软间隔最大化,学习一个线性分类器。又称软间隔支持向量机
    • 非线性支持向量机:当训练样本不可分时,通过使用核技巧及软间隔最大化,学习一个非线性支持向量机。

    线性可分支持向量(硬间隔最大化):

    假设给定一个特征空间上的训练样本:
    T = {(x1,y1),(x2,y2), , , , , , ,(xn,yn)}
    其中,xi为第i个特征向量,yi是其对应的标记,当yi = +1时,称为正例;当yi = -1时,称为负例,假设训练集是线性可分的。

    学习的目标:

    在特征空间,寻找一个分离超平面,这个超平面可以将样本点分到不同的类,分离的超平面表示为:
    在这里插入图片描述
    其中,w是超平面的法向量b是超平面的截距。分类超平面将特征空间分为两部分,一部分是正类,一部分是负类,法向量指向的一侧为正类。

    线性可分支持向量的定义:

    • 给定线可分的数据集;
    • 通过间隔最大化,求解超平面的参数 w* 和 b*.
      在这里插入图片描述
    • 学习对应的分类决策函数;其中sign函数是符号函数,即当w* x + b* >0时,函数值为1;w* x + b* <0,函数值为-1.
      在这里插入图片描述
      上面三个步骤就可以完成一个线性可分数据的划分,但是有几个问题
    • 间隔最大化是怎么实现的?
    • 如何求解超平面的参数呢?
    • 如何学习这个符号函数呢?

    继续看:

    函数间隔与几何间隔:

    以下图为例,图中“。”代表正例,“x”代表负例,训练集线性可分,这时有无穷多直线可以将这两类数据划分开来。
    在这里插入图片描述
    感知机利用误分类数最小的策略,求得分离超平面,不过这时的解有无穷多个
    线性可分支持向量机利用间隔最大化求最优的分离超平面,这时解是唯一的。

    继续看上面的图,有A.B.C三个点,这3个点都是正例点,但是他们距离超平面的距离是不一样,A点离的最远,若将A点预测为正例,则可信度高,点C距离超平面最近,则预测其为正例点,则可信度不是很高。

    所以,一个点距离分离超平面的远近可以表示分类预测的确信程度。在超平面wx + b = 0确定的情况下,|wx + b| 可以表示点x距离超平面的远近,而wx + b的符号和对应的标签y是否一致能够表示分类是否正确,所以可以用y(wx + b)来表示分类的正确性和确信度。这就是函数间隔。

    函数间隔:

    对于给定的训练数据集T和超平面参数(w,b),则定义超平面(w,b)关于样本点(xi,yi)的函数间隔为:
    在这里插入图片描述
    定义超平面(w,b)关于T中所有样本点(x,y)的函数间隔,即就是最小的函数间隔:
    在这里插入图片描述
    函数间隔可以表示分类预测的正确性和确信度,但是选择分离超平面时,仅仅有函数间隔还不够,因为只要成比例的改变 w 和 b, 例如将他们改为 2w 和 2b,这时超平面为2wx + 2b = 0,化简后,还是wx + b = 0,超平面没有变,但是函数间隔却扩大了2倍。

    所以我们给超平面的法向量 w 加上约束,如规范化,|| w || = 1,使得间隔确定,这时的函数间隔变为几何间隔。其中|| w || 为 w 的L2范数。

    几何间隔:

    对于给定的训练集T和超平面(w,b),定义超平面(w,b)关于样本点(xi,yi)的几何间隔为:
    在这里插入图片描述
    定义超平面(w,b)关于T中所有样本点(x,y)的几何间隔,即就是最小的几何间隔:
    在这里插入图片描述

    函数间隔和几何间隔的关系:

    有上面的定义可以看出两者之间的关系:
    在这里插入图片描述
    若|| w || = 1,则几何间隔和函数间隔相等,当超平面参数w和b成比例改变时,函数间隔也按照比例改变吗,但是几何不变,故用几何间隔来分类预测的正确性和确信度

    间隔最大化:

    上面介绍了函数间隔和几何间隔的概念,但是如何实现间隔最大化还是不知道,继续往下:

    **间隔最大化的解释:**对给定的训练集,找到几何间隔最大的超平面。这个超平面不仅可以将正负示例分割开来,而且对最难分的实例点,也可以有足够大的确信度将它们分开,这样的超平面泛化能力将会是最好的。

    如何求最大间隔分离超平面:

    这个问题可以表示为下面的约束最优化问题:

    先是最大化几何间隔,以及每个样本点的几何间隔都要大于最小的几何间隔。然后根据几何间隔和函数间隔的关系,将问题变为和函数间隔有关:如下图:
    在这里插入图片描述
    函数间隔的值 r 其实是不影响最优化问题的;因为,将 w 和 b 按比例扩大,变为 2w 和 2b时,函数间隔也变为2r,两边就把2消除了,还是原来的式子,所以我们简化模型,将函数间隔取值为1,以及下面如图的操作。得到最终的优化问题
    在这里插入图片描述

    展开全文
  • 该方法旨在样本空间中找到一个分割超平面,把样本集按某种规则分为几部分。从而达到分类的目的。 SVM在理论上可以分为三: 线性可分支持向量机(硬间隔支持向量机) 通过硬间隔最大化(hard margin maximization...

    机器学习_3_支持向量机SVM

    写在前面:

    ​ 新手入门,非权威,有理解不到位的地方欢迎批评指正。

    1. 理论

    该方法旨在样本空间中找到一个分割超平面,把样本集按某种规则分为几部分。从而达到分类的目的。

    SVM在理论上可以分为三种:

    • 线性可分支持向量机(硬间隔支持向量机)
      通过硬间隔最大化(hard margin maximization)来求该超平面
    • 线性支持向量机(软间隔支持向量机)
      用过软间隔最大化(Soft Margin Maximization)来求该超平面
    • 非线性支持向量机
      核函数kernel function
    • 线性可分SVM

      线性可分SVM指两个类别可以用线性的分隔超平面完全分开,无存在分割错误。如下图。

      在这种情况下,我们可以得到很多分隔超平面,但从这些超平面中选择出最优最合理的才是我们需要的。

      在这里插入图片描述

      • 给定训练样本集
        D={(x1,y1),(x2,y2),,(xm,ym)},yi{1,+1} D=\left\{\left(\boldsymbol{x}_{1}, y_{1}\right),\left(\boldsymbol{x}_{2}, y_{2}\right), \ldots,\left(\boldsymbol{x}_{m}, y_{m}\right)\right\}, y_{i} \in\{-1,+1\}

      • 假设分割超平面为
        wTx+b=0 \boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}+b=0

      • 分类决策函数
        y(x)=sign(f(x))=sign(wTx+b) \begin{aligned} y(\boldsymbol{x})&= sign(f(\boldsymbol{x}))\\ &=sign(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}+b) \end{aligned}

      • 目标函数

        通过最大化硬间隔来求解,间隔指两个类别集合中到超平面的最小距离的和,这些距离超平面最近的样本点称为支撑向量或支持向量。“硬”指的是对分类错误零容忍,不接受错误,对应于线性可分

        在这里插入图片描述

        样本点到分隔超平面的距离为:
        r=wTx+bw r=\frac{\left|\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}+b\right|}{\|\boldsymbol{w}\|}
        已知这两类样本点是线性可分的,通过对w\boldsymbol{w}等比例缩放,两个异类样本中到分隔超平面距离最小的点必存在:
        {wTxi++b=+1wTxi+b=1 \left\{\begin{array}{ll} \boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i+}+b = +1 \\ \boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i-}+b = -1 \end{array}\right.
        即对两类样本点来说,总存在:
        {wTxi+b+1,yi=+1wTxi+b1,yi=1 \left\{\begin{array}{ll} \boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b \geqslant+1, & y_{i}=+1 \\ \boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b \leqslant-1, & y_{i}=-1 \end{array}\right.
        即:
        yi(wTxi+b)+1 y_{i}(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b) \geqslant+1

        两类样本的间隔为:
        γ=2w \gamma=\frac{2}{\|\boldsymbol{w}\|}

        目标函数为:
        maxw,b2w s.t. yi(wTxi+b)1,i=1,2,,m \begin{array}{l} \max _{\boldsymbol{w}, b} \frac{2}{\|\boldsymbol{w}\|} \\ \text { s.t. } y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right) \geqslant 1, \quad i=1,2, \ldots, m \end{array}
        即:
        minw,b12w2 s.t. yi(wTxi+b)1,i=1,2,,m \begin{array}{l} \min _{\boldsymbol{w}, b} \frac{1}{2}\|\boldsymbol{w}\|^{2} \\ \text { s.t. } y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right) \geqslant 1, \quad i=1,2, \ldots, m \end{array}

      • 目标函数求解:

        构造拉格朗日函数:

      L(w,b,α)=12w2+i=1mαi(1yi(wTxi+b));αi0 L(\boldsymbol{w}, b, \boldsymbol{\alpha})=\frac{1}{2}\|\boldsymbol{w}\|^{2}+\sum_{i=1}^{m} \alpha_{i}\left(1-y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right)\right); \alpha_{i} \geqslant 0

      ​ 则原目标函数等价于:
      minw,bmaxαL(w,b,α) \min _{\boldsymbol{w}, b} \max _{\boldsymbol{\alpha}} L(\boldsymbol{w}, b, \boldsymbol{\alpha})
      ​ 上式的对偶问题是:
      maxαminw,bL(w,b,α) \max _{\boldsymbol{\alpha}} \min _{\boldsymbol{w}, b} L(\boldsymbol{w}, b, \boldsymbol{\alpha})
      ​ 令L(w,b,α)L(\boldsymbol{w}, b, \boldsymbol{\alpha})w\boldsymbol{w}α\boldsymbol{\alpha}的偏导数为00,可求得:
      w=i=1mαiyixi0=i=1mαiyi \begin{aligned} \boldsymbol{w} &=\sum_{i=1}^{m} \alpha_{i} y_{i} \boldsymbol{x}_{i} \\ 0 &=\sum_{i=1}^{m} \alpha_{i} y_{i} \end{aligned}
      ​ 带入化简后,原目标函数转变为:
      maxαi=1mαi12i=1mj=1mαiαjyiyjxiTxj s.t. i=1mαiyi=0αi0,i=1,2,,m \begin{aligned} \max _{\alpha} &\sum_{i=1}^{m} \alpha_{i}-\frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j}{\boldsymbol{x}}_{i}^{\mathrm{T}} \boldsymbol{x}_{j}\\ \text { s.t. } &\sum_{i=1}^{m} \alpha_{i} y_{i}=0 \\ &\alpha_{i} \geqslant 0, \quad i=1,2, \ldots, m \end{aligned}
      ​ 利用SMO算法求解出α\boldsymbol{\alpha},即可求得模型:
      f(x)=wTx+b=i=1mαiyixiTx+b \begin{aligned} f(\boldsymbol{x}) &=\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}+b \\ &=\sum_{i=1}^{m} \alpha_{i} y_{i} \boldsymbol{x}_{i}^{\mathrm{T}} \boldsymbol{x}+b \end{aligned}
      ​ 在求出的αi{\alpha_i}中对应的样本点为支持向量,非支持向量对应的αi{\alpha_i}都为00

    • 线性SVM

      样本数据线性不可分。用线性的分隔超平面分开,存在分割错误,对分类错误有一定的容忍度。如下图,显然虚线比实线分得好。

      在这里插入图片描述

      在这里插入图片描述

      • 由于数据线性不可分,存在误差,即需要损失函数来刻画这一误差:

        0/1损失:
        0/1(z)={1, if z<00, otherwise  \ell_{0 / 1}(z)=\left\{\begin{array}{ll} 1, & \text { if } z<0 \\ 0, & \text { otherwise } \end{array}\right.
        hinge 损失
        hinge(z)=max(0,1z) \ell_{\text {hinge}}(z)=\max (0,1-z)
        指数损失(exponential loss):
        exp(z)=exp(z) \ell_{\exp }(z)=\exp (-z)
        对率损失(logistic loss):
        log(z)=log(1+exp(z)) \ell_{\log }(z)=\log (1+\exp (-z))
        在这里插入图片描述

      • 取hinge损失,引入增加松弛因子ξi0\xi_{i}≥0,使函数间隔加上松弛变量大于等于11。这样,约束条件变成:
        yi(wTxi+b)1ξi y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \cdot \boldsymbol{x}_{i}+b\right) \geq 1-\xi_{i}

      • 目标函数变为:
        minw,b,ξ12w2+Ci=1Nξi s.t. yi(wTxi+b)1ξi,i=1,2,,nξi0,i=1,2,,n \begin{array}{l} \min _{\boldsymbol{w}, b, \xi} \frac{1}{2}\|\boldsymbol{w}\|^{2}+C \sum_{i=1}^{N} \xi_{i} \\ \begin{aligned} \text { s.t. } \quad &y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \cdot \boldsymbol{x}_{i}+b\right) \geq 1-\xi_{i}, \quad i=1,2, \cdots, n \\ \quad &\xi_{i} \geq 0, \quad i=1,2, \cdots, n \end{aligned} \end{array}

      • 构造拉格朗日函数求对偶:
        maxα12i=1nj=1nαiαjyiyj(xixj)+i=1nαi s.t. i=1nαiyi=00αiC,i=1,2,,n \begin{array}{l} \max _{\alpha} -\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)+\sum_{i=1}^{n} \alpha_{i} \\ \begin{aligned} \text { s.t. } &\sum_{i=1}^{n} \alpha_{i} y_{i}=0 \\ \quad &\quad 0 \leq \alpha_{i} \leq C, \quad i=1,2, \ldots, n \end{aligned} \end{array}

    • 非线性SVM

      对于一个样本集,原始样本空间下不可分(异或问题),可以通过某种映射将样本空间的维度提高,实现在高位空间下对样本进行分类。

      • ϕ(x)\phi(\boldsymbol{x})表示将 x\boldsymbol{x} 映射后的特征向量,于是在特征空间中划分超平面所对应的模型可表示为 :
        f(x)=wTϕ(x)+b f(\boldsymbol{x})=\boldsymbol{w}^{\mathrm{T}} \phi(\boldsymbol{x})+b

      • 目标函数:
        minw,b12w2 s.t. yi(wTϕ(xi)+b)1,i=1,2,,m \begin{array}{l} \min _{\boldsymbol{w}, b} \frac{1}{2}\|\boldsymbol{w}\|^{2} \\ \text { s.t. } y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \phi\left(\boldsymbol{x}_{i}\right)+b\right) \geqslant 1, \quad i=1,2, \ldots, m \end{array}

      • 对偶问题:
        maxαi=1mαi12i=1mj=1mαiαjyiyjϕ(xi)Tϕ(xj) s.t. i=1nαiyi=0αi0,i=1,2,,n \begin{array}{l} \max _{\alpha} \sum_{i=1}^{m} \alpha_{i}-\frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j} \phi\left(\boldsymbol{x}_{i}\right)^{\mathrm{T}} \phi\left(\boldsymbol{x}_{j}\right) \\ \begin{aligned} \text { s.t. } &\sum_{i=1}^{n} \alpha_{i} y_{i}=0 \\ \quad &\alpha_{i} \geqslant 0, \quad i=1,2, \ldots, n \end{aligned} \end{array}

      • 定义核函数:
        κ(xi,xj)=ϕ(xi),ϕ(xj)=ϕ(xi)Tϕ(xj) \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right)=\left\langle\phi\left(\boldsymbol{x}_{i}\right), \phi\left(\boldsymbol{x}_{j}\right)\right\rangle=\phi\left(\boldsymbol{x}_{i}\right)^{\mathrm{T}} \phi\left(\boldsymbol{x}_{j}\right)
        常见核函数:

        在这里插入图片描述

      • 原目标函数可写为:
        maxαi=1mαi12i=1mj=1mαiαjyiyjκ(xi,xj) s.t. i=1nαiyi=0αi0,i=1,2,,n \begin{array}{l} \max _{\alpha} \sum_{i=1}^{m} \alpha_{i}-\frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j} \kappa(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}) \\ \begin{aligned} \text { s.t. } &\sum_{i=1}^{n} \alpha_{i} y_{i}=0 \\ \quad &\alpha_{i} \geqslant 0, \quad i=1,2, \ldots, n \end{aligned} \end{array}

      • 求解后得到:
        f(x)=wTϕ(x)+b=i=1mαiyiϕ(xi)Tϕ(x)+b=i=1mαiyiκ(x,xi)+b \begin{aligned} f(\boldsymbol{x}) &=\boldsymbol{w}^{\mathrm{T}} \phi(\boldsymbol{x})+b \\ &=\sum_{i=1}^{m} \alpha_{i} y_{i} \phi\left(\boldsymbol{x}_{i}\right)^{\mathrm{T}} \phi(\boldsymbol{x})+b \\ &=\sum_{i=1}^{m} \alpha_{i} y_{i} \kappa\left(\boldsymbol{x}, \boldsymbol{x}_{i}\right)+b \end{aligned}

    2. 代码实现

    代码环境:

    • win7+PyCharm 2018.3.1 Professional+python3.7

    MNIST数据集:

    # -*- coding:utf-8 -*-
    
    import numpy as np
    from sklearn import svm
    import matplotlib.colors
    import matplotlib.pyplot as plt
    from PIL import Image
    from sklearn.metrics import accuracy_score
    import pandas as pd
    import os
    import csv
    from sklearn.model_selection import train_test_split
    from sklearn.model_selection import GridSearchCV
    from sklearn.ensemble import RandomForestClassifier
    from time import time
    from pprint import pprint
    
    
    def save_image(im, i):
        im = 255 - im
        a = im.astype(np.uint8)
        output_path = 'HandWritten'
        if not os.path.exists(output_path):
            os.mkdir(output_path)
        Image.fromarray(a).save(output_path + ('\\%d.png' % i))
    
    
    def save_result(model):
        data_test_hat = model.predict(data_test)
        with open('Prediction.csv', 'wb') as f:
            writer = csv.writer(f)
            writer.writerow(['ImageId', 'Label'])
            for i, d in enumerate(data_test_hat):
                writer.writerow([i, d])
            # writer.writerows(zip(np.arange(1, len(data_test_hat) + 1), data_test_hat))
    
    
    if __name__ == "__main__":
        classifier_type = 'RF'
    
        print '载入训练数据...'
        t = time()
        data = pd.read_csv('.\\MNIST.train.csv', header=0, dtype=np.int)
        print '载入完成,耗时%f秒' % (time() - t)
        y = data['label'].values
        x = data.values[:, 1:]
        print '图片个数:%d,图片像素数目:%d' % x.shape
        images = x.reshape(-1, 28, 28)
        y = y.ravel()
    
        print '载入测试数据...'
        t = time()
        data_test = pd.read_csv('.\\MNIST.test.csv', header=0, dtype=np.int)
        data_test = data_test.values
        images_test_result = data_test.reshape(-1, 28, 28)
        print '载入完成,耗时%f秒' % (time() - t)
    
        np.random.seed(0)
        x, x_test, y, y_test = train_test_split(x, y, train_size=0.8, random_state=1)
        images = x.reshape(-1, 28, 28)
        images_test = x_test.reshape(-1, 28, 28)
        print x.shape, x_test.shape
    
        matplotlib.rcParams['font.sans-serif'] = [u'SimHei']
        matplotlib.rcParams['axes.unicode_minus'] = False
        plt.figure(figsize=(15, 9), facecolor='w')
        for index, image in enumerate(images[:16]):
            plt.subplot(4, 8, index + 1)
            plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')
            plt.title(u'训练图片: %i' % y[index])
        for index, image in enumerate(images_test_result[:16]):
            plt.subplot(4, 8, index + 17)
            plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')
            save_image(image.copy(), index)
            plt.title(u'测试图片')
        plt.tight_layout()
        plt.show()
    
        # SVM
        if classifier_type == 'SVM':
            # params = {'C':np.logspace(1, 4, 4, base=10), 'gamma':np.logspace(-10, -2, 9, base=10)}
            # clf = svm.SVC(kernel='rbf')
            # model = GridSearchCV(clf, param_grid=params, cv=3)
            model = svm.SVC(C=1000, kernel='rbf', gamma=1e-10)
            print 'SVM开始训练...'
            t = time()
            model.fit(x, y)
            t = time() - t
            print 'SVM训练结束,耗时%d分钟%.3f秒' % (int(t/60), t - 60*int(t/60))
            # print '最优分类器:', model.best_estimator_
            # print '最优参数:\t', model.best_params_
            # print 'model.cv_results_ ='
            # pprint(model.cv_results_)
            t = time()
            y_hat = model.predict(x)
            t = time() - t
            print 'SVM训练集准确率:%.3f%%,耗时%d分钟%.3f秒' % (accuracy_score(y, y_hat)*100, int(t/60), t - 60*int(t/60))
            t = time()
            y_test_hat = model.predict(x_test)
            t = time() - t
            print 'SVM测试集准确率:%.3f%%,耗时%d分钟%.3f秒' % (accuracy_score(y_test, y_test_hat)*100, int(t/60), t - 60*int(t/60))
            save_result(model)
        elif classifier_type == 'RF':
            rfc = RandomForestClassifier(100, criterion='gini', min_samples_split=2,
                                         min_impurity_split=1e-10, bootstrap=True, oob_score=True)
            print '随机森林开始训练...'
            t = time()
            rfc.fit(x, y)
            t = time() - t
            print '随机森林训练结束,耗时%d分钟%.3f秒' % (int(t/60), t - 60*int(t/60))
            print 'OOB准确率:%.3f%%' % (rfc.oob_score_*100)
            t = time()
            y_hat = rfc.predict(x)
            t = time() - t
            print '随机森林训练集准确率:%.3f%%,预测耗时:%d秒' % (accuracy_score(y, y_hat)*100, t)
            t = time()
            y_test_hat = rfc.predict(x_test)
            t = time() - t
            print '随机森林测试集准确率:%.3f%%,预测耗时:%d秒' % (accuracy_score(y_test, y_test_hat)*100, t)
            save_result(rfc)
    
        err = (y_test != y_test_hat)
        err_images = images_test[err]
        err_y_hat = y_test_hat[err]
        err_y = y_test[err]
        print err_y_hat
        print err_y
        plt.figure(figsize=(10, 8), facecolor='w')
        for index, image in enumerate(err_images):
            if index >= 12:
                break
            plt.subplot(3, 4, index + 1)
            plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest')
            plt.title(u'错分为:%i,真实值:%i' % (err_y_hat[index], err_y[index]))
        plt.suptitle(u'数字图片手写体识别:分类器%s' % classifier_type, fontsize=18)
        plt.tight_layout(rect=(0, 0, 1, 0.95))
        plt.show()
    
    

    Iris数据集:

    #!/usr/bin/python
    # -*- coding:utf-8 -*-
    
    import numpy as np
    import pandas as pd
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    from sklearn import svm
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score
    
    
    # 'sepal length', 'sepal width', 'petal length', 'petal width'
    iris_feature = u'花萼长度', u'花萼宽度', u'花瓣长度', u'花瓣宽度'
    
    
    if __name__ == "__main__":
        path = 'iris.data'  # 数据文件路径
        data = pd.read_csv(path, header=None)
        x, y = data[range(4)], data[4]
        y = pd.Categorical(y).codes
        x = x[[0, 1]]
        x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=1, train_size=0.6)
    
        # 分类器
        clf = svm.SVC(C=0.1, kernel='linear', decision_function_shape='ovr')
        # clf = svm.SVC(C=0.8, kernel='rbf', gamma=20, decision_function_shape='ovr')
        clf.fit(x_train, y_train.ravel())
    
        # 准确率
        print clf.score(x_train, y_train)  # 精度
        print '训练集准确率:', accuracy_score(y_train, clf.predict(x_train))
        print clf.score(x_test, y_test)
        print '测试集准确率:', accuracy_score(y_test, clf.predict(x_test))
    
        # decision_function
        print 'decision_function:\n', clf.decision_function(x_train)
        print '\npredict:\n', clf.predict(x_train)
    
        # 画图
        x1_min, x2_min = x.min()
        x1_max, x2_max = x.max()
        x1, x2 = np.mgrid[x1_min:x1_max:500j, x2_min:x2_max:500j]  # 生成网格采样点
        grid_test = np.stack((x1.flat, x2.flat), axis=1)  # 测试点
        # print 'grid_test = \n', grid_test
        # Z = clf.decision_function(grid_test)    # 样本到决策面的距离
        # print Z
        grid_hat = clf.predict(grid_test)       # 预测分类值
        grid_hat = grid_hat.reshape(x1.shape)  # 使之与输入的形状相同
        mpl.rcParams['font.sans-serif'] = [u'SimHei']
        mpl.rcParams['axes.unicode_minus'] = False
    
        cm_light = mpl.colors.ListedColormap(['#A0FFA0', '#FFA0A0', '#A0A0FF'])
        cm_dark = mpl.colors.ListedColormap(['g', 'r', 'b'])
        plt.figure(facecolor='w')
        plt.pcolormesh(x1, x2, grid_hat, cmap=cm_light)
        plt.scatter(x[0], x[1], c=y, edgecolors='k', s=50, cmap=cm_dark)      # 样本
        plt.scatter(x_test[0], x_test[1], s=120, facecolors='none', zorder=10)     # 圈中测试集样本
        plt.xlabel(iris_feature[0], fontsize=13)
        plt.ylabel(iris_feature[1], fontsize=13)
        plt.xlim(x1_min, x1_max)
        plt.ylim(x2_min, x2_max)
        plt.title(u'鸢尾花SVM二特征分类', fontsize=16)
        plt.grid(b=True, ls=':')
        plt.tight_layout(pad=1.5)
        plt.show()
    
    

    参考资料:

    • 西瓜书
    • 统计学习方法第二版_李航
    • https://www.bilibili.com/video/BV1Tb411H7uC
    展开全文
  • 矩阵的轶是把一个矩阵分为向量组和列向量组,这两个向量组的轶分别称为行轶和列轶.可以证明的是行轶和列轶相等,这就是矩阵的轶. 这里提醒一下就是: n-r为线性无关的解向量的个数,而r为极大无关组的个数 n-r也为基础...
    1

    向量组的轶指的是极大线性无关组中向量的个数
    矩阵的轶是把一个矩阵分为行向量组和列向量组,这两个向量组的轶分别称为行轶和列轶.可以证明的是行轶和列轶相等,这就是矩阵的轶.

    这里提醒一下就是:
    n-r为线性无关的解向量的个数,而r为极大无关组的个数
    n-r也为基础解析向量的个数。

    2

    一个矩阵的所有列向量,代表了所需要的维度;
    一个矩阵的所有行向量,代表了所能提供的维度。
    这里会有三种情况:
    1.所提供的维度小于所需要的维度,那么有几个列向量是不能表示出来的;造成了行秩等于列秩,也就是等于列秩本可以达到所需的维度,但是提供的维度达不到。
    2.所提供的维度大于所需要的维度,那么提供的维度,完全可以表示出需要的维度。造成了列秩等于行秩,也就是再多需要几个维度仍然能够被表达出来。

    对于矩阵的值
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 关于位向量的笔记

    2014-05-16 12:27:00
    在《编程珠玑》中提到一个用位向量解决排序的问题,其具体的要求如下: 输入:一个包含最多n个整数的文件,每...基本的思路是这样的:用n个位表示0-n之间的整数,其中位的状态分为0和1两,0表示这个整数没有出现...
  • 范数分为向量范数和矩阵范数,具体定义如下:一、向量范数:1-范数: ,即向量元素绝对值之和,matlab调用函数norm(x, 1) 。2-范数:,Euclid范数(欧几里得范数,常用计算向量长度),即向量元素绝对值的平方和再...
  • 问题及简单算法 本章引入的问题来自一维的模式识别,问题的输入是具有n个浮点数的向量x,输出是输入向量的任何连续子向量中的最大和。  例如,如果输入向量包含以下 N = 10 个元素:  ...该问题分为以下几种情况:
  • 旋转矩阵有以下两方式得到。 物体在三维空间中的旋转,可以被分为解为在直接坐标系下,分别先后围绕x,y,z坐标轴旋转得到。旋转的角度也就是我们常听到的角度roll,pitch,yew。如果已知这个角度,就可以直接通过...
  • 前言:pytorch中有个非常容易搞混淆的函数,它们是softmax和log_softmax,CrossEntropyLoss()和NLLLoss(),为了更加彻底的弄清楚,本文将分为两篇文章来说明,第一篇说明原理,第二篇说明用法。 一、二分类损失...
  • 网络分为四个部分:区域划分、特征提取、区域分类、边框回归 区域划分:使用selective search算法画出2k个左右候选框,送入CNN 特征提取:使用imagenet上训练好的模型,进行finetune 区域分类:从头训练一个SVM分类...
  • 具体有以下几种,节点的计算都在Compute Shader里进行。样条曲线分为样条插值和样条逼近,样条插值经过控制点,而样条逼近则不一定经过。Catmull-Rom样条插值方法,厄尔密样条(Hermite spline)的一种,因为在论文....
  • 矩阵的使用与操作

    千次阅读 2013-11-12 14:18:36
    矩阵和图像的使用与操作是掌握OpenCV(C语言版)的基本...对矩阵和向量的操作分为几种类型.即:矩阵与矩阵之间的操作,矩阵元素之间的操作,向量乘法操作,单个矩阵操作,非齐次线性系统的求解操作,对称矩阵操作和奇齐
  • GPU编程中的常用数学函数

    千次阅读 2015-09-09 19:38:49
    在GPU编程中,函数一般分为以下几种类型:数学函数、几何函数、纹理映射函数、偏导数函数、调试函数等。熟练利用好GPU自带函数,可以在一定程度上提高并行编程速度与效率。 数学函数(Mathematical Functions) 数学...
  • 在GPU编程中,函数一般分为以下几种类型:数学函数、几何函数、纹理映射函数、偏导数函数、调试函数等。熟练利用好GPU自带函数,可以在一定程度上提高并行编程速度与效率。 在上一部分已经介绍了数学函数, 数学函数...
  • 向量几种典型应用: 把这些对词语理解的向量通过特定方法组合起来,就可以有对某句话的理解了; 可以在向量空间中找寻同义词,因为同义词表达的意思相近,往往在空间中距离也非常近; 词语的距离换算。 1.1 词...
  • )在过去的十年中记录了繁荣的生产,其主要生产区位于热带地区,能够满足最佳的生物物理条件。 投资者和地理空间从业人员对最佳的生长和收获条件越来越感兴趣。 可以这么说,本文的目的是通过最佳方法组合来选择...
  • spark之MLlib梗概

    2019-03-19 10:41:32
    机器学习问题分为几种,包括分类,回归,聚类,每种都有不一样的目标。 一、MLlib包含一些特有的数据类型,它们位于org.apache.spark.mllib包。 Vector:一个数学向量。MLlib既支持稠密向量也支持稀疏向量,前者...
  • LBP算子可分为以下几种: 1.基本LBP算子,通常是指灰度不变LBP,即gray scale invariant LBP,8邻域情况下共有256种输出,即特征向量有256种取值可能性 2.旋转不变LBP算子:rotation invariant LBP,8邻域情况下共有...
  • 本周课程介绍了矩阵(Matrix),主要有以下点内容: ...对于矩阵与向量的乘法运算,可以分为:矩阵向量相乘和向量矩阵相乘,而每一又有两定义:线性组合和点乘。当然要进行合法运算,还需要两
  •  在机器学习中我们经常看到在损失函数后会有一个正则化项,正则化项一般分为L1正则化和L2正则化,可以看做是损失函数的惩罚项。惩罚项的作用我认为就是对模型中的参数限制,从而防止过拟合。 L1正则化就是参数...
  • 大数据集的SVM训练方法

    千次阅读 2016-03-06 20:50:41
    也就是说数据是分为几个部分的,但是支持向量是全局支持向量二:背景介绍当面对训练数据集特别大的情况,有两方法:1.减小特征向量的维度 如SVD,PCA,ICA(Independent component analysis),CFS(correlation ...
  • NG机器学习笔记2

    2018-06-13 21:40:00
    第三章·斯坦福教授给你上数学课 ...思路不太一样,NG喜欢把它分为几向量来相乘 是有原因的,以为内这样可以当作同时计算多个函数 在一次矩阵运算内,把三个假设函数,应用到了四个房子中,做了12假设。 ...
  • 机器学习 ...分类方法可以分为以下几种 k-近邻(K-NN) 贝叶斯 神经网络 逻辑(logistic) 判别分析 支持向量机 决策树 聚类方法可以分为以下几种 k-means 层次聚类 神经网络 高斯混合 模糊C均值 K
  • 文本表示

    千次阅读 2019-02-18 14:50:52
    文本表示 文本表示,简单的说就是不将文本视为字符串,而视为在数学上处理起来更为方便的向量。而怎么把字符串变为向量,就是文本表示的核心问题。 文本表示的好处是什么?...文本表示分为几种呢?(基于类型...
  • 这些天一直在研究不同模型训练词向量的问题,使用了四种模型,以下是我对这几种模型的粗浅的理解,有错的地方欢迎留言指导交流。 1.Word2vec Word2Vec 的基本思想是把自然语言中的每一个词,表示成一个统一意义...
  • 补码非的位级表示

    千次阅读 2012-06-24 09:37:38
    计算一个位级表示的值的补码非有几种聪明的办法。这些技术很有用,同时它们也能够使我们更了解补码表示的本质。  行位级补码非得第一种计算方法是对每一位求补,在对结果加1。在 C 语言中,可以确定,对于任意整数...
  • 本文测试的Spark版本是1.3.1 在使用Spark的机器学习算法库之前,需要先了解Mllib中个基础的概念和专门用于机器学习的数据...Vector分为,分别是密集型和稀疏型 创建方式如下: val array:Array[Double]...
  • 垃圾邮件分析是一个用来快速了解MLlib的例子。这个程序用了两个函数:HashingTF与LogisticRegressionWithSGD,前者从文本数据构建词频(termfrequency)特征向量,后者使用...机器学习问题分为几种,包括分类、回...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 153
精华内容 61
关键字:

向量分为几种