简单粗暴理解支持向量机(SVM)及其MATLAB实例

2023-05-16

目录

SVM概述

SVM的改进:解决回归拟合问题的SVR

多分类的SVM

QP求解

SVM的MATLAB实现:Libsvm

【实例】用SVM分类

【实例】用SVM回归


SVM概述

SVM已经是非常流行、大家都有所耳闻的技术了。网络上也有很多相关的博客,讲解得都非常详细。如果你要从零开始推导一个SVM,细致抠它全程的数学原理,我建议可以阅读此篇文章:Zhang Hao的《从零构建支持向量机》。因此本文就不做过多的枯燥的数学原理的讲解。

下面我们只针对数学基础不一、偏工程应用的同学,用简单的语言描述来帮助理解SVM。

传统的SVM做的事情其实就是找到一个超平面,实现二分类,一类+1,一类-1。如上所示。它的目的就是使得两类的间隔最大。黑色的块表示距离分割面最近的样本向量,称为支持向量

如果我们在低维空间里找不到一个线性分类面把样本分开,SVM就为我们提供了一个思路:将数据从低维空间映射到高维空间后,就很可能使得这堆数据线性可分。比如说,我们要在猫科动物这个特征很局限的“低维空间”里去分猫和老虎,是比较困难的,因为他们很多特征比较相近。但是,如果我们有了更多的参考依据,从生物界的视角,即一个“高维空间”再去区分猫和老虎,我们就有了更多的理由来做出科学的辨别。至于如何低维映射到高维,就是一门数学上的学问了。

数据从输入到输出的过程其实和神经网络非常像:

K就是核函数,做一个内积的运算。SVM中核函数保证了低维空间里的计算量,输出到高维空间里。

K相当于隐含层的神经元。核函数的输出乘上权重,进入激活函数处。

SVM的改进:解决回归拟合问题的SVR

  • 为了利用SVM解决回归拟合方面的问题,Vapnik等人在SVM分 类的基础上引入了 不敏感损失函数,从而得到了回归型支持向 量机(Support Vector Machine for Regression,SVR)。

  • SVM应用于回归拟合分析时,其基本思想不再是寻找一个最优 分类面使得两类样本分开,而是寻找一个最优分类面使得所有 训练样本离该最优分类面的误差最小

多分类的SVM

当我们要分多类,而不是简单的二分类(+1,-1)时,怎么破?

解决思路:把多分类转化为二分类问题。具体来看有两个办法:

1. one-against-all

      Classification of new instances for one-against-all case is done by a winner-takes-all strategy, in which the classifier

with the highest output function assigns the class.

比如有一堆样本,打算分成10类。那么我们先取第1类训练标记为【1】。其他9类都是【-1】。这样经过一次SVM就可以得到第1类。

然后我们对【-1】中的9类继续做上述操作,分出第2类。

再以此类对,逐渐把第3、第4类分出来……直至分完。

2. one-against-one

       For the one-against-one approach, classification is done by a max-wins voting strategy, in which every classifier assigns the instance to one of the two classes, then the vote for the assigned class is increased by one vote, and finally the class with most votes determines the instance classification.

比如,一共有10种类别的一堆数据。那么我们就要训练C{2,5}=10(组合数)个SVM分类器。每个SVM分类器都可以区分出两种类别。我们把数据分别输入到这10个SVM分类器中,根据结果进行投票,依据得票数最多来确定它的类别。

QP求解

大致有下面4种方法:

分块算法(Chunking)

Osuna算法

序列最小优化算法(Sequential Minimal Optimization,SMO)

增量学习算法(IncrementalLearning)

数学原理比较难解释清楚,大家可以看Zhang Hao的那篇文章细究。

SVM的MATLAB实现:Libsvm

工具箱下载:https://github.com/cjlin1/libsvm

首先,要给macOS系统的Matlab,配置好xcode支持的编译器:https://blog.csdn.net/lyxleft/article/details/83756592

