目标识别-cv实验

文章目录

    • 一、实验介绍
      • (1)实验目的
      • (2)数据集简介
      • (3)实验内容
      • (4)评价指标
    • 二、实验代码
    • 三、结果
      • (1)acc结果对比
      • (2)结果分析
      • (3)控制台输出
    • 五、参考:

一、实验介绍

(1)实验目的

  • 掌握支持向量机(SVM)分类器。

(2)数据集简介

  • 上述数据集均一.mat文件存放在/datasets文件夹下。

(3)实验内容

  • 编写程序实现SVM分类器设计。

(4)评价指标

  • 本次实验主要利用Acc指标对聚类结果进行评价,值越大表明聚类效果越好。

二、实验代码

  • 编写程序实现线性、高斯核、拉普拉斯核的的SVM分类器设计。
import numpy as np
from scipy.io import loadmat
from sklearn import svm
from sklearn.model_selection import train_test_split
import math

# 数据准备
minist_path = r".\datasets\MNIST.mat"
lung_path = r".\datasets\lung.mat"
yale_path = r".\datasets\Yale.mat"
KERNEL = ['linear', 'rbf']


# 加载数据
def create_data(path):
    data = loadmat(path)
    data_x = data["X"]
    data_y = data["Y"][:, 0]
    data_y -= 1
    Data = np.array(data_x)
    Label = np.array(data_y)
    return Data, Label


def laplace(X1, X2):
    K = np.zeros((len(X1), len(X2)), dtype=np.float)
    for i in range(len(X1)):
        for j in range(len(X2)):
            K[i][j] = math.exp(-math.sqrt(np.dot(X1[i] - X2[j], (X1[i] - X2[j]).T))/2)
    return K


def classify(path, kernel):
    X, y = create_data(path)
    train_data, test_data, train_label, test_label = train_test_split(X, y, test_size=0.333, random_state=233)
    # 训练svm分类器
    classifier = svm.SVC(C=2, kernel=kernel, gamma=10, decision_function_shape='ovr')  # ovr:一对多策略
    classifier.fit(train_data, train_label.ravel())  # ravel函数在降维时默认是行序优先
    # 计算svc分类器的准确率
    print("训练集:", classifier.score(train_data, train_label))
    print("测试集:", classifier.score(test_data, test_label))


if __name__ == '__main__':
    print('yale: ')
    classify(yale_path, KERNEL[0])
    print('-----------------')
    print('lung: ')
    classify(lung_path, KERNEL[0])
    print('-----------------')
    print('minist: ')
    classify(minist_path, KERNEL[0])


三、结果

(1)acc结果对比

数据/方法 minist lung yale
svm 0.904 0.955 0.709

(2)结果分析

  • 通过实验可以发现由于lung数据集的数据量最大,标签类别只有5,因此每一类标签的训练数据集较大,因此结果较高,可以到百分之九十,yale数据量小,标签类别为15,因此每一类标签的训练数据集较小,结果也相对较差。可以通过优化模型,或者增加数据记得方式来提高精确度。

(3)控制台输出

yale: 
训练集: 1.0
测试集: 0.7090909090909091
-----------------
lung: 
训练集: 1.0
测试集: 0.9558823529411765
-----------------
minist: 
训练集: 1.0
测试集: 0.9049049049049049

五、参考:

支持向量机通俗导论(理解SVM的三层境界)---------大佬的svm原理详细讲解,一千多个赞,百万阅读,啥也不说了
Svm算法原理及实现---------对svm原理进行了讲解,并手写了svm的训练函数和测试函数
【机器学习】python使用支持向量机SVM--------博主以鸢尾花数据集对鸢尾花数据集的两个特征作svm并绘图
SVM基本概要与sklearn.svm.svc 参数说明
SVM支持向量机-核函数(6)--------各个核函数及其python实现
Python sklearn SVM自定义核实现和所遇到的问题及解决(完整代码)

你可能感兴趣的:(机器学习,机器学习)