机器学习 —— 向量机(matlab)

目录

一、SVM基本介绍

1.1 SVM算法定义

  SVM全称是supported vector machine(支持向量机),即寻找到一个超平面使样本分成两类,并且间隔最大。

  SVM能够执行线性和非线性分类,回归,甚至是异常值监测任务。特别适用于中小型复杂数据集的分类。

1.2 SVM和逻辑回归的区别

机器学习 —— 向量机(matlab)

  1. 逻辑回归和SVM都是寻找一条分类直线,目标是把这两个类别分开
  2. 逻辑回归的最终判断标准是:准确率,而SVM最终的判断结果是:准确率+最大间隔
  3. 逻辑回归的分类直线可能有多条,而SVM的分类直线只有一条。

单纯考虑准确率和考虑最大间隔哪个泛化性能更好一点:
机器学习 —— 向量机(matlab)

  1. 准确率只考虑了在训练集上的预测能力
  2. 准确率+最大间隔即考虑了预测能力,又考虑了模型对未知样本的泛化能力。

二、实验数学原理

线性支持向量机

机器学习 —— 向量机(matlab)

机器学习 —— 向量机(matlab)

机器学习 —— 向量机(matlab)

机器学习 —— 向量机(matlab)

三、实验算法和实验步骤

二分类逻辑回归算法

输入

机器学习 —— 向量机(matlab)

输出过程:

1.读取数据集

2.数据归一化

3.构造问题的约束二次规划

4.构建拉格朗日函数

5.将问题对偶化

6.利用SMO算法进行求解,得到分类预测模型

7.根据预测模型对预测集样本的类别进行预测

输出:数据集的预测结果

四、实例分析

数据来源:传送门1  传送门2

线性向量机

clear;close all;clc;
%% 第一步:读取数据
load SVMdata1.mat;
%% 第二步:分离训练集和测试集
% [train_X,train_y,test_X,test_y] = split_train_test(X,y,2,0.8);
% randperm随机打算数据集X的顺序
index = randperm(size(X,1)); %获取打算顺序后的数据集的索引
n = length(index); %得到index的个数
% 分离训练集
T = round(n*0.8);
train_X = X(index(1:T),:); %分离出数据集X中的训练集
train_y = y(index(1:T),:); %分离出数据集y中的训练集
% 分离测试集或预测集
test_X = X(index(T+1:end),:); %分离出数据集X中的测试集
test_y = y(index(T+1:end),:); %分离出数据集y中的测试集

%% 第三步:标准支持向量机拟合训练
svmline = svmtrain(train_X,train_y,'Showplot',true);

%% 第四步:SVM预测
predictline = svmclassify(svmline,test_X,'Showplot',true);
fprintf('预测分类结果为:\n')
disp(predictline')
%继续绘制测试集数据
hold on; %继续在这张图上绘制
plot(test_X(:,1),test_X(:,2),'gs','Markersize',12) %圈出预测数据
xlabel('x') %添加行标签
ylabel('y') %添加列标签
title('标准支持向量机') %添加标题
hold off %接下来绘制重启一张图
%% 第五步:预测的准确率
accu = 1-sum(abs(predictline-test_y))/length(test_y);
fprintf('预测结果准确率为:%d',accu)

高斯向量机

clear;close all;clc;
%% 第一步:读取数据
load SVMdata2.mat;
%% 第二步:分离训练集和测试集
% [train_X,train_y,test_X,test_y] = split_train_test(X,y,2,0.8);
% randperm随机打算数据集X的顺序
index = randperm(size(X,1)); %获取打算顺序后的数据集的索引
n = length(index); %得到index的个数
% 分离训练集
T = round(n*0.8);
train_X = X(index(1:T),:); %分离出数据集X中的训练集
train_y = y(index(1:T),:); %分离出数据集y中的训练集
% 分离测试集或预测集
test_X = X(index(T+1:end),:); %分离出数据集X中的测试集
test_y = y(index(T+1:end),:); %分离出数据集y中的测试集

%% 第三步:高斯拟合训练集
svmgs = svmtrain(train_X,train_y,'Showplot',true,'kernel_function','rbf','rbf_sigma',1);

%% 第四步:SVM预测
predict = svmclassify(svmgs,test_X,'Showplot',true);
fprintf('预测分类结果为:\n')
disp(predict')
%继续绘制测试集数据
hold on; %继续在这张图上绘制
plot(test_X(:,1),test_X(:,2),'gs','Markersize',12) %圈出预测数据
xlabel('x') %添加行标签
ylabel('y') %添加列标签
title('高斯核支持向量机') %添加标题
hold off %接下来绘制重启一张图
%% 第五步:预测的准确率
% accu = sum(strcmp(predict,test_y))/length(test_y)*100
accu = 1-sum(abs(predict-test_y))/length(test_y);
fprintf('预测结果准确率为:%d',accu)

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2022年6月1日
下一篇 2022年6月1日

相关推荐