精华内容
下载资源
问答
  • (1)如何采用线性核?...严格讲,线性核也要像高斯核一样调整c这个参数,Libing wang讲一般C=1效果比较好,可能调整效果差异不大,当然要看具体的数据集。c大,从SVM目标函数可以看出,c越大,相当于惩罚松弛...

    (1)如何采用线性核?

    matlab> % Linear Kernel

    matlab> model_linear = svmtrain(train_label, train_data, ‘-t 0’);

    严格讲,线性核也要像高斯核一样调整c这个参数,Libing wang讲一般C=1效果比较好,可能调整效果差异不大,当然要看具体的数据集。c大,从SVM目标函数可以看出,c越大,相当于惩罚松弛变量,希望松弛变量接近0,即都趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但推广能力未必好,即在测试集上未必好。c小点,相当于边界的有些点容许分错,将他们当成噪声点,这样外推能力比较好。

    (2)如何采用高斯核?

    matlab> load heart_scale.mat

    matlab> model = svmtrain(heart_scale_label, heart_scale_inst, ‘-c 1 -g 0.07’);

    参考:http://www.cppblog.com/guijie/archive/2012/03/26/169034.html

    展开全文
  • 混合高斯模型的方法,分析了高斯模型中PCA与聚类的潜在关系。
  • ML之SVM:利用Js语言设计SVM算法(SMO算法+线性核/高斯核) 目录 输出结果 设计思路 设计代码(部分代码) 输出结果 设计思路 设计代码(部分代码) var doTest = function() { loadData(); /...

    ML之SVM:利用Js语言设计SVM算法(SMO算法+线性核/高斯核)

     

     

    目录

    输出结果

    设计思路

    设计代码(部分代码)


     

     

    输出结果

     

    设计思路

     

     

    设计代码(部分代码)

    var doTest = function() {
        loadData();     //调用loadData函数加载样本数据、初始化参数
    
        svm.train(2000);//调用svm.train函数,迭代2000次实现SMO算法
    
        var result = {};
        //for循环实现得到并返回result
        for(var x = -230; x <= 230; x += 5) {
          for(var y = -230; y <= 230; y += 5) {
              var sample = [x/100, y/100];
              var pred = svm.pred(sample, 2);
              if ( pred >= 1) {
                pred = 2;
              } else if ( pred <= -1) {
                pred = -2;
              } else if (pred > 0) {
                pred = 1;
              } else {
                pred = -1;
              }
              result[x/100 + ',' + y/100] = pred;
          }
        }
    
        return result;
    }

     

     

     

     

     

    展开全文
  • 西瓜数据集3.0α # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from sklearn import svm import pandas as pd from sklearn.metrics import accuracy_score#返回正确的比例 ...
  • 这里的核函数,用了linear和rbf(radial basis function)俗称线性核高斯核(径向基函数) 然后这个C值是用来调软间隔的,C值越大说明数据本身越重要,软间隔小,不容许分类差错。C值无穷大意味着完全不允许软...

    SVM手动实现底层代码有些麻烦,这里借助sklearn实现了一下,数据以及代码地址:

    https://github.com/qdbszsj/SVM

    
    import pandas as pd
    import numpy as np
    dataset = pd.read_csv('/home/parker/watermelonData/watermelon3_0a.csv', delimiter=",")
    # print(dataset)
    
    X=dataset.iloc[range(17),[1,2]].values
    y=dataset.values[:,3]
    print("trueV",y)
    trueV=y
    from sklearn import svm
    
    linearKernalMethod=svm.SVC(C=10000,kernel='linear')#C=1 defaultly
    linearKernalMethod.fit(X,y)
    predictV=linearKernalMethod.predict(X)
    
    print("linear",predictV)
    
    confusionMatrix=np.zeros((2,2))
    for i in range(len(y)):
        if predictV[i]==trueV[i]:
            if trueV[i]==0:confusionMatrix[0,0]+=1
            else: confusionMatrix[1,1]+=1
        else:
            if trueV[i]==0:confusionMatrix[0,1]+=1
            else:confusionMatrix[1,0]+=1
    print("linearConfusionMatrix\n",confusionMatrix)
    
    
    rbfKernalMethod=svm.SVC(C=10000,kernel='rbf')#C=1 defaultly
    rbfKernalMethod.fit(X,y)
    predictV=rbfKernalMethod.predict(X)
    
    print("rbf",predictV)
    
    confusionMatrix=np.zeros((2,2))
    for i in range(len(y)):
        if predictV[i]==trueV[i]:
            if trueV[i]==0:confusionMatrix[0,0]+=1
            else: confusionMatrix[1,1]+=1
        else:
            if trueV[i]==0:confusionMatrix[0,1]+=1
            else:confusionMatrix[1,0]+=1
    print("rbfConfusionMatrix\n",confusionMatrix)
    
    这里的核函数,用了linear和rbf(radial basis function)俗称线性核和高斯核(径向基函数)

    然后这个C值是用来调软间隔的,C值越大说明数据本身越重要,软间隔小,不容许分类差错。C值无穷大意味着完全不允许软间隔,就是变成硬间隔的SVM。

    在这里,我们发现用线性核函数,无论如何也无法完全划分数据集,因为数据集本身就不是线性可分的,但是用高斯核函数,当我们把C值逐渐调大的时候,我们发现可以完整地划分这个数据集,不产生任何差错。

    情况不明时往往使用高斯核函数,对于文本数据等已知线性可分的数据可以用线性核。

    实验结果:C值是10000的时候的结果。



    展开全文
  • SVM的函数之线性高斯的选择

    千次阅读 2018-12-20 16:31:36
    关于SVM中线性核函数和高斯核函数的选择1.基本数据准备2.各情况对比1. SVM(kernel='linear'):直接采用数据集[966,1850]2. SVM(kernel='rbf'):直接采用数据集[966,1850]3. LR:直接采用数据集[966,1850]4. 降维之后...

    Table of Contents

    关于SVM中线性核函数和高斯核函数的选择

    SVM中常用核函数一般是线性核函数和高斯核函数。以sklearn中的SVC,提供的’linear’和’rbf’做说明。面向[n,m]原始数据集,一般的选取准则:

    1. 相对于n,m很大。比如m≥n, m=10000, n=10~1000,即(m/n)>10。
      考虑’linear’
    2. m很小,n一般大小。比如m=1-1000, n=10~10000,即(m/n)在[0.0001,100].
      考虑’rbf’
    3. m很小,n很大。比如n=1-1000,m=50000+,即(m/n)在[~,0.02].
      增加m的量,考虑’linear’

    补充:logistic约等同于’linear’的选择

    #!/usr/bin/python
    # encoding: utf-8
    
    
    """
    @author : jack_lu
    @contact : my@google
    @File : SVM
    @time : 2018/12/12 12:12
    """
    
    # 练习所用数据集
    from sklearn.datasets import fetch_lfw_people,olivetti_faces
    
    # 特征提取方法
    from sklearn.decomposition import PCA
    from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
    # 特征转换方法
    from sklearn.preprocessing import StandardScaler
    
    # sklearn模型方法
    from sklearn.model_selection import train_test_split
    
    # metric方法
    from sklearn.metrics import accuracy_score
    
    # 机器学习模型
    from sklearn.linear_model import LogisticRegression
    from sklearn.pipeline import Pipeline
    from sklearn.svm import SVC
    

    1.基本数据准备

    print('#'*50 + '  1.基本数据准备  ' + '#'*50)
    lfw_people2 = fetch_lfw_people(min_faces_per_person=70, resize=0.4)  # 需要通过翻墙下载,C:\Users\Administrator\scikit_learn_data\lfw_home\joblib\sklearn\datasets\lfw\_fetch_lfw_people
    
    ##################################################  1.基本数据准备  ##################################################
    
    n_samples, h, w = lfw_people2.images.shape
    X = lfw_people2.data
    y = lfw_people2.target
    n_features = X.shape[1]
    
    target_names = lfw_people2.target_names
    n_class = target_names.shape[0]
    
    print('#'*20,'数据集基本情况','#'*20)
    print('**样本数量**:%d' %(X.shape[0]))
    print('**特征维度**:%d' %(X.shape[1]))
    print('**目标类别数**:%d' %(n_class))
    print('#'*20,'数据集基本情况','#'*20)
    
    
    #################### 数据集基本情况 ####################
    **样本数量**:1288
    **特征维度**:1850
    **目标类别数**:7
    #################### 数据集基本情况 ####################
    
    X_train,X_test,y_train,y_test = train_test_split(X, y, test_size=0.25,random_state=1)
    
    print('#'*20,'训练数据集基本情况','#'*20)
    print('**训练样本数量**:%d' %(X_train.shape[0]))
    print('**训练特征维度**:%d' %(X_train.shape[1]))
    print('**目标类别数**:%d' %(n_class))
    print('#'*20,'训练数据集基本情况','#'*20)
    
    
    #################### 训练数据集基本情况 ####################
    **训练样本数量**:966
    **训练特征维度**:1850
    **目标类别数**:7
    #################### 训练数据集基本情况 ####################
    

    2.各情况对比

    print('#'*50 + '  2.建模与比较  ' + '#'*50)
    
    
    ##################################################  2.建模与比较  ##################################################
    

    1. SVM(kernel=‘linear’):直接采用数据集[966,1850]

    svm_origin = SVC(kernel='linear', C=1000, decision_function_shape='ovo')  # 根据官方说明,对于多分类任务宜采用'ovo'即onevsone策略
    svm_origin.fit(X_train, y_train)
    y_pred = svm_origin.predict(X_test)
    print('**情况1-linear的准确率**: %s' %(accuracy_score(y_pred=y_pred, y_true=y_test)))
    
    **情况1-linear的准确率**: 0.832298136646
    

    2. SVM(kernel=‘rbf’):直接采用数据集[966,1850]

    svm_rbf = SVC(kernel='rbf', C=1000, decision_function_shape='ovo')  # 根据官方说明,对于多分类任务宜采用'ovo'即onevsone策略
    svm_rbf.fit(X_train, y_train)
    y_pred = svm_rbf.predict(X_test)
    print('**情况2-rbf的准确率**: %s' %(accuracy_score(y_pred=y_pred, y_true=y_test)))
    
    **情况2-rbf的准确率**: 0.44099378882
    

    3. LR:直接采用数据集[966,1850]

    lr_origin = LogisticRegression()  # 对于多分类任务,multi_class可选择'ovr'或者'auto'自动选择,这里按照默认'auto'
    lr_origin.fit(X_train, y_train)
    y_pred = lr_origin.predict(X_test)
    print('**情况3-LR的准确率**: %s' %(accuracy_score(y_pred=y_pred, y_true=y_test)))
    
    **情况3-LR的准确率**: 0.826086956522
    

    4. 降维之后

    print('#'*20,'维度由1850减少到150之后','#'*20)
    
    
    #################### 维度由1850减少到150之后 ####################
    
    def namestr(obj, namespace):
        return [name for name in namespace if namespace[name] is obj]
    print(namestr(lr_origin,globals()),'\n',
    namestr(lr_origin,globals())[0])
    
    
    ['lr_origin', 'model'] 
     lr_origin
    
    def small_feature_model(model,X_train=X_train,y_train=y_train,X_test=X_test, y_test=y_test):
        pca = PCA(n_components=150,random_state=0,whiten=True)
        pipeline = Pipeline([('scale',StandardScaler()),('pca',pca)])
        processing = pipeline.fit(X_train)
        X_train = processing.transform(X_train)
        X_test = processing.transform(X_test)
        model.fit(X_train, y_train)
        y_pred = model.predict(X_test)
    #     print(namestr(model,globals()))
        print('**small-%s的准确率**: %.3f' %(namestr(model, globals())[0],accuracy_score(y_pred=y_pred, y_true=y_test)))
    
    for model in [svm_origin, svm_rbf, lr_origin]:
        small_feature_model(model)
    
    **small-svm_origin的准确率**: 0.789
    **small-svm_rbf的准确率**: 0.811
    **small-lr_origin的准确率**: 0.835
    
    print('#'*50 + '  完成  ' + '#'*50)
    
    
    ##################################################  完成  ##################################################
    

    3.小结

    从结果看到:

    1. 将维度减少到150之后,选择kernel='rbf’的效果>‘linear’;
    2. 在没有调参情况下,LR的效果还不错,初期建模值得先尝试。

    当然,上面是指定了特定的参数,更主要的目的是对比SVM两种核方法在n和m的比例当中的效果。在具体问题当中,在计算力有限条件下,建议还是通过网格搜索的方法对比选出最优的kernel。

    展开全文
  • 线性核 :param X: :param Y: :return: ''' clf = svm.SVC(kernel='linear') clf.fit(X, Y) print(clf.support_vectors_) # 打印支持向量 print(clf.support_) # 打印支持向量索引 print(clf.n_support_...
  • 该方法依据状态空间模型把信号分离问题转化为信号的状态和参数的联合估计问题,利用粒子滤波方法,结合平滑收缩技术拟合系统未知参数后验分布,以实现非线性系统中多路信号的分离.仿真结果表明,与现有分离算法相比,该...
  • %matplotlib inline import matplotlib.pyplot as plt import numpy as np def plot_hyperplane(clf, X, y, h=0.02, draw_sv=True, title='hype...
  • 本文内容分别用线性SVM和高斯核SVM预测对数据进行分类(1)问题描述:(2)训练过程:使用线性核函数的svm算法使用高斯核函数的SVM算法(3)尝试调用sklearn: 分别用线性SVM和高斯核SVM预测对数据进行分类 (1)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,003
精华内容 12,401
关键字:

线性核高斯核