在MacOS X系统上,为matlab安装libsvm工具箱:https://www.jianshu.com/p/f45e1828ed85

重要函数:

  • meshgrid 交叉验证用

    • –  Generate X and Y arrays for 3-D plots

    • –  [X,Y] = meshgrid(x,y) –

  • svmtrain

    • –  Train support vector machine classifier

    • –  model = svmtrain(train_label,train_matrix,’libsvm_options’);

    • Options:可用的选项即表示的涵义如下:
        -s svm类型:SVM设置类型(默认0)
          0 -- C-SVC
          1 -- nu-SVC
          2 -- one-class SVM
          3 -- epsilon-SVR
          4 -- nu-SVR
        -t 核函数类型:核函数设置类型(默认2)
          0 -- linear: u'*v 线性
          1 -- polynomial: (gamma*u'*v + coef0)^degree   多项式
          2 -- radial basis function: exp(-gamma*|u-v|^2) RBF
          3 -- sigmoid: tanh(gamma*u'*v + coef0)
          4 -- precomputed kernel (kernel values in training_instance_matrix)
        -d degree:核函数中的degree设置(针对多项式核函数)(默认3)
        -g r(gama):核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)(默认1/ k)
        -r coef0:核函数中的coef0设置(针对多项式/sigmoid核函数)((默认0)
        -c cost:设置C-SVC,e -SVR和v-SVR的参数(损失函数)(默认1)  惩罚因子
        -n nu:设置v-SVC,一类SVM和v- SVR的参数(默认0.5)
        -p p:设置e -SVR 中损失函数p的值(默认0.1)
        -m cachesize:设置cache内存大小,以MB为单位(默认40)
        -e eps:设置允许的终止判据(默认0.001)
        -h shrinking:是否使用启发式,0或1(默认1)
        -wi weight:设置第几类的参数C为weight*C(C-SVC中的C)(默认1)
        -v n: n-fold交互检验模式,n为fold的个数,必须大于等于2
        其中-g选项中的k是指输入数据中的属性数。option -v 随机地将数据剖分为n部分并计算交互检验准确度和均方根误差。
         以上这些参数设置可以按照SVM的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。

  • svmpredict

    • –  Predict data using support vector machine

    • –  [predict_label,accuracy] = svmpredict(test_label,test_matrix,model);

下面要用到的数据集在:链接:https://pan.baidu.com/s/1XwhynjKuJOVsa5Nxi9NVaA  密码:d0u7

【实例】用SVM分类

%% I. 清空环境变量
clear all
clc

%% II. 导入数据
load BreastTissue_data.mat

%%
% 1. 随机产生训练集和测试集
n = randperm(size(matrix,1));

%%
% 2. 训练集――80个样本
train_matrix = matrix(n(1:80),:);
train_label = label(n(1:80),:);

%%
% 3. 测试集――26个样本
test_matrix = matrix(n(81:end),:);
test_label = label(n(81:end),:);

%% III. 数据归一化
[Train_matrix,PS] = mapminmax(train_matrix');
Train_matrix = Train_matrix';
Test_matrix = mapminmax('apply',test_matrix',PS);
Test_matrix = Test_matrix';

%% IV. SVM创建/训练(RBF核函数)
%%
% 1. 寻找最佳c/g参数――交叉验证方法
[c,g] = meshgrid(-10:0.2:10,-10:0.2:10);
[m,n] = size(c);
cg = zeros(m,n);
eps = 10^(-4);
v = 5;
bestc = 1;
bestg = 0.1;
bestacc = 0;
for i = 1:m
    for j = 1:n
        cmd = ['-v ',num2str(v),' -t 2',' -c ',num2str(2^c(i,j)),' -g ',num2str(2^g(i,j))];
        cg(i,j) = svmtrain(train_label,Train_matrix,cmd);     
        if cg(i,j) > bestacc
            bestacc = cg(i,j);
            bestc = 2^c(i,j);
            bestg = 2^g(i,j);
        end        
        if abs( cg(i,j)-bestacc )<=eps && bestc > 2^c(i,j) 
            bestacc = cg(i,j);
            bestc = 2^c(i,j);
            bestg = 2^g(i,j);
        end               
    end
end
cmd = [' -t 2',' -c ',num2str(bestc),' -g ',num2str(bestg)];

%%
% 2. 创建/训练SVM模型
model = svmtrain(train_label,Train_matrix,cmd);

%% V. SVM仿真测试
[predict_label_1,accuracy_1] = svmpredict(train_label,Train_matrix,model);
[predict_label_2,accuracy_2] = svmpredict(test_label,Test_matrix,model);
result_1 = [train_label predict_label_1];
result_2 = [test_label predict_label_2];

%% VI. 绘图
figure
plot(1:length(test_label),test_label,'r-*')
hold on
plot(1:length(test_label),predict_label_2,'b:o')
grid on
legend('真实类别','预测类别')
xlabel('测试集样本编号')
ylabel('测试集样本类别')
string = {'测试集SVM预测结果对比(RBF核函数)';
          ['accuracy = ' num2str(accuracy_2(1)) '%']};
title(string)

【实例】用SVM回归

%% I. 清空环境变量
clear all
clc

%% II. 导入数据
load concrete_data.mat

%%
% 1. 随机产生训练集和测试集
n = randperm(size(attributes,2));

%%
% 2. 训练集――80个样本
p_train = attributes(:,n(1:80))';
t_train = strength(:,n(1:80))';

%%
% 3. 测试集――23个样本
p_test = attributes(:,n(81:end))';
t_test = strength(:,n(81:end))';

%% III. 数据归一化
%%
% 1. 训练集
[pn_train,inputps] = mapminmax(p_train');
pn_train = pn_train';
pn_test = mapminmax('apply',p_test',inputps);
pn_test = pn_test';

%%
% 2. 测试集
[tn_train,outputps] = mapminmax(t_train');
tn_train = tn_train';
tn_test = mapminmax('apply',t_test',outputps);
tn_test = tn_test';

%% IV. SVM模型创建/训练
%%
% 1. 寻找最佳c参数/g参数
[c,g] = meshgrid(-10:0.5:10,-10:0.5:10);
[m,n] = size(c);
cg = zeros(m,n);
eps = 10^(-4);
v = 5;
bestc = 0;
bestg = 0;
error = Inf;
for i = 1:m
    for j = 1:n
        cmd = ['-v ',num2str(v),' -t 2',' -c ',num2str(2^c(i,j)),' -g ',num2str(2^g(i,j) ),' -s 3 -p 0.1'];
        cg(i,j) = svmtrain(tn_train,pn_train,cmd);
        if cg(i,j) < error
            error = cg(i,j);
            bestc = 2^c(i,j);
            bestg = 2^g(i,j);
        end
        if abs(cg(i,j) - error) <= eps && bestc > 2^c(i,j)
            error = cg(i,j);
            bestc = 2^c(i,j);
            bestg = 2^g(i,j);
        end
    end
end

%%
% 2. 创建/训练SVM  
cmd = [' -t 2',' -c ',num2str(bestc),' -g ',num2str(bestg),' -s 3 -p 0.01'];
model = svmtrain(tn_train,pn_train,cmd);

%% V. SVM仿真预测
[Predict_1,error_1] = svmpredict(tn_train,pn_train,model);
[Predict_2,error_2] = svmpredict(tn_test,pn_test,model);

%%
% 1. 反归一化
predict_1 = mapminmax('reverse',Predict_1,outputps);
predict_2 = mapminmax('reverse',Predict_2,outputps);

%%
% 2. 结果对比
result_1 = [t_train predict_1];
result_2 = [t_test predict_2];

%% VI. 绘图
figure(1)
plot(1:length(t_train),t_train,'r-*',1:length(t_train),predict_1,'b:o')
grid on
legend('真实值','预测值')
xlabel('样本编号')
ylabel('耐压强度')
string_1 = {'训练集预测结果对比';
           ['mse = ' num2str(error_1(2)) ' R^2 = ' num2str(error_1(3))]};
title(string_1)
figure(2)
plot(1:length(t_test),t_test,'r-*',1:length(t_test),predict_2,'b:o')
grid on
legend('真实值','预测值')
xlabel('样本编号')
ylabel('耐压强度')
string_2 = {'测试集预测结果对比';
           ['mse = ' num2str(error_2(2)) ' R^2 = ' num2str(error_2(3))]};
title(string_2)

%% VII. BP神经网络
%%
% 1. 数据转置
pn_train = pn_train';
tn_train = tn_train';
pn_test = pn_test';
tn_test = tn_test';

%%
% 2. 创建BP神经网络
net = newff(pn_train,tn_train,10);

%%
% 3. 设置训练参数
net.trainParam.epochs = 1000;
net.trainParam.goal = 1e-3;
net.trainParam.show = 10;
net.trainParam.lr = 0.1;

%%
% 4. 训练网络
net = train(net,pn_train,tn_train);

%%
% 5. 仿真测试
tn_sim = sim(net,pn_test);

%%
% 6. 均方误差
E = mse(tn_sim - tn_test);

%%
% 7. 决定系数
N = size(t_test,1);
R2=(N*sum(tn_sim.*tn_test)-sum(tn_sim)*sum(tn_test))^2/((N*sum((tn_sim).^2)-(sum(tn_sim))^2)*(N*sum((tn_test).^2)-(sum(tn_test))^2)); 

%%
% 8. 反归一化
t_sim = mapminmax('reverse',tn_sim,outputps);

%%
% 9. 绘图
figure(3)
plot(1:length(t_test),t_test,'r-*',1:length(t_test),t_sim,'b:o')
grid on
legend('真实值','预测值')
xlabel('样本编号')
ylabel('耐压强度')
string_3 = {'测试集预测结果对比(BP神经网络)';
           ['mse = ' num2str(E) ' R^2 = ' num2str(R2)]};
title(string_3)

更正:

有些同学跑不了我给的程序。引用评论里同学的指导:(最近太忙还没时间细看,先贴在此处给大家参考)

第一个实例:用SVM分类 中,第62 63行代码 [predict_label_1,accuracy_1] = svmpredict(train_label,Train_matrix,model); [predict_label_2,accuracy_2] = svmpredict(test_label,Test_matrix,model); 需要改为: [predict_label_1,accuracy_1,decision_values1] = svmpredict(train_label,Train_matrix,model); [predict_label_2,accuracy_2,decision_values2] = svmpredict(test_label,Test_matrix,model); 第二个实例:用SVM回归 中,第71 72行代码 [Predict_1,error_1] = svmpredict(tn_train,pn_train,model); [Predict_2,error_2] = svmpredict(tn_test,pn_test,model); 需要改为: [Predict_1,error_1,decision_values1] = svmpredict(tn_train,pn_train,model); [Predict_2,error_2,decision_values2] = svmpredict(tn_test,pn_test,model);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单粗暴理解支持向量机(SVM)及其MATLAB实例 的相关文章

  • NOI 2018 游记

    Day 2Day 1Day 0Day 1Day 2Day 3Day 4Day inftyDay 5 Day 2 昨天打完了最后一个一场模拟赛 xff0c 又垫底啦 xff01 本来之前我很少垫底的 xff0c 不知道为什么最后四场模拟赛一直
  • MySQL集群架构

    第1节 集群架构设计 在集群架构设计时 xff0c 主要遵从下面三个维度 xff1a 可用性 扩展性 一致性 1 1 可用性设计 站点高可用 xff0c 冗余站点 xff1b 服务高可用 xff0c 冗余服务 xff1b 数据高可用 xff
  • CF 1008D Pave the Parallelepiped

    传送门题目大意 样例输入样例输出样例解释 思路参考代码总结 传送门 题目大意 给你一个 A B C A B C 的长方体 xff0c 你要把它切成很多块大小都是 a b c
  • Direct2D 学习笔记

    文章目录 Direct2DD2D 是什么D2D 适合谁开发环境发布平台入门我能找到例子吗一 第一个 D2D 程序 Hello Direct2D1 工厂2 呈现器3 渲染4 运行结果 二 Direct2D 画图实践 Random Graphi
  • Python 学习笔记——入门

    文章目录 Python 是什么一 推荐的教程二 这篇学习笔记适合什么人三 环境1 操作系统对于 Windows对于 Ubuntu对于其他操作系统 2 Python对于 Windows安装步骤1 下载2 安装 测试是否成功安装退出 Pytho
  • CF 1166A Silent Classroom

    文章目录 传送门题目大意思路别人的思路参考代码Python 学习笔记 传送门 题目大意 有 n n 100
  • SHGetKnownFolderPath function

    原文 SHGetKnownFolderPath 通过一个 KNOWNFOLDERID 标志获取对应已知文件夹的完整路径 Retrieves the full path of a known folder identified by the
  • WM_DPICHANGED message

    原文 WM DPICHANGED message 当窗口的 DPI 改变时将收到此消息 DPI 是窗口的缩放比例 有多种情况会导致 DPI 改变 xff0c 如下表列出 xff1a 窗口被移动到有不同 DPI 的显示器 窗口所在显示器的 D
  • WSL运行python程序关于路径的坑

    安装了wsl xff08 Windows下的Linux子系统 xff09 xff0c 跑python代码时 xff0c 发现路径有问题 总结来说 xff0c 如果是跑linux里的代码 xff0c 那么其中的绝对路径就按linux的地址解析
  • 【基础编程题】Java基础====键盘输入学生成绩,计算后按总分高低顺序存入磁盘文件txt

    要求 xff1a 有五个学生 xff0c 每个学生有3门课程的成绩从键盘输入以上数据 xff08 包括姓名 xff0c 三门课成绩 xff09 输入的格式 xff1a 如 xff1a zhangsan 30 40 60计算出总成绩 xff0
  • MySQL 配置文件位置及命名。

    MySQL 配置文件位置及命名 使用 mysqladmin 或 mysql xff0c 会提示 MySQL 加载配置文件的顺序及文件命名规范 span class token keyword Default span options are
  • Codeforces 1419B. Stairs 递归

    Codeforces 1419B Stairs 递归 原题链接https codeforces com problemset problem 1419 B 样例 输入 5 2 1 49 5 20 50 6 20 50 5 3 8 9 13
  • dos中定义变量与引用变量以及四则运算

    在dos中使用set定义变量 xff1a set a 61 8 注意等号两边没有空格 引用变量如 xff1a echo a 将打印a的值 dos中要使用算术运算 xff0c 需要使用 set 命令 xff1a set a val 61 3
  • Python将计算结果拷贝至粘贴板

    前言 xff1a 我们知道在使用ctrl 43 c复制文字时 xff0c 实际是将文字复制到了粘贴板中 xff08 内存 xff09 xff0c 而在实际应用中 xff0c 除了将Python的计算结果打印外 xff0c 有时还想进行自动复
  • Java反射——通过Java反射机制设置属性值

    本示例使用Java反射机制分别设置当前类的private public属性以及其父类的private属性来说明如何通过Java反射机制设置属性值 xff08 注 xff1a 设置继承的父类属性时 xff0c 无法通过当前类的Class对象直
  • 7-9 选择法排序之过程 (15 分)

    7 9 选择法排序之过程 15 分 本题要求使用选择法排序 xff0c 将给定的n个整数从小到大排序后输出 xff0c 并输出排序过程中每一步的中间结果 选择排序的算法步骤如下 xff1a 第0步 xff1a 在未排序的n个数 xff08
  • Debian配置清华源

    确定debian的系统版本 plc 64 debian cat etc os release PRETTY NAME 61 34 Debian GNU Linux 9 stretch 34 NAME 61 34 Debian GNU Lin
  • AAC音频编码格式介绍

    一 概述及分类 AAC Advanced Audio Coding 的缩写 xff0c 中文称为 高级音频编码 xff0c 被手机界称为 21世纪数据压缩方式 xff0c AAC所采用的运算方式是与MP3的运算有所不同 xff0c AAC同
  • Ubuntu系统失败之----安装U盘不能存放其它文件

    Ubuntu安装失败的经验贴 背景 xff1a 笔者在数月之前制作了一个Ubuntu 14 4系统安装盘 xff08 当时把U盘格式化 制作了引导并且拷贝了镜像 xff09 U盘的特点是除了系统相关文件之外没有其它任何文件 当时在三台联想笔
  • 结构体sizeof不想字节对齐

    问题描述 xff1a 笔者在做一个项目 xff1a 硬件要访问内存中按照Spec格式定义 的一段数据包 在C语言中一般使用结构体初始化这个数据包 xff0c 因为可以方便配置各个字段 但结构体默认需要字节对齐的 xff08 sizeof和实

随机推荐

  • C/C++语言static修饰函数的作用

    描述 xff1a 在C C 43 43 语言程序中 xff0c 特别是的大型程序 xff0c 函数名前往往用static关键词修饰 作用 xff1a 主要的作用是避免命名冲突 static函数与一般函数作用域不同 xff0c 仅在本文件有效
  • ubuntu16.04升级18.04(再次作死)

    继上次升级glibc版本作了一次大死后 xff0c 手又痒了 xff0c 又觉得我可以了 来继续升级ubuntu16 04升级到 ubuntu18 04 最主要的原因是ubuntu自带的python只到了3 5的版本 而我需要python3
  • 初始C语言——统计字符串中的字母,数字和其他符号 的个数

    define CRT SECURE NO WARNINGS 1 防止visual studio2013以上版本scanf报错 xff0c vc6 0环境可忽略 include lt stdio h gt int main int a 61
  • Linux下开发调试中大型C语言代码-如何提高效率

    背景 xff1a 在Linux下开发中大型C语言程序 xff08 包括编写 编译调试等步骤 xff09 时 xff0c 尤其大部分代码都是原创的情况下 以下的经验往往能提高调试效率 经验 xff1a xff08 1 xff09 Linux命
  • 《C语言中分配了动态内存后一定要释放吗?》

    问 xff1a 比如main函数里有一句 malloc 后面没有free 1 那么当main结束后 xff0c 动态分配的内存不会随之释放吗 xff1f 2 如果程序结束能自动释放 xff0c 那么还加上free xff08 xff09 x
  • Qemu使用心得

    使用Qemu的心得体会如下 xff1a xff08 1 xff09 在QEMU源码中增加自己的 c实现 xff0c 编译后出现很多个错误如 xff1a error storage class specified for parameter
  • 转载:malloc和free底层实现

    转载 xff1a malloc和free底层实现 内存管理内幕 Linux内存管理 xff1a Malloc 本文引用了下面这篇文章 xff0c 读完下面 xff0c 应该读下上面两篇文章 xff0c 其中 xff0c 内存管理内幕 提供了
  • qemu tcg代码执行流程

    转自 xff1a http blog csdn net alloc7 article details 7719823 一 qemu简介 qemu是使用动态二进制翻译的cpu模拟器 xff0c 它支持两种运行模式 xff1a 全系统模拟和用户
  • c语言如何调用c++(本文从qemu开发中总结)

    背景 xff1a 有时候一个工程中有c语言编写的代码 c xff0c 也有c 43 43 cpp 编写的 xff0c 分别用 xff43 语言编译器 xff08 这里指 xff47 xff43 xff43 xff09 和 xff43 xff
  • c++常错语法

    1 new T 代表创建一个T类的对象指针 xff0c new T 标识创建T类对象数组指针 2 template模板类只能把成员函数都定义在 h中 xff0c 分开 h和 cpp会报链接错误 3 类A 的成员变量包含B的对象B b xff
  • UEFI EDK2开发环境设置关键点/修改环境变量

    1 问题描述 Linux下当修改了已经编译过的EDK2工程顶层路径后 进入工程顶层路径source edksetup sh会报错 2 解决步骤 有一个隐藏问题非常容易被忽视 那就是EDK2工程的环境变量可能还是原来的旧的 这时候 1 进入工
  • linux静态库.a使用常见错误

    在linux中如果一个程序需要用到 a 有以下几点需要注意 1 如果x o与y o中用到了静态xx a中的函数 不能用gcc xx a o test x o y o这种方式编译 会提示那些函数undefined 正确的做法是gcc o te
  • C/C++多线程常见问题

    1 问题 1 1 创建线程后是否立马开始并行执行 答 主线程创建了子线程之后 后者并不是立即就开始运行了 至少在Linux操作系统下 1 子线程和主线程运行在一个core上 那还需要等待主线程交出core控制权 可能是时间片耗尽 2 子线程
  • 2020 年百度之星·程序设计大赛 - 初赛二 题解

    废话 丑话说在前头 xff0c T8我不会 xff08 没错是指我会出丑 xff09 T1 既然要玩尽可能多轮 xff0c 那么每轮投入的钱就要最少 xff0c 也就是 m m m 元 xff0c 那么可以算出每轮游戏会亏损
  • QEMU内存管理

    QEMU内存管理 1 QEMU中管理的Memory有 xff1a 普通的RAM MMIO 内存控制器 将物理内存动态的映射到不同的虚拟地址空间 2 QEMU的Memory是以一个MemoryRegin为节点组成的非循环图的形式组织的 叶子节
  • Matlab实现基于二维伽马函数的光照不均匀图像自适应校正算法

    Matlab程序 xff1a 基于二维伽马函数的光照不均匀图像自适应校正算法 clc close all tic im 61 imread 39 你的图片 jpg 39 figure imshow im title 39 原图 39 h s
  • SCI回复评审意见模板

    一般反馈回来修改时 xff0c 要给编辑重新写一封cover letter xff0c 表示尊重与感谢 xff0c 范文如下 句式大家可以依照自己的习惯表达修改 xff0c 多参考他人经验 xff09 Dear XX xff08 给你回信的
  • 毕业快乐 —— 写于2020年3月13日

    很久没有经营这个博客了 今天来写点什么罢 2020的春天 xff0c 由于猝不及防的疫情 xff0c 参加了一场特殊的毕业答辩 线上答辩形式 没有西装和鲜花 xff0c 似乎缺少了一些仪式感 但毕业似乎真真切切就是一件水到渠成的事情 xff
  • Mac连上WIFI但是无法上网的3种解决方案

    一般我们最先会认为是DNS问题 xff0c 你可以试下用ip访问一个服务器 xff08 网站 xff09 看下行不行 xff0c 如果也不行那就应该不是DNS的问题了 或者改变一下DNS xff0c 如114 xff0c 或者自己内网要求的
  • 简单粗暴理解支持向量机(SVM)及其MATLAB实例

    目录 SVM概述 SVM的改进 xff1a 解决回归拟合问题的SVR 多分类的SVM QP求解 SVM的MATLAB实现 xff1a Libsvm 实例 用SVM分类 实例 用SVM回归 SVM概述 SVM已经是非常流行 大家都有所耳闻的技