【ML实验5】SVM(手写数字识别、核方法)

news2025/1/20 6:01:36

实验代码获取 github repo
山东大学机器学习课程资源索引


实验目的

在这里插入图片描述

实验内容

在这里插入图片描述

这里并不是通过 KTT 条件转化,而是对偶问题和原问题为强对偶关系,可以通过 KTT 条件进行化简。

x = α = [ α 1 , α 2 , . . . , α n ] T x=\alpha=[\alpha_1,\alpha_2,...,\alpha_n]^T x=α=[α1,α2,...,αn]T,则有

∑ i , j = 1 m α i y ( i ) y ( j ) < x ( i ) , x ( j ) > α j \sum^m_{i,j=1}\alpha_iy^{(i)}y^{(j)}<x^{(i)},x^{(j)}>\alpha_j i,j=1mαiy(i)y(j)<x(i),x(j)>αj

= ∑ i = 1 m ∑ j = 1 m α i y ( i ) y ( j ) < x ( i ) , x ( j ) > α j =\sum^m_{i=1}\sum^m_{j=1}\alpha_iy^{(i)}y^{(j)}<x^{(i)},x^{(j)}>\alpha_j =i=1mj=1mαiy(i)y(j)<x(i),x(j)>αj

= ∑ i = 1 m α i ∑ j = 1 m y ( i ) y ( j ) < x ( i ) , x ( j ) > α j =\sum^m_{i=1}\alpha_i\sum^m_{j=1}y^{(i)}y^{(j)}<x^{(i)},x^{(j)}>\alpha_j =i=1mαij=1my(i)y(j)<x(i),x(j)>αj

令矩阵 H H H满足 H i j = y ( i ) y ( j ) < x ( i ) , x ( j ) > H_{ij}=y^{(i)}y^{(j)}<x^{(i)},x^{(j)}> Hij=y(i)y(j)<x(i),x(j)>,则进一步

= ∑ i = 1 m α i ∑ j = 1 m H i j α j =\sum^m_{i=1}\alpha_i\sum^m_{j=1}H_{ij}\alpha_j =i=1mαij=1mHijαj

= ∑ i = 1 m α i H i α =\sum^m_{i=1}\alpha_iH_{i}\alpha =i=1mαiHiα

= α T H α = x T H x =\alpha^TH\alpha=x^THx =αTHα=xTHx

其实,基于同样的技巧, H H H 矩阵可以写成 H = Y T X X T Y = ( Y . ∗ X ) ( Y . ∗ X ) T H=Y^TXX^TY=(Y.*X)(Y.*X)^T H=YTXXTY=(Y.X)(Y.X)T.

其中, ( X X T ) i j = x ( i ) ( x ( j ) ) T = < x ( i ) , x ( j ) > (XX^T)_{ij}=x^{(i)}(x^{(j)})^T=<x^{(i)},x^{(j)}> (XXT)ij=x(i)(x(j))T=<x(i),x(j)>,这里 x ( i ) x^{(i)} x(i) 是行向量。

