tensorflow二值分类器实现(支持向量机多类分类方法及特点)
本文目录
支持向量机多类分类方法及特点
支持向量机是针对两类分类问题提出的,而在实际应用中多类分类问题更为普遍。如何将支持向量机的优良性能推广到多类分类一直是支持向量机研究中的重要内容,其对于类别数目较多的分类问题,目前仍缺乏有效的支持向量机多类分类方法。多类分类是机器学习领域中的重要问题,它的应用在现实生活中非常普遍,多类分类问题是对两类分类问题的推广。目前,支持向量机多类分类的方法主要包括两种:一是将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题实现多类分类;二是将多类分类问题分解成多个两类分类问题,然后再采用某种方法将多个两类分类器的输出组合在一起实现多类分类。下面对这些方法进行介绍:
1)1− a − r 方法
对于k 类多类分类问题,1− a − r 方法需要构造k 个将其中一个类别与其它所有类别区分开的两类支持向量机分类器。分类时将未知样本分到具有最大分类决策函数值的类别中,即采用“最大输出法”将多个两类分类器的输出组合在一起实现多类分类。1− a − r 方法的分类示意图如图 4-2 所示,图中“·” 、“• ”和“★”分别代表三个不同的类别。
1− a − r 方法因简单易于实现而得到了广泛的应用,但是,它也存在许多缺点,这些缺点主要包括:(1)存在不可识别区域。如图 4-2 所示,区域“·” 、“• ”和“★” 为1− a − r 方法的可识别域,而“A” 、“B” 、“C” 、“D”区域是不可识别区域,它们的类型是未知的;(2)1− a − r 方法的每个支持向量机都是在全部训练样本上训练而成的,训练样本的重复训练率高,样本数目较多时,训练速度慢;(3)1− a − r 方法分类时需要计算每一个支持向量机分类器的决策函数值,分类的效率不高;(4)1− a − r 方法各个支持向量机的正例样本数目远远少于反例样本数目,而标准支持向量机分类时倾向于反例,使得所关注的正例的分类错误率反而较高。
2) 树型支持向量机多类分类方法
如图 4-3 所示,树型支持向量机的基本思想是从根节点开始,采用某种方法将该节点所包含的类别划分为两个子类,然后再对两个子类进一步划分,如此循环,直到子类中只包含一个类别为止。这样,就得到了一个倒立的二叉树。最后,在二叉树各决策节点训练支持向量机分类器,实现对待识别样本的分类。树型支持向量机多类分类方法的主要优点是需要训练的支持向量机数目和各支持向量机的训练样本数目都较少,并且分类时也不必遍历所有的支持向量机分类器,具有较高的训练速度和分类速度,对于类别数目多的分类问题,它的优势更为明显。
3)决策树支持向量机多分类器
分类问题(N 》 2) 和二分类问题之间存在一定的对应关系:如果一个分类问题 N类可分,则这 N 类中的任何两类间一定可分;反之,在一个 N 分类问题中,如果我们己知其任意两两可分,则通过一定的组合法则,我们可由两两可分来最终实现 N 类可分。由于数型支持向量机在多分类问题的优越性,有学者将支持向量机和二叉决策树的基本思想结合起来构成多类别的分类器,称为 SVM 决策树方法。由二叉树的性质可知:对任何一棵二叉树,如果其叶子结点个数为 N0 ,度为 2 的结点个数为 N2 ,则有N0 = N2 +1而 SVM 决策树中没有度为 1 的结点,是一棵正则二叉树。设对 N 类样本构造一棵二叉决策树,则树的每个叶子结点对应一个类别,每个度为 2 的非叶子结点对应一个子 SVM 分类器。决策树共有2N −1个结点,叶子结点个数为 N ,子 SVM 分类器个数为 N −1。在“一对其余”的 SVM 多分类方法中,每一类的识别被看成一个独立的二分类问题(如图 4-4 所示)。拿本文研究的飞机目标为例,设所有飞机目标为 m 类,记为:L = {a1 a2 Κ am }。设属于ai的飞机目标个数为 Ni ,以任何一类ai为例,训练正例是该类所包含的全部飞机目标,而反例是在训练集中不属于该类的所有其它类的飞机目标。即一类的正例总数为 Ni ,反例总数为
为类的集合,每一次区分类集合中的一类。fj(x) 为类的集合,每一次区分类集合中的一类。
图 4-4 决策树具有层次结构,以致各训练集合的构成不同,训练所用的例子累次降低,减少了训练时间,测试是按照层次完成。每次构造分类器时,优先选择训练样本数量最多的类别的训练数据作为当前分类器的训练正例,剩余类别的训练数据作为分类器的训练反例,构造最优决策树,从而可以迅速减少训练集的规模,进而提高训练效率。
***** 二分类深度网络训练loss维持在****附近
这个问题很多人在训练自己或者迁移别的网络的时候都会遇到,特别是二分类这样的简单网络,感觉无处着手,都***是对的,就是Loss不动。到底什么原因了?吐槽的网址很多。 比如这里 , 或者这里 。若想知道解决办法,请直接跳到文章最后。
我想这才是解决****问题的最终办法。选择不同的optimizer或者网络组成,都极有可能失败。
线性模型-分类模型
线性模型也可用于分类问题。我们首先来看二分类。我们可以利用下面的公式预测:
y^=w+b》0
这个公式与线性回归的公式非常相似,但我们没有返回特征的加权求和,而是为预测设置了阈值(0)。如果函数值小于0,我们就预测类别-1,如果函数值大于0,我们就预测类别+1。对于所有用于分类的线性模型,这个预测规则都是通用的。同样,有很多不同的方法来找出系数(w)和截距(b)。
对于用于回归的线性模型,输出y^是特征的线性函数,是直线、平面或超平面(对于更高维的数据集)。对于用于分类的线性模型, 决策边界 是输入的线性函数。换句话说,(二元)线性分类器是利用直线、平面或超平面来分开两个类别的分类器。
学习线性模型有很多种算法。这些算法的区别在于以下两点:
1.系数和截距的特定组合对训练数据拟合好坏的度量方法;
2.是否使用正则化,以及使用哪种正则化方法。
不同的算法使用不同的方法来度量“对训练集拟合好坏”。由于数学上的技术原因,不可能调节w和b使得算法产生的误分类数量最少。对于我们的目的,以及对于许多有用而言,上面第一点(称为 损失函数 )的选择并不重要。
最常见的两种线性分类算法是 Logistic回归(logistic regression) 和 线性支持向量机(linear support vector machine,线性SVM) 。
Python version:***** (default, Dec 10 2018, 22:54:23)
pandas version:*****
matplotlib version:*****
Numpy version:*****
Scipy version:*****
IPython version:*****
scikit-learn version:*****
对于LogisticRegression和LinearSVC,决定正则化强度的权衡参数叫作***值越大,对应的正则化越弱。换句话说,如果参数C值较大,那么LogisticRegression和LinearSVC将尽可能将训练集拟合到最好,而如果C值较小,那么模型更强调使系数向量(w)接近于0。
参数C的作用还有另一个有趣之处。较小的C值可以让算法尽量适应“大多数”数据点,而较大的C值强调每个数据点都分类正确的重要性。
*****_linear_svc_regularization()
Training set score:*****
Test set score:*****
C=1的默认值给出了相当好的性能,在训练集和测试集上都达到95%的精度。但由于训练集和测试集的性能非常接近,所以模型很可能是欠拟合的。我们尝试增大C来拟合一个更灵活的模型:
Training set score:*****
Test set score:*****
使用C=100可以得到更高的训练集精度,也得到了稍高的测试集精度,这也证实了我们的直觉,即更复杂的模型应该性能更好。
Training set score:*****
Test set score:*****
最后,看一下正则化参数C取三个不同的值模型学到的系数:
LogisticRegression模型默认应用L2正则化。更强的正则化使的系数更趋向于0,但系数永远不会正好等于0。进一步观察图像,还可以第3个系数那里发现有趣之处,这个系数是“平均周长”(mean perimeter)。C=100和C=1时这个系数为正,其绝对值比C=1时还要大。在解释这样的模型时,系数可以告诉我们某个特征与哪个类别有关。例如,人们可能会认为高“纹理错误”(texture error)特征与“恶性”样本有关。但“平均周长”系数的正负号发生变化,说明较大的“平均周长”可以被当作“良性”的指标或“恶性”的指标,具体取决于我们考虑的是哪个模型。这也说明,对线性模型系数的解释应该始终持保留态度。
如果想要一个可解释性更强的模型,使用L1正则化可能更好,因为它约束模型只使用少数几个特征:
Training accuracy of l1 logreg with C=*****:****
Test accuracy of l1 logreg with C=*****:****
Training accuracy of l1 logreg with C=*****:****
Test accuracy of l1 logreg with C=*****:****
Training accuracy of l1 logreg with C=*****:****
Test accuracy of l1 logreg with C=*****:****
将二分类算法推广到多分类算法的一种常见方法是“一对多余”(one-vs.-rest)方法。在“一对多余”方法中,对每个类别都学习一个二分类模型,将这个类别与所有其他类别尽量分开,这样就生成了与类别格式一样多的二分类偶像。在测试点上运行所有二分类器来进行预测。在对应类别上分数最高的分类器“胜出”,将这个类别标签返回作为预测结果。
每个类别都对应一个二类分类器,这样每个类别都有一个系数(w)向量与一个截距(b)。
我们将“一对多余”方法应用在一个简单的三分类数据集上。我们用到了一个二维数据集,每个类别的数据都是从一个高斯分布中采样得出的:
在上面的数据集上训练一个LinearSVC分类器:
Coefficient shape: (3, 2)
Intercept shape: (3,)
我们看到,coef_的形状是(3,2),说明coef_每行包含三个类别之一的系数向量,每列包含某个特征(这个数据集有2个特征)对应的系数值。现在intercetp_是一维数组,保存每个类别的截距,我们将这3个二分类器给出的直线可视化:
你可以看到,训练集中所有属于类别0的点都在类别0对应的直线上方,这说明它们位于这个二分类器属于“类别0”的那一侧。属于类别0的点位于与类别2对应的直线上方,这说明它们被类别2的二分类器划为“其余”。属于类别0的点位于与类别1对应的直线左侧,这说明类别1的二元分类器将它们划为“其余”。因此,这一区域的所有点都会被最终分类器划为类别0(类别0的分类器的分类置信方程的结果大于0,其他两个类别对应的结果小于0)。
但图像中间的三角形区域属于哪一个类别呢,3个分类器都将这一区域内的点划为“其余”。这里的点应该应该划归到哪一个类别呢?答案是分类方程结果最大的那个类别,即最接近的那条线对应的类别。
线性模型的主要参数是正则化参数,在回归模型中叫作alpha,在LinearSVC和LogisticRegression中叫作*****值较大或C值较小,说明模型比较简单。特别是对于回归模型而言,调节这些参数非常重要。通常在对数尺度上对C和alpha进行搜索。你还需要确定的是用L1正则化还是L2正则化。如果你假定只有几个特征是真正重要的,那么你应该用的是L1正则化,否则默认使用L2正则化。如果模型的可解释性很重要的话,使用L1也会有帮助。由于L1只用到几个特征,所以更容易解释哪些特征对模型时重要的,以及这些特征的作用。
线性模型的训练速度非常快,预测速度也很快。这种模型可以推广到非常大的数据集,对稀疏数据也很有效。如果你的数据包含数十万甚至上百万个样本,你可能需要研究使用LogisticRegression和Ridge模型的solver=’sag’选项,在处理大型数据时,这一选项比默认值要更快。其他选项还有**DClassifier类和**DRegressor类,它们对线性模型实现了可扩展性更强的版本。
线性模型的另一个优点在于,利用我们之前见过的用于回归和分类的公式,理解如何进行预测是相对比较容易的。不幸的是,往往并不完全清楚系数为什么是这样的。如果你的数据集中包含高度相关的特征,这一问题尤为突出。在这种情况下,可能很难对系数做出解释。
如果特征数量大于样本数量,线性模型的表现通常都很好。它也常用于非常大的数据集,只是尤为训练其他模型并不可行。但在更低维的空间中,其他模型的泛化性能可能更好。
让机器认识水果品种的学习是那种
创智链
2021-03-08 11:06
关注
不知道你是否遇到过说不出来名字的水果,或者是两两相似,确实不知道具体水果的品种的情况?
随着人工智能技术的发展,智能图像识别应用场景也愈发广泛。当机器装上了人工智能的“眼睛”,机器就成为了“百事通”,识别成千上万的水果品种不在话下。
那机器究竟是如何识别水果的呢?今天小编节选彭红星教授团队的科研论文——《基于改进SSD模型的自然环境下多类水果图像检测研究》,带大家简单了解图像识别领域中,正确识别水果有哪些方法?
近年来,随着深度学习的迅速发展和崛起,尤其在视觉方向取得了巨大的成就,相比传统的识别算法,深度学习在对目标识别的特征描述上能力更强。因此,开发基于深度学习算法视觉识别功能的分拣、采摘机器人或者专业采摘工具具有重大意义。
本文以苹果、荔枝、脐橙、皇帝柑四类水果为研究对象,运用基于改进的SSD深度学习模型检测技术对这4类水果进行检测识别研究。
自然环境下的水果识别检测是利用计算机视觉技术获取水果目标位置信息,并将获得的位置信息传递给水果采摘机器人的机械手臂,从而能够精确地进行后续的水果采摘工作。因此,水果的目标检测是水果采摘自动化领域的重要组成部分,近些年来,很多传统水果检测识别算法相继提出。
方法一、利用不同深度架构的CNN不断刷新图像分类、识别的精确率。
方法二、利用尺度多层感知器和卷积神经网络两种特征提取算法分割,但是只针对单类水果进行识别;
方法三、利用参数优化和结构约简的LeNet模型对田间环境下的猕猴桃进行自主特征学习,但对于遮挡和重叠果实没有达到很好的效果;
方法四、采用Faster R-CNN深度卷积神经网络分别构建甜椒和柑橘检测系统,但其目标检测框过大;
方法五、基于CNN的SSD(Single Shot Detector)深度学习物体检测方法,实现兼顾速度的同时提高了检测的精度。
而经过基于改进的SSD深度学习模型检测技术可提高各类水果的识别效率和准确率。此外基于标注框的检测技术,也可以很好地解决重叠水果的目标分割问题,从而为水果自动本发明属于水果图片分类领域,具体是指基于alexnet的卷积神经网络的水果图片分类算法。
背景技术:
2.近年来,随着电子科技的快速发展和互联网的快速普及,智能手机、数码相机等电子产品的使用门槛越来越低。图像作为一种高效信息的传播媒介,无论是在本地还是在各类社交平台,都无时无刻不在增长。因此,给各类图像扫描分析、赋予标签、分类归档就显得尤为重要了。
3.同时,计算机科学和信息技术的持续发展,逐渐将人工智能引领进我们的生活,为我们生活带来了很多便利。而识别图像识别和分类正是人工智能领域中重要的组成部分,也是现阶段深度学习中比较热门的课题。
4.水果在我们生活中常见、普遍而且品种众多、样式复杂,具有极强的多样性,研究水果分类识别算法,具有重要的意义。
技术实现要素:
5.本发明的目的是克服水果自动识别技术中现有不同分类器对不同水果种类的分类效果不均衡,提供一种基于深度学习算法实现水果分类识别的方法,从而提高水果图片识别的准确度。
6.本发明采用的技术方案为:一种基于深度学习算法实现水果分类识别的方法,所述智能识别方法包括以下步骤:
7.步骤一:构建一个合理的预测模型,建立样本数据集,分别为:训练集、验证集和测试集。
8.步骤二:通过各搜索引擎和数据库搜索相关的水果图像样本,下载到本地。
9.步骤三:参考卷积神经网络模型alexnet,进行一些精简和优化实现的,经过大量的训练和调试后,得出的最佳参数。
10.步骤四:返回pycharm,使用tensorflow调用模型,对测试集进行分类测试。
11.本发明有益效果:
12.(1)本算法模型共架设了8个网路层次,使用了relu作为激励函数,relu激励函数可以在网络的更深层次中发挥作用
更多文章:
塞克斯顿对快船(双核缺席,快船擒骑士!路威赛后吐露心声,泰伦卢谈伤病一脸无奈)
2026年4月28日 17:20
json乱码转换成中文(PHP中json_encode中文乱码问题)
2026年4月28日 17:00
java下载excel文件(java如何将导出的excel下载到客户端)
2026年4月28日 16:20
skimming(skimming和scanning有什么区别)
2026年4月28日 16:00
百度搜索在线制作生成(logo在线设计免费生成-如何快速在线制作软件公司的LOGO)
2026年4月28日 15:40
continue变为ous(break和continue有何区别)
2026年4月28日 15:20
tensorflow二值分类器实现(支持向量机多类分类方法及特点)
2026年4月28日 15:00
objective和purpose的区别(这几个目标单词的区别.)
2026年4月28日 14:40




