精华内容
下载资源
问答
  • 2019-03-04 23:44:06

    多分类支持向量机是由k个支持向量机构成,当输入一个样本,分别输出k个概率,样本属于概率最大的那个类。

     

    更多相关内容
  • 一般的支持向量机(SVM)只能够用作二分类,而本次上传的代码是一个四分类支持向量机(SVM)算法实现,代码的关键部分都会有注释,适合刚入门的小白看。本代码还用到了libsvm这个工具箱,需要读者自己配置,配置...
  • 本文通过一对一、一对、决策有向无环图、二叉树、误差纠错码、一次性求解等多分类支持向量机算法在核函数为线性、多项式、径向基,神经网络的情况下,对个基准样本进行了分类性能、分类速度、分类准确性的详细...
  • 多分类支持向量机

    2008-08-25 13:20:05
    多分类支持向量机,SVM
  • 多分类支持向量机及其Python实现

    万次阅读 多人点赞 2018-07-30 23:38:57
    1.多分类支持向量机Multiclass Support Vector Machine (SVM) 其评分函数为:f(ω)=ωx+bf(ω)=ωx+bf(\omega)=\omega x+b 在此用到的都是支持向量的原始形式,没有核方法也没有使用SMO算法。无约束原始优化问题...

    1.多分类支持向量机Multiclass Support Vector Machine (SVM)

    • 其评分函数为: f(ω)=ωx+b f ( ω ) = ω x + b
    • 在此用到的都是支持向量机的原始形式,没有核方法也没有使用SMO算法。无约束原始优化问题。
    • 常用的多分类支持向量机有One-Vs-All(OVA),All-Vs-All,Structured SVM,其中OVA比较简单。
    • 多分类支持向量机对第i个类的损失函数是 Li=jyimax(0,sjsyiΔ) L i = ∑ j ≠ y i m a x ( 0 , s j − s y i − Δ ) , sj s j 不是比 syi s y i 还小 Δ Δ ,或者 sj s j syi s y i 还大,那就要对其评分进行惩罚。这样就是说,到最后,正确类别的分数要比错误分类的分数至少大 Δ Δ 阈值为0的max(0,-)函数也被称为合页损失函数(hingle loss)。
    • margin
    • L=1NiLidata loss+λR(W)regularization loss L = 1 N ∑ i L i ⏟ data loss + λ R ( W ) ⏟ regularization loss
    • data loss中的超参数 Δ Δ 和正则化前面的超参数 λ λ 看似无关,其实它们两个之间相互影响。使用小的间隔 Δ Δ 时,将会压缩 ω ω 的值在较小的区间上,正则化损失也就会变小,反之亦然。
    • 和二分类支持向量机之间的关系二分类支持向量机的损失函数 Li=Cmax(0,1yiwTxi)+R(W) L i = C max ( 0 , 1 − y i w T x i ) + R ( W ) ,C也是一个超参数, C1λ C ∝ 1 λ .

    2.Python 实现

    训练数据获取地址:https://raw.githubusercontent.com/lxrobot/General-source-code/master/SVM/data216x197.npy

    #!/usr/bin/env python2
    # -*- coding: utf-8 -*-
    """
    Created on Sun Jul 29 17:15:25 2018
    @author: rd
    """
    from __future__ import division
    import numpy as np
    """
    This dataset is part of MNIST dataset,but there is only 3 classes,
    classes = {0:'0',1:'1',2:'2'},and images are compressed to 14*14 
    pixels and stored in a matrix with the corresponding label, at the 
    end the shape of the data matrix is 
    num_of_images x 14*14(pixels)+1(lable)
    """
    def load_data(split_ratio):
        tmp=np.load("data216x197.npy")
        data=tmp[:,:-1]
        label=tmp[:,-1]
        mean_data=np.mean(data,axis=0)
        train_data=data[int(split_ratio*data.shape[0]):]-mean_data
        train_label=label[int(split_ratio*data.shape[0]):]
        test_data=data[:int(split_ratio*data.shape[0])]-mean_data
        test_label=label[:int(split_ratio*data.shape[0])]
        return train_data,train_label,test_data,test_label
    
    """compute the hingle loss without using vector operation,
    While dealing with a huge dataset,this will have low efficiency
    X's shape [n,14*14+1],Y's shape [n,],W's shape [num_class,14*14+1]"""
    def lossAndGradNaive(X,Y,W,reg):
        dW=np.zeros(W.shape)
        loss = 0.0
        num_class=W.shape[0]
        num_X=X.shape[0]
        for i in range(num_X):
            scores=np.dot(W,X[i])        
            cur_scores=scores[int(Y[i])]
            for j in range(num_class):
                if j==Y[i]:
                    continue
                margin=scores[j]-cur_scores+1
                if margin>0:
                    loss+=margin
                    dW[j,:]+=X[i]
                    dW[int(Y[i]),:]-=X[i]
        loss/=num_X
        dW/=num_X
        loss+=reg*np.sum(W*W)
        dW+=2*reg*W
        return loss,dW
    
    def lossAndGradVector(X,Y,W,reg):
        dW=np.zeros(W.shape)
        N=X.shape[0]
        Y_=X.dot(W.T)
        margin=Y_-Y_[range(N),Y.astype(int)].reshape([-1,1])+1.0
        margin[range(N),Y.astype(int)]=0.0
        margin=(margin>0)*margin
        loss=0.0
        loss+=np.sum(margin)/N
        loss+=reg*np.sum(W*W)
        """For one data,the X[Y[i]] has to be substracted several times"""
        countsX=(margin>0).astype(int)
        countsX[range(N),Y.astype(int)]=-np.sum(countsX,axis=1)
        dW+=np.dot(countsX.T,X)/N+2*reg*W
        return loss,dW
    
    def predict(X,W):
        X=np.hstack([X, np.ones((X.shape[0], 1))])
        Y_=np.dot(X,W.T)
        Y_pre=np.argmax(Y_,axis=1)
        return Y_pre
    
    def accuracy(X,Y,W):
        Y_pre=predict(X,W)
        acc=(Y_pre==Y).mean()
        return acc
    
    def model(X,Y,alpha,steps,reg):
        X=np.hstack([X, np.ones((X.shape[0], 1))])
        W = np.random.randn(3,X.shape[1]) * 0.0001
        for step in range(steps):
            loss,grad=lossAndGradNaive(X,Y,W,reg)
            W-=alpha*grad
            print"The {} step, loss={}, accuracy={}".format(step,loss,accuracy(X[:,:-1],Y,W))
        return W
    
    train_data,train_label,test_data,test_label=load_data(0.2)
    W=model(train_data,train_label,0.0001,25,0.5)
    print"Test accuracy of the model is {}".format(accuracy(test_data,test_label,W))
    
    >>>python linearSVM.py
    The 0 step, loss=2.13019790746, accuracy=0.913294797688
    The 1 step, loss=0.542978231611, accuracy=0.924855491329
    The 2 step, loss=0.414223869196, accuracy=0.936416184971
    The 3 step, loss=0.320119455456, accuracy=0.942196531792
    The 4 step, loss=0.263666138421, accuracy=0.959537572254
    The 5 step, loss=0.211882339467, accuracy=0.959537572254
    The 6 step, loss=0.164835849395, accuracy=0.976878612717
    The 7 step, loss=0.126102746496, accuracy=0.982658959538
    The 8 step, loss=0.105088702516, accuracy=0.982658959538
    The 9 step, loss=0.0885842087354, accuracy=0.988439306358
    The 10 step, loss=0.075766608953, accuracy=0.988439306358
    The 11 step, loss=0.0656638756563, accuracy=0.988439306358
    The 12 step, loss=0.0601955544228, accuracy=0.988439306358
    The 13 step, loss=0.0540709950467, accuracy=0.988439306358
    The 14 step, loss=0.0472173965381, accuracy=0.988439306358
    The 15 step, loss=0.0421049154242, accuracy=0.988439306358
    The 16 step, loss=0.035277229437, accuracy=0.988439306358
    The 17 step, loss=0.0292794459009, accuracy=0.988439306358
    The 18 step, loss=0.0237297062768, accuracy=0.994219653179
    The 19 step, loss=0.0173572330624, accuracy=0.994219653179
    The 20 step, loss=0.0128973291068, accuracy=0.994219653179
    The 21 step, loss=0.00907220930146, accuracy=1.0
    The 22 step, loss=0.0072871437553, accuracy=1.0
    The 23 step, loss=0.00389257560805, accuracy=1.0
    The 24 step, loss=0.00347981408653, accuracy=1.0
    Test accuracy of the model is 0.976744186047
    
    展开全文
  • 已经把相应的函数放在了压缩包里,包括数据图片运行结果,用的是传统的一对一支持向量机多分类方法,直接可以运行。如果你不能直接运行,请安装stprtool工具箱或相应的函数。
  • 基于BP神经网络与多分类支持向量机的水质识别与分类.pdf
  • 基于多分类支持向量机算法的PCB焊点检测研究.pdf
  • 为了有效提取极短文本中的关键特征信息,提出了一种基于支持向量机的极短文本分类模型。首先对原数据进行数据清洗并利用jieba分词将清洗过的数据进行处理;再将处理后的数据存入数据库,通过TF-IDF进行文本特征的...
  • 是一种新型通用的有监督的机器学习方法,其核心思想是使结构风险极小化,但是由于需要求解二次规划,使得它在求解大规模数据上具有一定的局限性,尤其是对于多分类问题,现有的支持向量机算法具有很高的复杂性。...
  • 基于使用常规水质传感器的多分类支持向量机对污染物进行在线分类
  • 多分类支持向量机SVM

    2011-03-08 16:24:57
    多分类支持向量机几种算法进行分析, 系统地比较了各种算法的性能
  • 通过GEE平台调用Landsat8影像数据对土地覆被进行分类,并且计算其总体精度
  • 主要介绍了Python 支持向量机分类器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 1、掌握支持向量机的原理 2、能够理解支持向量机分类算法; 3、掌握sklearn的支持向量机分类算法;
  • 采用支持向量机SVM分类葡萄酒,完整代码,无错误,下载即可运行。
  • matlab程序+数据集(预处理完成的)
  • 内包含基于SVM的粒子群算法来处理乳腺癌的分类预测,其中首先用到了特征提取方法进行特征提取,然后再进行了分类预测。 本程序调用libsvm,使用该代码时,首先需要配置libsvm函数包。
  • 与二分类问题类似,首先构建公式,然后采用e1071包的svm函数训练支持向量机模型。为了svm函数能够自动构建分类模型,需要先将训练集中因变量设置为factor。为了预测时能输出预测概率,需要设置probability参数为TRUE...

    与二分类问题类似,首先构建公式,然后采用e1071包的svm函数训练支持向量机模型。为了svm函数能够自动构建分类模型,需要先将训练集中因变量设置为factor。为了预测时能输出预测概率,需要设置probability参数为TRUE。

    对于分类模型预测时从概率到分类的转化,多分类模型没有采用如二分类模型中的约登法则,一般采用赢家通吃的规则,简单理解就是哪个分类的预测概率最高就将其预测为哪个分类。当然也有其转化规则,比如402040规则。相关的规则,有RSNNS包里面的analyzeClassification函数,大家可以了解下。

    # 因变量自变量构建公式
    colnames(winequalityred)
    form_clsm <- as.formula(
      paste0("quality ~ ", paste(colnames(traindata)[1:11], collapse = " + "))
    )
    form_clsm
    
    # 构建模型
    fit_svm_clsm <- svm(form_clsm, 
                       data = traindata, 
                       kernel = "radial",
                       cost = 1,
                       probability = T)
    fit_svm_clsm
    # str(fit_svm_clsm)
    
    # 训练集预测概率
    trainpred <- predict(fit_svm_clsm, newdata = traindata, probability = T)
    trainpredprob <- attr(trainpred, "probabilities")

    展开全文
  • 首先介绍支持向量机的基本原理,总结了常见的多分类分类算法及其特点,结合现有分类算法的优点,为分类器引入了不同的权值,提出二叉树改进分类算法,有效避免了常用分类算法不足.通过仿真实验,与典型的分类...
  • 1-16个标签分为三大类,判断心脏病的有无。此SVM 算法采用Matlab的形式进行编码,通俗易懂。
  • 文本分类,使用机器学习算法,如朴素贝叶斯、逻辑回归、支持向量机
  • 数学建模国赛获奖论文整理,使用支持向量机做的论文集合,可以系统的学习支持向量机在数学建模中的应用,非常有用。
  • 1.有数据集 2.麻雀算法优化支持向量机python代码
  • 支持向量机,能在N维平面中,找到最明显得对数据进行分类的一个超平面!看下面这幅图: 如上图中,在二维平面中,有红和蓝两类点。要对这两类点进行分类,可以有很分类方法,就如同图中条绿线,都
  • 大家不免会发现其既定前提是数据线性可分,但实际生活中对于线性可分的数据来说还是比较少,那么如何在线性可分支持向量机的基础上进行改使得线性支持向量机能够在线性不可分的数据中绘制超平面进行分类任务。...
  • 在fashion_mnist数据集上进行SVM的分类及调参
  • 感知于1957年由Rosenblatt提出,是神经网络与支持向量机的基础。感知二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取+1和-1二值,该模型属于判别模型,旨在求出将训练数据进行线性划分的...
  • 使用SVM对数据进行分类

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 102,903
精华内容 41,161
关键字:

多分类支持向量机

友情链接: 测试发送软件(SK).zip