精华内容
下载资源
问答
  • 1. 我们经常看到机器学习教材中写道:x = [1, 3],然后在计算的时候把它当作向量,难道仅仅就是随随便便这样定义的吗?当然不是的。请看第二条的解释。 2. 机器学习经常用到的一个库numpy,在里面定义张量的...

    1. 我们经常看到机器学习教材中写道:x = [1, 3],然后在计算的时候把它当作是列向量,难道仅仅就是随随便便这样定义的吗?当然不是的。请看第二条的解释。

    2. 机器学习经常用到的一个库numpy,在里面定义张量的时候是这样的,x = [[1, 2], [3, 4]] = \begin{bmatrix} \begin{bmatrix} 1, & 2 \end{bmatrix},\\ \begin{bmatrix} 3, & 4\end{bmatrix}\end{bmatrix},这可以看作是一个2x2的矩阵,然后y = [1, 3] = \begin{bmatrix} 1,\\ 3 \end{bmatrix},这个在numpy中看作是2x1的张量,也就是我们看到的x1矩阵所以可以看到x = [1, 3]在计算的时候,把它当作是2x`矩阵了,也就是我们所以为的列向量。

    展开全文
  • 下面我们正式开始学习 一切从向量开始什么是向量,究竟为什么引⼊向量?从研究一个数,变成了研究一组数,向量表示的就是一组数学过中学物理都知道力,速度,加速度等等,既有大小又有方向,在物理学和工程学中,...

    ed59513f56b330b985723743b8604dbd.png

    上一篇已经说明了为什么要学习线性代数?

    93a6d2d03d4fb23bb85d3aa3b54bff88.png

    65c0799b1c35b3b2f974cc2cc3537912.png

    下面我们正式开始学习

    一切从向量开始

    • 什么是向量,究竟为什么引⼊向量?

    从研究一个数,变成了研究一组数,向量表示的就是一组数

    91cefc80669207e4d64c188679ec76df.png

    学过中学物理都知道力,速度,加速度等等,既有大小又有方向,在物理学和工程学中,几何向量更常被称为矢量。许多物理量都是矢量,比如一个物体的位移,球撞向墙而对其施加的力等等。与之相对的是标量,只有大小而没有方向的量。一些与向量有关的定义亦与物理概念有密切的联系,例如向量势对应于物理中的势能。

    d8b4549ebffc9241885a807071f7a483.png

    5517dbd7b8e10dadcd0e9a6bc3da34b6.png

    c854d536d4686b5ce0c54d88dcbfee1e.png

    现实生活中3维是我们人类能够感受到的,但是大于3维我们是不能够直观感受的,但是可以用抽象的n维向量来刻画

    我们在刻画一个事情的时候,经常都是从不同的角度来刻画,这里的不同的角度其实用向量来表示的话就是不同的维度,比如下面房屋的例子:

    c9e794ec42742aa7bc475ab094647539.png

    使用两个视角来看待:

    1.方向和大小

    bcaeacc6bf2372a3cdd9e13c9f17f92d.png

    2.不是方向,仅仅是一组数字

    9109cdd1c0d85853b4da88e7cf42b7d5.png

    两个视⻆看似不同,但可以互相转换

    e046fc30ea4352a577cf11aa6bf64581.png

    ce4585f353c6c04a2d46787c09d65897.png

    向量的更多术语和表示法

    在数学中,向量(也称为欧几里得向量、几何向量、矢量),指具有大小(magnitude)和方向的量。它可以形象化地表示为带箭头的线段。箭头所指:代表向量的方向;线段长度:代表向量的大小。与向量对应的量叫做数量(物理学中称标量),数量(或标量)只有大小,没有方向。

    c84b8e08d83dd2fbefc110fc4641210d.png

    6c035a719310b2a1d27231837d7d65e7.png

    使用Python来实现我们自己的向量:

    class Vector:
        #构造方法,传进来的是一个lst数组
        def __init__(self,lst):
            self._values=lst
    
        #供系统调用的魔法方法
        def __repr__(self):
            return "Vector({})".format(self._values)
    
        #相当于Java的toString方法,用户调用
        def __str__(self):
            return "({})".format(",".join(str(e) for e in self._values))
    
        #返回向量的维度
        def __len__(self):
            """返回向量长度(有多少个元素)"""
            return len(self._values)
    
        #返回向量中第第index元素
        def __getitem__(self, index):
            """取向量的第index个元素"""
            return self._values[index]

    测试代码:

    from playLA.Vector import Vector
    
    if __name__ == "__main__":
        vec = Vector([5, 2])
        print(vec)
        print(len(vec))
        print("vec[0] = {}, vec[1] = {}".format(vec[0], vec[1]))

    效果:

    a852be7d9f123589da677cf040f0842e.png
    展开全文
  • 第一个值似乎合理的,但后来它跳到了数百万,我不知道为什么。老实说,我不太确定该怎么做,现在就试试看。我似乎在网上找不到任何信息,如果有此类问题的例子,我可以使用一些帮助或链接。任何信息都将非常感谢...

    我正在尝试解决,ode涉及向量,不能得出一个可行的答案。所以我把它分成6个分量,一个是分量的时间导数,一个是速度分量的时间导数。第一个值似乎是合理的,但后来它跳到了数百万,我不知道为什么。老实说,我不太确定该怎么做,现在就试试看。我似乎在网上找不到任何信息,如果有此类问题的例子,我可以使用一些帮助或链接。任何信息都将是非常感谢如何得到这一点来解决颂歌。在def dr_dt(y, t):

    """Integration of the governing vector differential equation.

    d2r_dt2 = -(mu/R^3)*r with d2r_dt2 and r as vecotrs.

    Initial position and velocity are given.

    y[0:2] = position components

    y[3:] = velocity components"""

    G = 6.672*(10**-11)

    M = 5.972*(10**24)

    mu = G*M

    r = np.sqrt(y[0]**2 + y[1]**2 + y[2]**2)

    dy0 = y[3]

    dy1 = y[4]

    dy2 = y[5]

    dy3 = -(mu / (r**3)) * y[0]

    dy4 = -(mu / (r**3)) * y[1]

    dy5 = -(mu / (r**3)) * y[2]

    return [dy0, dy3, dy1, dy4, dy2, dy5]

    在这个问题解决后,我想把它画出来。它应该是一个椭圆,但说实话,我也不太清楚该怎么做。我在想,把这个位置的大小,然后用时间来规划它。如果有更好的方法,请随时告诉我。在

    谢谢。在

    展开全文
  • 我们说的SVM是什么

    2019-11-05 10:32:14
    我们说的SVM是什么 前言 SVM,即“支持向量机”,是有监督的学习模型。在机器学习中应用十分广泛。我们可以利用SVM做文本分类、图像分类以及序列分析等等。那么,接下来我们就介绍这个SVM究竟是什么? 一天,...

    我们常说的SVM是什么

    前言
    SVM,即“支持向量机”,是有监督的学习模型。在机器学习中应用十分广泛。我们可以利用SVM做文本分类、图像分类以及序列分析等等。那么,接下来我们就介绍这个SVM究竟是什么?
    一天,老师和我说,桌上有两种颜色的球,要我用一条线去分开它们。
    在这里插入图片描述
    所以,我就画了一根线在这里。
    那么,问题来了。当球的数量变得越来越多的时候,我就好像不能够单单用一根线就完全分开这些球,是吧?
    为了解决这种问题,SVM就横空出世了。SVM实际上就是找到一个最佳分隔线、分隔面这样的一个界限,使得两边的样本都离这个界面足够远。当距离足够远的情况下,就可以进行分类了:假设位于界限左侧的为A类,那么位于另一侧的则为B类。可以很好地区分开来。
    在这里插入图片描述
    那么,如果是这样的摆放位置呢?我们似乎就无法画一条直线来区分开来。取而代之的是利用一根曲线来分隔。
    同理,当球的数量越多,并且摆放位置越来越没有规律时,应该怎么解决呢?
    后来,老师就用力地拍了一下桌子,这些球就腾飞到空中。如果足够厉害,就可以发现在垂直方向,也有一个平面可以将这些球完美地切分开。

    那么,简单的SVM介绍就到这里了。下面就仔细介绍SVM的原理与实现。

    SVM原理

    支持向量机的定义在于为在特征空间上做一个间隔最大的线性分类器,使不同类别之间的间隔最大化。
    如果用x表示样本数据,y表示数据的类别,那么这个线性分类器就可以在n维的数据空间中找到一个超平面。这个超平面可以用这个方程表示:
    在这里插入图片描述
    这个超平面可以用f(x)表示,当f(x) 等于0的时候,x便是位于超平面上的点,而f(x)大于0的点对应 y=1 的数据点,f(x)小于0的点对应y=-1的点。
    在这里插入图片描述

    SVM中的间隔距离

    当我们确定超平面的时候,|wx+b|能够表示点x到距离超平面的远近,并且可以通过观察这个表达式的符号与y标记的是否一致(因为我们一般用作二分类问题,所以y要么为1,要么为0)。

    函数间隔

    在SVM中,我们引入了一个概念,函数间隔:(y(w*x+b))。其中 x 是函数变量;w 是法向量。法向量这里指的是垂直于平面的直线所表示的向量,它决定了超平面的方向。
    即,我们用这个正负性来判定分类正确与否。但是这样定义的函数间隔有问题,即如果成比例的改变w和b(如将它们改成2w和2b),则函数间隔的值f(x)却变成了原来的2倍(虽然此时超平面没有改变),所以只有函数间隔还远远不够。

    几何间隔

    在实际应用中,我们会对法向量w作一定的约束,从而得出真正的从点到超平面的距离----几何间隔。
    假定对于一个点 x ,令其垂直投影到超平面上的对应点为 x0 ,w 是垂直于超平面的一个向量,γ\gamma为样本x到超平面的距离,
    在这里插入图片描述
    所谓的几何间隔也叫欧式距离,通过求解这个欧式距离来获得最小值,也就是数据到超平面的最短距离。
    在这里插入图片描述

    最大间隔分类器

    我们知道,当进行分类时,当置信度越高,分类就越准确。因此,当超平面离数据点的间隔越大时,分类结果的置信度也就越高。因此,为了获得更高的置信度,我们也要让这个超平面最大化这个间隔。

    **通过由上面的分析可知:人为定义的函数间隔不适合用来最大化间隔值,因为在超平面固定以后,可以等比例地缩放w的长度和b的值,这样可以使得函数间隔在超平面保持不变的情况下被取得任意大。但几何间隔因为除上了w,使得在缩放w和b的时候几何间隔的值是不会改变的,它只随着超平面的变动而变动,因此,这是更加合适的一个间隔。换言之,这里要找的最大间隔分类超平面中的“间隔”指的是几何间隔。

    在这里插入图片描述
    如上图,那么哪一条直线是比较好的分类器呢?很显然,图线B比较靠近蓝色球,但是如果球的数量增多,蓝色的球可能会出现在B的右侧,被判断为红色球。同理A在真实环境下也有可能发生误识别。因此直线C算是一个比较好的划分。
    在高维空间中,我们假定C为一个决策面,也就是我们上面说的分类间隔。我们可以移动C,使之产生一个极限的距离,在这个距离上,可以很好地判断两个类别。但是如果越过了这个位置,就会产生错误。也就是说,在这个距离上的决策面C是一个最优解,也是我们上述所说的最大分类间隔。

    损失函数

    在机器学习中,我们一般需要最小化损失函数,根据损失函数来衡量模型的好坏。一般的来说,需要最小化损失函数,以获得最优解。SVM采用的是Hinge Loss来求得最大间隔,即最优解。SVM 求解使通过建立二次规划原始问题,引入拉格朗日乘子法,然后转换成对偶的形式去求解,通过求解与问题等价的对偶问题,再获得原来问题的最优解,这是一种理论非常充实的解法。

    那么解释一下什么是对偶?在凸优化中,任何一个求极大化的线性规划问题都有一个求极小化的线性规划问题与之对应,这就是对偶问题。

    核函数

    一般来说,线性分类器,计算复杂度度低,解释性好,但是线性分类器的缺电在于它的拟合程度弱。
    而非线性分类器拟合程度更强,泛化能力更好,但是又容易出现过拟合的现象,除此之外,计算的复杂度也是个问题。
    在实际的问题中,大部分问题都不是线性可分的,也就是说满足指定条件的超平面根本不存在。那么,对于非线性的情况,SVM又是怎么处理的呢?
    SVM是通过一个核函数,通过这么一个核函数将数据映射到高维空间,来解决在原始空间中的线性不可分问题。**核函数的优点在于即使将数据变换到了高维空间,可是它的计算是发生在低维空间中的。也就是说,避免了高维空间中的复杂计算,而只是将分类的结果映射到了高维的空间。**我们经常提到的核函数有多项式核函数(参数较多,计算量大)、高斯核函数(参数数量比多项式核函数少,但是性能不错)、线性核函数(计算量少,但不能处理线性不可分问题)。

    核函数的选择

    那么应该如何选择核函数呢?
    1.如果特征数量小,并且样本的数量正常,我们就可以使用高斯核函数;
    2.如果特征数量大,和样本数量差不多,即差不多是一比一的关系。那么就是用线性核函数;
    3.如果特征数量小,而样本数量比特征数大很多,我们就需要手动添加若干特征,使之变成上述情况。
    4.SVM中默认的核函数是高斯核函数,rbf。

    核函数的本质是两个函数的內积,通过核函数将其隐射到高维空间,在高维空间非线性问题转化为线性问题, SVM得到超平面是高维空间的线性分类平面。其分类结果也视为低维空间的非线性分类结果, 因而带核的SVM就能分类非线性问题。

    松弛变量

    在SVM中,我们难免会遇到与预测相差很大的结果,这时就用到松弛变量了。运用这个松弛变量可以看做是“包容地接受”这么一个噪点。使这一个离群点不会使超平面发生移动、间隔缩小。通过改变松弛变量也就是对模型敏感性地调整。
    在这里,我们又引入了硬间隔和软间隔的概念
    硬间隔指的就是完全分类准确,不能存在分类错误的情况。软间隔,就是允许一定量的样本分类错误。
    1.在完全线性可分的情况下,我们可以使用硬间隔,因为可以获得一个理想的分类器,但是实际中往往做不到。
    2.在大部分的线性可分条件下,我们可以引入软间隔,允许出现一定的样本分类错误。
    3.到了线性不可分的情况下,我们就要引入核函数。将原本的样本空间通过核函数映射到高维空间中,以获得一个最优解,从而实现线性可分。

    惩罚系数

    与松弛变量相对应的是惩罚系数C。惩罚系数是指对分类错误的惩罚程度,当C越大时,分类器效果越好,但是容易出现过拟合,泛化能力变差。相反,当C越小时,泛化能力会增强但是准确性就会稍微降低。

    实战

    from sklearn import svm
    from sklearn.datasets import make_blobs
    import matplotlib.pyplot as plt
    import numpy as np
    
    
    def plot_hyperplane(clf, X, y, 
                        h=0.02, 
                        draw_sv=True, 
                        title='hyperplan'):
        # create a mesh to plot in
        x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
        y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
        xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
                             np.arange(y_min, y_max, h))
    
        plt.title(title)
        plt.xlim(xx.min(), xx.max())
        plt.ylim(yy.min(), yy.max())
        plt.xticks(())
        plt.yticks(())
    
        Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
        # Put the result into a color plot
        Z = Z.reshape(xx.shape)
        plt.contourf(xx, yy, Z, cmap='hot', alpha=0.5)
    
        markers = ['o', 's', '^']
        colors = ['b', 'r', 'c']
        labels = np.unique(y)
        for label in labels:
            plt.scatter(X[y==label][:, 0], 
                        X[y==label][:, 1], 
                        c=colors[label], 
                        marker=markers[label])
        if draw_sv:
            sv = clf.support_vectors_
            plt.scatter(sv[:, 0], sv[:, 1], c='y', marker='x')
    
    
    
    
    X, y = make_blobs(n_samples=100, centers=3, 
                      random_state=0, cluster_std=0.8)
    clf_linear = svm.SVC(C=1.0, kernel='linear')
    clf_poly = svm.SVC(C=1.0, kernel='poly', degree=3)
    clf_rbf = svm.SVC(C=1.0, kernel='rbf', gamma=0.5)
    clf_rbf2 = svm.SVC(C=1.0, kernel='rbf', gamma=0.1)
    
    
    plt.figure(figsize=(10, 10), dpi=144)
    
    
    clfs = [clf_linear, clf_poly, clf_rbf, clf_rbf2]
    titles = ['Linear Kernel', 
              'Polynomial Kernel with Degree=3', 
              'Gaussian Kernel with $\gamma=0.5$', 
              'Gaussian Kernel with $\gamma=0.1$']
    
    for clf, i in zip(clfs, range(len(clfs))):
        clf.fit(X, y)
        plt.subplot(2, 2, i+1)
        plot_hyperplane(clf, X, y, title=titles[i])
        
    

    最后的结果:
    在这里插入图片描述

    SVM 多分类器是集成算法么?

    SVM 算法最初是为二分类问题设计的,如果我们想要把 SVM 分类器用于多分类问题,常用的有一对一方法和一对多方法。集成学习的概念你这样理解:通过构造和使用多个分类器完成分类任务,也就是我们所说的博取众长。以上是 SVM 多分类器和集成算法的概念,关于 SVM 多分类器是否属于集成算法,我认为你需要这样理解。在 SVM 的多分类问题中,不论是采用一对一,还是一对多的方法,都会构造多个分类器,从这个角度来看确实在用集成学习的思想,通过这些分类器完成最后的学习任务。不过我们一般所说的集成学习,需要有两个基本条件:每个分类器的准确率要比随机分类的好,即准确率大于 50%;每个分类器应该尽量相互独立,这样才能博采众长,否则多个分类器一起工作,和单个分类器工作相差不大。所以你能看出,在集成学习中,虽然每个弱分类器性能不强,但都可以独立工作,完成整个分类任务。

    而在 SVM 多分类问题中,不论是一对一,还是一对多的方法,每次都在做一个二分类问题,并不能直接给出多分类的结果。此外,当我们谈集成学习的时候,通常会基于单个分类器之间是否存在依赖关系,进而分成 Boosting 或者 Bagging 方法。如果单个分类器存在较强的依赖关系,需要串行使用,也就是我们所说的 Boosting 方法。如果单个分类器之间不存在强依赖关系,可以并行工作,就是我们所说的 Bagging 或者随机森林方法(Bagging 的升级版)。所以,一个二分类器构造成多分类器是采用了集成学习的思路,不过在我们谈论集成学习的时候,通常指的是 Boosing 或者 Bagging 方法,因为需要每个分类器(弱分类器)都有分类的能力。

    以上内容如有错误,欢迎指出。谢谢!

    展开全文
  • 什么是“流”?在我接触过的各种数学体系中,对于运动和变化的描述,我感觉最为适合的有两种不同的perspective:流和变换群。前者以被作用的对象为中心,运动就是这个东西随时间变化的函数;后者以变换本身为中心,...
  • 向量的投影_6

    万次阅读 2019-03-02 18:01:02
    假设 b 是常向量 ,或者可以将 b 看做单词 basis,它就是基向量: 可以将b看做从原点出发,穿过原点线条l : 我们将开始学习 向量v 投影到 基向量b 的过程。如图: 投影的初入理解: ...
  • 支持向量机SVM的推导

    2020-06-03 17:51:58
    1、什么是支持向量机? 支持向量一种二分类模型,它的基本模型定义在特征空间上的间隔最大的线性分类器。 支持向量机的学习策略就是间隔最大化。 支持向量机学习方法包含的模型有:线性可分支持向量机、线性...
  • 支持向量机 支持向量机可用来做什么? 分类、回归(例如时间序列预测)、边界检测、聚类 ...什么是支持向量机?...SVM是一种可用于解决分类和回归问题的有监督机器学习算法,但更...支持向量是什么? 支持向...
  • 支持向量机(一)

    2015-06-18 09:45:00
    一、什么是支持向量机(SVM)? 1、支持向量机(Support Vector Machine,简称为SVM)一种监督式学习的方法,可广泛地应用于统计分类以及回归分析。支持向量机属于一般化线性分类器,这族分类器的特点他们能够...
  • 理解矩阵和特征向量的本质

    万次阅读 多人点赞 2013-11-07 20:09:41
    理解矩阵和特征向量的本质 原文地址 ...最近复习矩阵论中,又是一堆定理和证明突然发现学了这么时间的矩阵论、...特征值和特征向量的含义是什么?描述的是什么“特征”? 矩阵乘法的含义是什么? 相似变
  • 基于支持向量机的分类预测SVM工作原理解决什么...支持向量机(Support Vector Machine,SVM)一个非常优雅的算法,具有非常完善的数学理论,用于数据分类,也可以用于数据的回归预测中,由于其其优美的理论保证和利
  • 原文地址:word2vec中关于词向量的阐述作者:kaneLee在看word2vec...0. 词向量是什么  自然语言理解的问题要转化为机器学习的问题,第一步肯定是要找一种方法把这些符号数学化。  NLP 中最直观,也是到目前为止最
  • 1.什么是支持向量机(SVM) ...在机器学习领域,把一些算法看做一个机器,如分类机,而支持向量机本身便一种监督式学习的方法,它广泛的应用于统计分类以及回归分析中。  支持向量90年代中期发...
  • SVM(Support Verctor Machine)支持向量机,最拿来就是做分类。也就是说,如果我有一堆已经分好类的东西(可是分类的依据未知的),那当收到新的东西时,SVM可以预测新的数据要分到哪一堆去。支持向量机通过求得...
  • 支持向量机(Support Vector Machine,SVM)一个非常优雅的算法,具有非常完善的数学理论,用于数据分类,也可以用于数据的回归预测中,由于其优美的理论保证和利用核函数对于线性不可分问题的处理技巧, 在上...
  • 前言 这一章内容还是紧接着上一章的内容,在前面...Support Vector Machines(支持向量机) ,我们也简称为SVM,为什么要给大家介绍这个,首先这个算法在目前实际问题中运用很广泛,特别在对复杂的非线性问题...
  • 支持向量机(Support Vector Machine,SVM)非常经典的机器学习分类模型,被作为baseline与其他模型的分类效果做对比。本质上SVM与其他线性分类器(如LogisticRegression)一样,也通过训练模型拟合数据样本得到y...
  • SVM是什么 支持向量机(Support Vector Machine,SVM)是一个非常优雅的算法,具有非常完善的数学理论,用于数据分类,也可以用于数据的回归预测中,由于其优美的理论保证和利用核函数对于线性不可分问题的处理...
  • 一、什么是支持向量机(SVM)? 1、支持向量机(Support Vector Machine,简称为SVM)一种监督式学习的方法,可广泛地应用于统计分类以及回归分析。支持向量机属于一般化线性分类器,这族分类器的特点他们...
  • 微分方程(ODE)Hinton创建的向量学院的研究者提出了一类新的神经网络模型,神经常微分方程(Neural ODE),将神经网络与微分方程结合在一起,用ODE来做预测。不是逐层更新隐藏层,而是用神经网络来指定它们的...
  • SVM是什么? 先来看看维基百科上对SVM的定义: 支持向量机(英语:support vector machine,简称为SVM,又名支持向量网络)是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个...
  • 逻辑回归(LR)与支持向量机(SVM)的区别和联系1、为什么常比较这两个算法2、二者相同点3、二者不同点 1、为什么常比较这两个算法 (1)这两个算法基础算法,被使用。 (2)LR与SVM之间有很多相似点,因此...
  • 1.标准库类型vector标准库类型 vector表示对象的集合,里面对象的类型都相同,每个 对象都有一个对应的索引...using std::vector由于vector类模板,所以需要通过提供一些额外的信息来指定模板到底实例化成什么样的
  • 与cv相比,为什么NLP的发展相对缓慢 占坑 词的表示-首要的问题 词构成语言的最小单位,对自然语言的处理首要解决的问题就是:如何表示词。 基于SVD分解的办法 svd的介绍,可以参考: word-document matrix 对于...
  • 机器学习问问题集锦(持续更新中)

    千次阅读 2020-09-08 23:02:00
    天眼查 1、word2vec的词向量是怎么更新的? 2、word2vec的输入维度是什么样的? ...10、SVM的支持向量是什么? 11、GBDT是如何决策的? 12、GBDT如何决定特征的重要性? 13、GBDT有什么优点?

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 168
精华内容 67
关键字:

常向量是什么