精华内容
下载资源
问答
  • Python实现线性判别

    千次阅读 2017-12-19 23:57:32
    Python实现线性判别,参考周志华机器学习第三章 import numpy as np import matplotlib.pyplot as plt mat=np.loadtxt('gua.txt') X1=mat[0:8,1:3] #好瓜的数据 X0=mat[8:,1:3] #坏瓜的数据 mean1=np.mean(X1, ...

    Python实现线性判别,参考周志华机器学习第三章

     import numpy as np
    import matplotlib.pyplot as plt
    mat=np.loadtxt('gua.txt')
    X1=mat[0:8,1:3]        #好瓜的数据
    X0=mat[8:,1:3]         #坏瓜的数据
    mean1=np.mean(X1, axis=0)   #计算每一列的平均值
    mean0=np.mean(X0,axis=0)
    mean1=mean1.reshape(2,1)
    mean0=mean0.reshape(2,1)
    cov0 = np.cov(X0,rowvar=False)        #坏瓜协方差矩阵
    cov1 = np.cov(X1,rowvar=False)        #好瓜协方差矩阵
    Sw=cov0+cov1
    w=np.dot(Sw**(-1),mean1-mean0)
    print(w)
    plt.scatter(X0[:,0],X0[:,1],label='0')
    plt.scatter(X1[:,0],X1[:,1],label='1')
    plt.plot([0,1],[0,-w[0]/w[1]],label='y')
    plt.show()


    展开全文
  • 很多机器学习分类算法,比如支持向量机(SVM),的介绍都说了假设数据要是...现在的问题是,如何判断数据是线性可分的? 最简单的情况是数据向量是一维二维或者三维的,我们可以把图像画出来,直观上就能看出来。

    很多机器学习分类算法,比如支持向量机(SVM),的介绍都说了假设数据要是线性可分。

    如果数据不是线性可分的,我们就必须要采用一些特殊的方法,比如SVM的核技巧把数据转换到更高的维度上,在那个高维空间数据更可能是线性可分的(Cover定理)。


    现在的问题是,如何判断数据是线性可分的?

    最简单的情况是数据向量是一维二维或者三维的,我们可以把图像画出来,直观上就能看出来。

    比如Håvard Geithus网友的图,非常简单就看出两个类的情形下X和O是不是线性可分。


    但是数据向量维度一旦变得很高,我们怎么办?

    答案是检查凸包(convex hull)是否相交。


    什么是凸包呢?

    简单说凸包就是一个的闭合曲线(曲面),而且它刚好住了所有的数据。

    举个例子,下图的蓝色线就是一个恰好包住所有数据的闭合凸曲线。



    知道了什么是凸包,我们就能检查我们的数据是不是线性可分了。

    以二维的情况为例,如果我们的数据训练集有两类:M+和M-,

    当我们画出两个类的凸包,如果两者不重叠,那么两者线性可分,反之则不是线性可分。

    下图就是个线性可分的情况。


    虽然现在我们比直接看数据判断是不是线性可分进了一步,但是好像还是靠画出图来人眼判断,这对高维度数据依然无效。

    是这样么?当然不是。

    因为判断两个凸包是不是有重叠可以通过判断凸包M+的边和凸包M-的边是否相交来实现,这就无需把凸包画出来了。


    如何高效的找到一组数据的凸包?

    如何高效的判断两个凸包是否重合?

    网友Darren Engwirda 给出了很好的建议:

    简单说,他的建议就是用quickhull算法来 找到 数据的凸包,sweepline算法 判断 凸包边缘是否有相交,两个步骤的复杂度都是O(nlogn)。 其中quickhull已经在软件包qhull(http://www.qhull.org/)实现了。

    英文原话:There are efficient algorithms that can be used both to find the convex hull (the qhull algorithm is based on an O(nlog(n))quickhull approach I think), and to perform line-line intersection tests for a set of segments (sweepline at  O(nlog(n))), so overall it seems that an efficient O(nlog(n)) algorithm should be possible.

    This type of approach should also generalise to general k-way separation tests (where you have k groups of objects) by forming the convex hull and performing the intersection tests for each group.

    It should also work in higher dimensions, although the intersection tests would start to become more challenging...




    参考链接和图片来源:

    更数学的对凸包的定义:http://www.nanshan.edu.cn/lxy/shuxuejm/jiao%20cai/31%E7%AC%AC%E4%B8%89%E5%8D%81%E4%B8%80%E7%AB%A0%20%20%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA.pdf

    wikipedia对凸包的介绍:http://zh.wikipedia.org/wiki/%E5%87%B8%E5%8C%85

    Håvard GeithusDarren Engwirda(以及其他人)的问答:http://stackoverflow.com/questions/9779179/determine-whether-the-two-classes-are-linearly-separable-algorithmically-in-2d


    展开全文
  • 学过线性代数都知道,先求出秩,根据秩的大小与向量的阶数比较判断线性是否相关。求秩matlab用rank函数

    学过线性代数都知道,先求出秩,根据秩的大小与向量的阶数比较判断出线性是否相关。求秩matlab用rank函数

    rank函数格式

    rank(A)
    

    求下列矩阵判断是否线性相关并求出极大无关组

    在这里插入图片描述

    >> a1=[1 2 2 3]';
    >> a2=[1 4 -3 6]';
    >> a3=[-2 -6 1 -9]';
    >> a4 = [1 4 -1 7]';
    >> a5 = [4 8 2 9]';
    >> A=[a1,a2,a3,a4,a5];
    >> r=rank(A)
    
    r =
    
         3
    
    >> 
    

    然后根据线性代数学科中极大无关组定义将阶梯形矩阵求出来,从右边往做取就行了。
    化为阶梯形矩阵

    [R,j]=rref(A)
    A是矩阵
    R是简化后的阶梯形
    j是主元
    
    >> [R,j]=rref(A)
    
    R =
    
         1     0    -1     0     4
         0     1    -1     0     3
         0     0     0     1    -3
         0     0     0     0     0
    
    
    j =
    
         1     2     4
    
    >> A1=A(:,j)
    
    A1 =
    
         1     1     1
         2     4     4
         2    -3    -1
         3     6     7
    
    >> 
    

    然后从这里就会发现A1就是它的极大线性无关组。

    展开全文
  •  接下来是本节中最重要的时刻,应用激活函数Sigmoid函数进行非线性转换。   非线性转换 例如,TensorFlow的可视化图中,已经获得了输入层节点x1,x2的值,已经把权重和相应的值相乘,然后累加,现在是要设置隐藏层...

     

    (2)   隐藏层Hidden Layer的处理。

    例如,TensorFlow的可视化图中,输入层x1,x2接收所有的数据,汇聚起来然后在隐藏层的第一层的第一个神经元进行非线性的转换,第一个隐藏层接收的数据是输入层的数据,第二个隐藏层接收的是第一个隐藏层的数据……,在神经元节点进行非线性转换,本节中使用的是Sigmoid函数转换,非线性转换需处理什么内容?这里继续再进行一个循环,循环用于非线性转换的计算,这是非常核心的地方。之前还没有进行计算,只是将数据输入到输入层x1,x2,在隐藏层计算的节点不能为Bias节点,之前隐藏层获得不为Bias节点的方式是跳过了第一个Bias,这个是与我们自研盘古框架相关的。循环内部隐藏层所有的节点,先进行一个判断神经元节点不能是Bias,nodes[j].get_is_bias_unit()必须为False,同时,神经元节点的层次level必须大于0,只有在这种情况下,节点才可能处于隐藏层Hidden Layer,同时过滤掉了Bias的内容。

           接下来设置节点的值。循环遍历Weight。例如,TensorFlow的可视化图中,完成了输入层x1,x2的输入以后,如果要计算隐藏层的第一层的第一个神经元的所有Weight,这时涉及一个问题,当前处理的神经元节点是谁?必须把当前处理的神经元节点记录下来。读者如读过Pytorch的源码可能感觉理解比较轻松。要获得目标神经元最快的方式是通过节点的索引ID来获得,对所有节点遍历的时候获取index,获得当前Neuron的ID。例如,获得隐藏层的第一层的第一个神经元,要找所有和它相关的Weight,然后通过Weight找到它所有输入的数据来源。既有Weight,又有输入的数据来源,而输入的数据来源有值,如x1是0,x2是1,就可以进行线性变换和非线性变换的处理,for循环所有Weight,获取到达的目标是第一个隐藏层的第一个神经元。循环的目标是找出所有Weights的目的地,输入层和第一个隐藏层之间有很多Weights,如果Weight的目的地是第一个隐藏层的第一个神经元,这就是我们需要的。通过判断target_index== weights[k].get_to_index(),之前我们设置权重的时候设置目的地的ID(to_index()),例如,TensorFlow的可视化图中,对于第0个Weight,其Weight连接的2个节点是x1和第一个隐藏层的第一个神经元,x1的ID是它的from_index ,第一个隐藏层的第一个神经元是它的to_index()。第一个隐藏层的第一个神经元有2个连接Weights,2个Weights分别有自己的值,输入层的x1,x2也都有自己的值,x1的值是0,x2的值是1,如果Weight的to_index()和当前节点的ID是一样的,接下来是获取它们的值。

    第一步,首先获取weight本身的值value。第二步,weight权重有一个来源,例如第0个weight关联的节点是x1,x1的值是0,要获取x1的值,需先获得该Weight的来源的Neuron的ID。

    • 线性转换

    获得节点的ID以后,关键是获得这个ID的神经元节点的值,需再次循环遍历,获得该来源Neuron的Value。判断一下from_index 等于nodes[m].get_index()的索引,则获得该ID的Neuron,然后获得该Neuron的具体的Value。例如,TensorFlow的可视化图中,输入层的节点x1,x2,获取它们的值,要么获取0,要么获取1。从输入层的角度,获得第一层输入层的神经元的值,接下来将值进行相乘,设置一个全局变量target_neuron_input,初始值为0,接收上一个层次Layer中所有的和自己相关的神经元节点Neurons和权重Weights的乘积之和。例如,TensorFlow的可视化图中,输入层x1节点和隐藏层的第一个神经元之间的权重的值是0.46,x1节点的值是0,将0乘以0.46;输入层x2节点和隐藏层的第一个神经元之间的权重的值是-0.034,x2节点的值是1,将1乘以-0.034;然后进行累加0*0.46+1*(-0.034)=-0.034,把Weight和相应的Value相乘,然后累加。

    这样我们就完成了一个非常重要的步骤,即线性处理部分。

    如图1-25所示,将输入层的数据收集进来(输入层的第1个节点的值是1,第2个节点的值是0,第3个节点的值是1),获取权重及来源的值,然后将它们相乘进行累加。节点值及权重系数乘积的累加计算:(1*3+0*8+1*4)-1 =6。

    640?wx_fmt=png

                             

    1- 25权重计算

    回到ForwardPropagation.py代码,这里有个问题:如果找到了来源的神经元,并且获取了神经元的值,然后也知道权重的值,有没有必要循环下去,看其他的神经元?一个权重是一条边,一条边连接2个节点,一旦找到了来源节点,没必要再循环其他的节点,一个Weight只连接一个上一个层次Layer的Neuron,所以不需要继续循环整个神经网络的其它Neurons。因此在代码中进行break。

           接下来是本节中最重要的时刻,应用激活函数Sigmoid函数进行非线性转换。

     

    • 非线性转换

    例如,TensorFlow的可视化图中,已经获得了输入层节点x1,x2的值,已经把权重和相应的值相乘,然后累加,现在是要设置隐藏层的第一个神经元的值。设置一个变量target_neuron_output为经过非线性转换Non-Linearity后的输出,我们这里使用Sigmoid激活函数。

    接下来的代码编写,按Tab退格键到if语句下,非线性转换是对前面所有结果的计算,因此,接下来的代码不可能写在break语句下;再按Tab退格键,也不可能是前一个for循环下,因为这里只计算了一个节点的结果;继续按Tab退格键,也不可能是if语句下,因为if语句对应的是一个weight的边,以及源神经元节点的处理;再按一个Tab退格键,和上一个for循环语句对齐,这个时候获取了所有的数据。从和Break语句对齐出发,一共按了4次后退键,第1次和if语句对齐,第2次和for语句对齐,第3次和前一个if语句对齐,第4次和前一个for语句对齐,接下来是要应用Sigmoid激活函数对当前的Neuron的所有的输入累计后的值进行操作。

     

    如图1-26所示,对于Sigmoid函数我们将实现f(x) = 1/(1+                             ))公式,通过代码target_neuron_output= 1 / (1 + math.exp(- target_neuron_input))计算出值,就是神经元节点具体的值。接下来把输入值和当前Neuron采用Sigmoid Activation计算后的值设置进当前的Neuron。

    640?wx_fmt=png

    1- 26 Sigmoid激活函数

        


    展开全文
  • 《机器学习实战》学习笔记(一):机器学习基础

    万次阅读 多人点赞 2019-08-19 17:01:32
    机器学习算法涉及很多线性代数知识,因此在使用Python语言构造机器学习应用时,会经常使用NumPy函数库。如果不熟悉线性代数也不用着急,这里用到线性代数只是为了简化不同的数据点上执行的相同数学运算。将数据表示...
  • 第七章.线性相关系数的计算

    千次阅读 2019-11-23 15:32:42
    线性相关分析是用相关系数来表示两个变量间相互的线性关系,并判断其密切程度的统计方法。 为了下面编程方便起见,我们令X=身高,Y=体重。 > x=ug$height > y=ug$weight > par(mfrow=c(1,2)) > plot...
  • 线性相关线性无关与正交

    千次阅读 2018-03-09 14:38:11
    A1,A2,A3,…An若当且仅当k1=k2=k3=…Kn=0时k1*A1 + k2*A2 +k3*A3+…+KnAn = 0成立,则这三个向量是线性相关的有人要问,不是2点确定一条直线么,那么任意两点可以认为在一次函数y=kx+b上,所以任何2点都是线性相关的...
  • 如何区分线性与非线性

    千次阅读 2020-09-15 19:49:21
    首先,你要分清,你有问题的是线性函数与非线性函数,还是线性模型和非线性模型。 我在二刷机器学习的学习视频时,发现我没有理解视频中说的线性模型是什么? 线性函数与非线性函数概念区分 线性函数:是指量与量...
  • 线性相关线性趋势之类的算法

    千次阅读 2019-03-18 13:43:00
    线性相关 数据在一条直线附近波动,则变量间是线性相关线性相关 数据在一条曲线附近波动,则变量间是非线性相关 不相关 数据在图中没有显示任何关系,则不相关 平均值 N个数据 的平均值计算公式: ...
  • 相关保留字是:for…in和while,def用于定义函数 编程测试: turtle八边形绘制 :使用turtle库,绘制一个八边形 import turtle as t t . pensize ( 2 ) for i in range ( 8 ) : t . fd ( 100...
  • MATLAB函数速查手册

    千次阅读 多人点赞 2018-03-25 09:06:26
    《MATLAB函数速查手册》较全面地介绍了MATLAB的函数,主要包括MATLAB操作基础、矩阵及其基本运算、与数值计算相关的基本函数、符号运算的函数、概率统计函数、绘图与图形处理函数、MATLAB程序设计相关函数、Simulink...
  • 线性判别函数

    千次阅读 2015-12-01 16:10:57
    最近看到线性判别分析LDA,然后发现网上有少量的文章说线性判别函数和LDA很相似,当时就感觉虽然名字很像,但这完全是两个不相关的模型。所以就把这些东西详细地区别了一下。 一、线性判别函数 1、函数是对模式进行...
  • 在了解线性函数前,先来了解一下线性回归和逻辑回归的区别。线性回归为估值而生,逻辑回归而分类而生。比如我们根据根据一家企业的运营质量、盈利、运营时间等来对企业进行估值,这属于估值问题,如果存在线性关系,...
  • 1.线性相关,线性无关 在线性代数里,矢量空间的一组元素中,若没有矢量可用有限个其他矢量的线性组合所表示,则称为线性无关或线性独立(linearly independent),反之称为线性相关(linearly dependent)。 定义: 在...
  • 向量组的线性相关性

    千次阅读 2021-06-05 23:45:21
    向量组B向量无关R(B)=n+1,假若A线性相关那么R(A)R(A)+1 ②=>定理:m个n维向量组成的向量组B即n×m矩阵,如果n 笔:因为R(B)min{n,m}=n ③=>定理: 向量组A:线性无关,向量组B:线性相关,则 向量b必能由A线性表示...
  • 回归分析-线性相关强度

    千次阅读 2021-01-10 21:51:05
    回归分析-线性相关强度 什么是回归分析呢? 回归分析:通过建立模型来研究变量之间相互关系的密切程度、结构状态及进行模型预测的一种有效工具 这里,给出回归分析的结构图: 可以看出回归分析的内容实际上非常多。...
  • 前端面试题

    万次阅读 多人点赞 2019-08-08 11:49:01
    补充按钮事件的函数,确认用户是否退出当前页面,确认之后关闭窗? 69 写出简单描述html标签(不带属性的开始标签和结束标签)的正则表达式,并将以下字符串中的html标签去除掉 70 完成foo()函数的内容,要求能够...
  • js面试题

    千次阅读 多人点赞 2019-04-09 19:42:32
    JavaScript 对象是通过引用来传递的,当修改原型时,与之相关的对象也会继承这一改变 JavaScript 有几种类型的值?,你能画一下他们的内存图吗 原始数据类型(Undefined,Null,Boolean,Number、String)--...
  • 3广义线性模型 3.1 定义 3.2为什么引入GLM 3.3 连接函数的获取 4常见连接函数求解及对应回归 4.1伯努利分布 > Logistics回归 4.2多项分布 > softmax回归 4.2.1 softmax理解 4.2.2softmax多项分布解释 ...
  • (一)人脸识别技术之人脸识别过程及识别算法简介

    万次阅读 多人点赞 2018-11-04 23:19:40
    人脸检测(判断是否有人脸) 人脸检测是人脸识别的预处理,在图像中标定出人脸的位置和大小.人脸图像中包含的模式特征十分丰富,如直方图特征,颜色特征,模板特征,结构特征及哈尔特征(Haar-like feature)等.人脸检测是将...
  • 11种图像清晰度评价函数附MATLAB代码

    万次阅读 多人点赞 2019-06-17 13:33:22
    本科毕业论文是“基于图像处理的自动对焦技术研究”,对焦过程中的一个重要阶段是图像清晰度评价,博主自己用MATLAB实现了4类清晰度评价函数:基于图像梯度的清晰度评价函数、频域评价函数、信息熵评价函数、统计学...
  • 函数法求解非线性规划问题的思想是,利用问题中的约束条件做出适当的罚函数,由此构造出带参数的曾广目标函数,并把问题转化为无约束非线性规划问题。传统的罚函数法一般分为外部罚函数法和内部罚函数法。外部罚...
  • 在很多机器学习算法中,都会遇到最优化问题。因为我们机器学习算法,就是要在模型空间中...很多最优化问题都是在目标函数是凸函数或者凹函数的基础上进行的。原因很简单,凸函数的局部极小值就是其全局最小值,凹函数的
  • 相关函数与互相关函数

    千次阅读 2021-01-16 23:49:31
    相关函数是描述信号X(s),Y(t)(这两个信号可以是随机的,也可以是确定的)在任意两个不同时刻s、t的取值之间的相关程度。两个信号之间的相似性大小用相关系数来衡量。定义: 称为变量 X 和 Y 的相关系数。若...
  • C#基础教程-c#实例教程,适合初学者

    万次阅读 多人点赞 2016-08-22 11:13:24
    在C#语言中,同一个类中的函数,如果函数名相同,而参数类型或个数不同,认为是不同的函数,这叫函数重载。仅返回值不同,不能看作不同的函数。这样,可以在类定义中,定义多个构造函数,名字相同,参数类型或个数...
  • 机器学习算法 综述(入门)

    万次阅读 多人点赞 2019-06-16 21:59:28
    学习了一个学期机器学习算法,从什么都不懂到对...2.线性回归 3.逻辑回归 4.支持向量机SVM 5.朴素贝叶斯 1.决策树 这个监督式学习算法通常被用于分类问题。它同时适用于分类变量和连续因变量。在这个算法中...
  • 当神经网络不是一层的时候,就需要对每一层的输出加一个激活函数,将输出进行非线性的映射,否则不论网络有多少层,线性的变换永远可以视为一次线性的变换,不能解决复杂问题 激活函数 看神经网络中的一个神经元,...
  • 基于MATLAB的语音信号处理

    万次阅读 多人点赞 2018-07-15 01:21:20
    本文通过应用MATLAB对语音信号进行处理仿真,包括短时能量分析、短时自相关分析等特性分析,以及语音合成等。 关键词: 语音信号;MATLAB;特性分析;语音合成 引言  人类交换信息最方便的、最快捷的一种方式是语言...
  • 1.1 皮尔逊相关系数1.1.1 简介是一种度量两个变量间线性相关程度的方法。协方差作为描述X和Y相关程度的量,在同一物理量纲之下有一定的作用,但同样的两个量采用不同的量纲使它们的协方差在数值上表现出很大的差异。...
  • PointNet学习笔记(一)—— 论文

    千次阅读 多人点赞 2018-10-10 16:40:48
    Cybenko, 1989) 表明,一个前馈神经网络如果具有线性输出层和至少一层具有任何一种‘‘挤压’’ 性质的激活函数(例如logistic sigmoid激活函数)的隐藏层,只要给予网络足够数量的隐藏单元,它可以以任意的精度来...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 76,000
精华内容 30,400
关键字:

判断函数是否线性相关