分别用线性SVM和高斯核SVM预测对数据进行分类

本文内容

    • 分别用线性SVM和高斯核SVM预测对数据进行分类
      • (1)问题描述:
      • (2)训练过程:
        • 使用线性核函数的svm算法
        • 使用高斯核函数的SVM算法
      • (3)尝试调用sklearn:
    • 实验报告地址:

分别用线性SVM和高斯核SVM预测对数据进行分类

(1)问题描述:

task1_linear.mat中有一批数据点,试用线性SVM对他们进行分类,并在图中画分出决策边界。task1_gaussian中也有一批数据点,试用高斯核SVM对他们进行分类,并在图中画出决策边界。

(2)训练过程:

使用线性核函数的svm算法

  1. 加载数据并可视化:

    加载一个2维数据集:

    X,y = svmF.loadData('task1_linear.mat')
    svmF.plotData(X,y)
    
分别用线性SVM和高斯核SVM预测对数据进行分类_第1张图片 观察可知该数据集可以被线性边界分割为正样本和负样本。
  1. 训练模型与边界可视化:

    model = svmF.svmTrain_SMO(X, y, C=1, max_iter=20)
    svmF.visualizeBoundaryLinear(X, y, model)
    

    变量 C C C所起的作用于逻辑回归中的正则化参数 1 λ \frac{1}{λ} λ1

    变量 C C C值对决策边界有不同的影响,下面我们尝试分几种情况验证:

    • C = 1 : C=1: C=1

      分别用线性SVM和高斯核SVM预测对数据进行分类_第2张图片

    • C = 100 : C=100: C=100:

      分别用线性SVM和高斯核SVM预测对数据进行分类_第3张图片

    • C = 1000 : C=1000: C=1000:

      分别用线性SVM和高斯核SVM预测对数据进行分类_第4张图片

    我们可以发现, C C C的大小影响着线性决策边界,其所起的作用于逻辑回归中正则化参数一样, C C C太大,可能会导致过拟合问题。

使用高斯核函数的SVM算法

对于非线性的分类任务,常用带有高斯核函数的SVM算法来实现。

  1. 加载数据并可视化:

    加载一个2维数据集:

    X, y = svmF.loadData('task1_gaussian.mat')
    svmF.plotData(X, y)
    

    可以很明显地看出是非线性的数据。

分别用线性SVM和高斯核SVM预测对数据进行分类_第5张图片

  1. 训练模型与边界可视化:

    model = svmF.svmTrain_SMO(X, y, C=1, kernelFunction='gaussian', K_matrix=svmF.gaussianKernel(X, sigma=0.1))
    svmF.visualizeBoundaryGaussian(X, y, model,sigma=0.1)
    

    实现效果如下所示:

分别用线性SVM和高斯核SVM预测对数据进行分类_第6张图片

(3)尝试调用sklearn:

  • 调用sklearn svm,如下所示:

    from sklearn import svm
    c = 1
    clf = svm.SVC(c, kernel='linear', tol=1e-3)
    clf.fit(X, y)
    
    
    
  • 结果:

分别用线性SVM和高斯核SVM预测对数据进行分类_第7张图片]

  • 高斯核:

    c = 1
    sigma = 0.1
    clf = svm.SVC(c, kernel='rbf', gamma=np.power(sigma, -2))
    clf.fit(X, y)
    
  • 结果

分别用线性SVM和高斯核SVM预测对数据进行分类_第8张图片

实验报告地址:

点这里

你可能感兴趣的:(机器学习,机器学习,数据挖掘)