code 中将较小的 a l p h a alpha alpha 默认为0,因为求解器用的是迭代方法,返回数值解,可能收敛到一个很小但不为0的值;
其他 a l p h a alpha alpha 对应的是 support vector,代入公式计算 ω ∗ \omega^* ω b ∗ b^* b.
在这里插入图片描述
code

    % 构建目标函数
    H = zeros(m);
    for i = 1 : m
        for j = 1 : m
            H(i, j) = y(i) * y (j) * x(i, :) * x(j, :)';
        end
    end
    % H = (y .* x) * (y .* x)';
    % H = (H + H') / 2;
    f = (-1) * ones(m, 1);
    % 构建约束
    Aeq = y';
    beq = 0;
    lb = zeros(m, 1);
    ub = zeros(m, 1);
    ub(:) = C;
    % 利用quadprog求解器求解对偶问题
    % quadprog(H,f,A,b,Aeq,beq,lb,ub)
    [alpha, fval] = quadprog(H, f, [], [], Aeq, beq, lb, ub);

    % 求support vector
    alpha(find(alpha < 1e-8)) = 0;
    sv = find(alpha > 0 & alpha < C);
    w = 0;  % omega
    for i = 1 : length(sv)
        w = w + alpha(sv(i)) * y(sv(i)) * x (sv(i), :)';
    end

    num = y - x * w;
    b = sum(num(sv)) / length(sv);

在 linear-separable 数据集上验证

在这里插入图片描述
在这里插入图片描述

正则项参数C变化,带来优化目标的“倾斜”,但是 margin 和 C 很难发掘出精确的代数关系(经过一个非线性问题的求解),只能说明它们的相关性。

在这里插入图片描述

做手写数字识别(仅有0和1):

由于训练集太大,采用不重复采样:

m = length(x);
% 使用全部训练集,H矩阵大小为12665*12665,运算巨大,耗时较久
% 因此采样部分训练集,大小为tr_size
rp = randperm(m);
tr_size = 1000;
samp = rp(1 : tr_size);
x = x(samp, :); y = y(samp);
m = length(x);

在这里插入图片描述

核方法

在这里插入图片描述

预处理 kernal matrix,之后将 < x ( i ) , x ( j ) > <x^{(i)},x^{(j)}> <x(i),x(j)> 替换为 k m a t ( i , j ) kmat(i,j) kmat(i,j).

% 获取基于核函数Radial Basis Function计算的关系矩阵kmat
function kmat = get_kernel_mat(x, gamma)
    kmat = [];
    for i = 1 : length(x)
        for j = 1 : length(x)
            kmat(i, j) = exp(-gamma * norm(x(i, :) - x(j, :)) ^ 2);
        end
    end
end

之后,决策函数不直接计算,也无法计算,因为 mapping 函数具有无穷维度,实际上通过 k m a t kmat kmat 可以绕过直接计算 mapping ,如下图,实际就是代换 ω ∗ \omega^* ω,可以得到 ϕ T ( x ( i ) ) ϕ ( x ( j ) ) \phi^T(x^{(i)})\phi(x^{(j)}) ϕT(x(i))ϕ(x(j)).

在这里插入图片描述

Mark the usage of contour func:
Here since vals only have two values 1 and -1,contour lines also become the boundaries.

    % Make classification predictions over a grid of values
    xplot = linspace(min(x(:, 1)), max(x(:, 1)), 100)';
    yplot = linspace(min(x(:, 2)), max(x(:, 2)), 100)';
    [X, Y] = meshgrid(xplot, yplot);
    vals = zeros(size(X));
    % For each point in this grid, you need to compute its decision
    % value. Store the decision values in vals.
	% ...
    hold on
    plot(x(pos, 1), x(pos, 2), '.r');
    plot(x(neg, 1), x(neg, 2), '.b');
    xlabel('x_1'); ylabel('x_2');
    str = strcat('\gamma=', num2str(gamma(t)));
    title(str);
    % Plot the SVM boundary
    colormap bone;
    contour(X, Y, vals, [0 0], 'LineWidth', 2);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/106011.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

极狐阿尔法S 全新HI版在上海率先推送城区NCA

继深圳之后&#xff0c;12月19日&#xff0c;极狐阿尔法S 全新HI版城区NCA&#xff08;即城区智驾导航辅助功能&#xff09;交付上海车主&#xff0c;将胜任城区复杂环境的“点到点”智驾融入更多用户的生活中。 此前&#xff0c;极狐阿尔法S 全新HI版已面向全国车主推送第二次…

Unreal Engine项目目录结构

目录 Engine 引擎源码文件 Games 项目工程文件 Visualizer VS编辑器配置文件 之前说的是工程目录结构&#xff0c;这次来说项目目录结构。 这里只是举了个例子&#xff0c;实际请根据不同的UE版本自行分析。 Engine 引擎源码文件 虚幻是开源的&#xff0c;我们可以直接在工…

05-Golang的基本数据类型

Golang的基本数据类型变量数据类型整型类型基本使用及细节基本介绍整数类型演示案例整型的使用细节浮点类型基本使用及细节基本介绍浮点型的分类案例演示使用细节字符类型基本使用及细节基本介绍案例演示字符类型本质探讨布尔类型的使用基本介绍字符串类型基本使用及细节基本介…

复变函数的积分

复变函数的积分化解成曲线积分的问题。 那化成第一类曲线积分还是第二类曲线积分&#xff1f;&#xff08;高等数学 中有讲第一类曲线积分和第二类曲线积分&#xff09;。 路径是有方向的&#xff0c;由起点和终点不同&#xff0c;路径有正向和负向。 复变函数的积分归结起来…

「学习方法」Scratch、Python、C++如何学才能融会贯通?

前言 相信很多家长朋友都发现一个问题&#xff1a;“编程教育正在以飞快的速度渗透于孩子们的培养体系中&#xff0c;这是为什么呢&#xff1f;原因很简单&#xff0c;这是因为通过专业的编程教育可以全面提升孩子的逻辑思维、创造力、动手能力等&#xff0c;让孩子们拥有更全…

线程池的使用

线程池 3大方法、7大参数、4种拒绝策略 好处&#xff1a;降低资源的消耗、提高响应的速度、方便管理、 线程池可以理解为银行业务 三大方法 第1大方法&#xff1a;单个线程 ExecutorService threadExecutor Executors.newSingleThreadExecutor(); 第2大方法&a…

c语言 操作符详解例题 数据存储 指针初阶 水仙花数 杨辉三角 逆序字符串 喝汽水问题 打印图形 猜凶手

【题目名称】 下面代码的结果是&#xff1a;a #include <stdio.h> int i; int main() {i--; sizeof的返回值是无符号整型if (i > sizeof(i)) i四个字节所以是4。算出的结果类型是unsigned int无符号和有符号比较大小 会先把有符号整型转化为无符号。 -1放到内…

浏览器底部导航栏遮盖问题

欧吼&#xff0c;算是遇到两次了这种问题。每次解决完都觉得很无语&#x1f92e; 先看问题如图&#xff08;怕公司说我泄露他们啥信息&#xff0c;于是打了非常离谱且难看的马赛克&#x1f60a;&#xff09;&#xff1a; 本来要在底部导航栏上方展示底部信息。 电脑上看倒是好…

怎样设计产品帮助中心?以下几点不可忽视

在日常产品的使用过程中&#xff0c;我们经常会遇到一些关于产品的使用相关问题&#xff0c;此时我们会去翻阅产品的说明书&#xff0c;而对于线上的产品来说&#xff0c;一般都会搭配对应的帮助文档&#xff0c;帮助文档可以提供关于用户在使用过程中遇到的各种问题的解答&…

【再学Tensorflow2】TensorFlow2的建模流程:Titanic生存预测

TensorFlow2的建模流程1. 使用Tensorflow实现神经网络模型的一般流程2. Titanic生存预测问题2.1 数据准备2.2 定义模型2.3 训练模型2.4 模型评估2.5 使用模型2.6 保存模型参考资料在机器学习和深度学习领域&#xff0c;通常使用TensorFlow来实现机器学习模型&#xff0c;尤其常…

03Python算数运算符及变量基本使用

算数运算符 算数运算符 是完成基本的算术运算使用的符号&#xff0c;用来处理四则运算 运算符描述实例加10 20 30-减10 - 20 -10*乘10 * 20 200/除10 / 20 0.5//取整除返回除法的整数部分&#xff08;商&#xff09; 9 // 2 输出结果 4%取余数返回除法的余数 9 % 2 1*…

干货 | 云原生时代的灰度发布有几种“姿势”?

随着企业数字化转型进程不断发展&#xff0c;云原生时代的来临&#xff0c;企业应用越来越多&#xff0c;不得不面对应用程序升级的巨大挑战。传统的停机发布方式&#xff0c;新旧版本应用切换少则停机30分钟&#xff0c;多则停机10小时以上&#xff0c;愈发无法满足业务端的需…

java入门及环境配置

java三大版本 JavaSE: 标准版&#xff08;桌面程序&#xff0c;控制台开发........) JavaEE: 嵌入式开发&#xff08;手机&#xff0c;小家电.....&#xff09; JavaEE: E企业级开发&#xff08;web端&#xff0c;服务器开发...&#xff09; JDK、JRE、JVM: Java安装开发环境&a…

信息化时代企业数据防泄露工作该怎么做

场景描述 信息化时代发展迅速&#xff0c;数据防泄露一词也频繁的出现在我们身边。无论企业或政府单位&#xff0c;无纸化办公场景越来越多&#xff0c;数据泄露的时间也层出不穷。例如&#xff1a;世界最大职业中介网站Monster遭到黑客大规模攻击&#xff0c;黑客窃取在网站注…

计算机毕设Python+Vue药品销售平台(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

模板二(基础算法)

目录 快速排序 归并排序 二分 整数二分 浮点数二分 前缀和 一维前缀和 二维前缀和 差分 一维差分 二维差分 双指针 位运算 离散化 区间合并 快速排序 方法一&#xff1a;定义两个新数组&#xff0c;a[ ],b[ ],每次将大于x的放到a中&#xff0c;小于x的放到b中&…

【矩阵论】6.范数理论——范数估计——许尔估计谱估计

6.3 许尔估计 任意方阵 A(aij)nnA(a_{ij})_{n\times n}A(aij​)nn​ &#xff0c;全体根 λ(A){λ1,⋯,λn}\lambda(A)\{\lambda_1,\cdots,\lambda_n\}λ(A){λ1​,⋯,λn​} &#xff0c;满足 ∣λ1∣2⋯∣λn∣2≤∑∣aij∣2\vert \lambda_1\vert^2\cdots\vert \lambda_n\ve…

数据存储格式

文章目录数据存储格式1 行列存储比较2 ORC文件格式2.1 文件级2.1.1 Post scripts2.1.2 File Footer2.1.3 File MetaData2.2 Stripe级2.2.1 Stripe Footer2.2.2 Row Data2.2.3 Index Data3 Parquet文件格式3.1 Header3.2 Data3.2.1 Row Group3.2.2 Column Chunk3.2.3 Page3.3 Fo…

正则表达式判断数字

判断 正负整数,正负小数 表达式: ^[-]?([0]{1,1}|[1-9]{1,1}[0-9]*?)[.]?[\\d]{1,}$ import java.util.Scanner; import java.util.regex.Pattern; public static void main(String[] args) { Pattern pattern Pattern.compile("^[-]?([0]{1,1}|[1-9]{1,1}…

3dtiles数据解析

1.解析json文件 2.解析b3dm模型 (1)b3dm模型文件时二进制文件&#xff0c;其中包含glTF文件&#xff1a; 当使用tiny_gltf库解析glTF时&#xff0c;需要减去(28byte featuretable的byte batchTable的byte ): bool TinyGLTF::ExtractGltfFromMemory(Model *model,std::string…