Paul C's Blog

To be funny,to grow up!

0%

卷积核的作用

  • 一个图像矩阵经过一个卷积核的卷积操作后,得到了另一个矩阵,这个矩阵叫做特征映射(feature map)。

  • 每一个卷积核都可以提取特定的特征,不同的卷积核提取不同的特征

利用附录里的卷积核测试代码

借助图中的三个卷积核,

1693193110387

分别可以提取X的左上右下、中间和右上左下特征。将图片X用三个卷积核计算,得到三个 特征矩阵 。

获得下面的热力图。

1693192781178

可以发现, 其中的值,

  • 越接近为1表示对应位置和卷积核代表的特征越接近,

  • 越是接近-1,表示对应位置和卷积核代表的反向特征越匹配,

  • 而值接近0的表示对应位置没有任何匹配或者说没有什么关联。

GIN模型

1.模型结构

附录

卷积核效果测试代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
#热图用处
#相关性矩阵: 查看多个变量之间的关系。颜色可以帮助你快速识别哪些变量之间有强烈的正相关(例如,显示为深红色)或强烈的负相关(例如,显示为深蓝色)。

#混淆矩阵: 分类任务中,混淆矩阵表示出模型在每个类别上的表现。使用热图可以更容易地识别模型在哪些类别上表现不佳。

#数据密度: 如果你有两个维度的大量数据点,可以使用热图来查看哪些区域的数据点最多,哪些区域的数据点最少。
from scipy import signal

# 生成一个简单的示例图像
image = -1 * np.ones((9, 9), dtype=int)

# 将主对角线上的元素设置为1
np.fill_diagonal(image, 1)

# 将副对角线上的元素设置为1
np.fill_diagonal(np.fliplr(image), 1)

# 定义三个卷积核
kernel1 = np.array([
[1, -1, -1],
[-1, 1, -1],
[-1, -1, 1]
]) /9 # \边缘检测
kernel2 = np.array([
[-1, -1, 1],
[-1, 1, -1],
[1, -1, -1]
]) /9 # \边缘检测
kernel3 = np.array([
[1, -1, 1],
[-1, 1, -1],
[1, -1, 1]
])/9 # X边缘检测

kernel4 = np.array([
[0, -1, 0],
[-1, 1, -1],
[0, -1, 0]
]) /9 # 锐化

kernel5 = np.array([
[1, 1, 1],
[1, 1, 1],
[1, 1, 1]
]) / 9 # 平均/模糊

# 对图像进行卷积操作
conv_image1 = signal.convolve2d(image, kernel1, mode='same')
conv_image2 = signal.convolve2d(image, kernel2, mode='same')
conv_image3 = signal.convolve2d(image, kernel3, mode='same')

# 可视化结果
fig, axarr = plt.subplots(1, 4, figsize=(20, 5))
#annot=True表示单元格中显示数据值
sns.heatmap(image, ax=axarr[0], annot=True, cmap='gray')
axarr[0].set_title("Original Image")

sns.heatmap(conv_image1, ax=axarr[1], annot=True, cmap='gray')
axarr[1].set_title("Convolved with Kernel 1")

sns.heatmap(conv_image2, ax=axarr[2], annot=True, cmap='gray')
axarr[2].set_title("Convolved with Kernel 2")

sns.heatmap(conv_image3, ax=axarr[3], annot=True, cmap='gray')
axarr[3].set_title("Convolved with Kernel 3")

plt.tight_layout()
plt.show()

GIN模型代码

CSDN小班课笔记专栏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import torch
import torch.nn as nn
import torch.nn.functional as F
from dgl.nn.pytorch.conv import GINConv
from dgl.nn.pytorch.glob import SumPooling, AvgPooling, MaxPooling

#自定义节点更新特征的方式,这里是mlp+bn+relu,实际是对应原文公式4.1第一项
class ApplyNodeFunc(nn.Module):
"""Update the node feature hv with MLP, BN and ReLU."""
def __init__(self, mlp):
super(ApplyNodeFunc, self).__init__()
self.mlp = mlp
self.bn = nn.BatchNorm1d(self.mlp.output_dim)

def forward(self, h):
h = self.mlp(h)
h = self.bn(h)
h = F.relu(h)
return h


class MLP(nn.Module):
"""MLP with linear output"""
#num_layers:共有多少层
#input_dim:输入维度
#hidden_dim:隐藏层维度,所有隐藏层维度都一样
#hidden_dim:输出维度
#...

class GIN(nn.Module):
"""GIN model初始化"""
def __init__(self, num_layers, num_mlp_layers, input_dim, hidden_dim,
output_dim, final_dropout, learn_eps, graph_pooling_type,
neighbor_pooling_type):
"""model parameters setting
Paramters
---------
num_layers: int这个是GIN的层数
The number of linear layers in the neural network
num_mlp_layers: intMLP的层数
The number of linear layers in mlps
input_dim: int
The dimensionality of input features
hidden_dim: int
The dimensionality of hidden units at ALL layers
output_dim: int
The number of classes for prediction
final_dropout: float最后一层的抓爆率
dropout ratio on the final linear layer
learn_eps: boolean在学习epsilon参数时是否区分节点本身和邻居节点
If True, learn epsilon to distinguish center nodes from neighbors
If False, aggregate neighbors and center nodes altogether.
neighbor_pooling_type: str邻居汇聚方式,原文公式4.1的后半部分
how to aggregate neighbors (sum, mean, or max)
graph_pooling_type: str全图汇聚方式,和上面的邻居汇聚方式可以不一样
how to aggregate entire nodes in a graph (sum, mean or max)
"""
super(GIN, self).__init__()
self.num_layers = num_layers
self.learn_eps = learn_eps

# List of MLPs
self.ginlayers = torch.nn.ModuleList()
self.batch_norms = torch.nn.ModuleList()

for layer in range(self.num_layers - 1):#GIN有几层,除了最后一层每层都定义一个MLP(num_mlp_layers层)来进行COMBINE
if layer == 0:#第一层GIN,注意输入维度,
mlp = MLP(num_mlp_layers, input_dim, hidden_dim, hidden_dim)
else:
mlp = MLP(num_mlp_layers, hidden_dim, hidden_dim, hidden_dim)

#更新特征的方式是ApplyNodeFunc,邻居汇聚方式为neighbor_pooling_type
#具体参考:https://docs.dgl.ai/api/python/nn.pytorch.html#ginconv
self.ginlayers.append(
GINConv(ApplyNodeFunc(mlp), neighbor_pooling_type, 0, self.learn_eps))
self.batch_norms.append(nn.BatchNorm1d(hidden_dim))

# Linear function for graph poolings of output of each layer
# which maps the output of different layers into a prediction score
self.linears_prediction = torch.nn.ModuleList()


#以下代码是将每一层点的表征保存下来,然后作为最后的图的表征计算
for layer in range(num_layers):
if layer == 0:
self.linears_prediction.append(
nn.Linear(input_dim, output_dim))
else:
self.linears_prediction.append(
nn.Linear(hidden_dim, output_dim))

self.drop = nn.Dropout(final_dropout)

#图表征消息汇聚的方式
if graph_pooling_type == 'sum':
self.pool = SumPooling()
elif graph_pooling_type == 'mean':
self.pool = AvgPooling()
elif graph_pooling_type == 'max':
self.pool = MaxPooling()
else:
raise NotImplementedError

Shusen Wang

小样本学习研究综述-赵凯琳,靳小龙,王元卓-中国科学院-…

有限元笔记10-个人的有限元学习经验分享

迁移学习

智源LIVE第4期│李文斌:基于局部表征学习的小样本学…

注:元学习不等同于小样本学习;虽然有人把它们混用。 meta learning 是学习如何学习,few-shot learning 是要达到的目标,后者常常借助前者,以至于有人说Few-shot Learning 是 Meta Learning 在监督学习领域的应用。,但实际上少样本学习包含的范围比较大,两者更准确地说属于有交集但不完全重合的关系。

参数概念

知乎-小样本学习中的一些基本概念

元学习(meta learning)和小样本学习(few-shot learning)

在 FSL 中,经常用到的一类方法被称为 Meta-learning。

1668706082696

(1)support set :每次训练的样本集合很小,的数据集,用以提供参考信息,不足以训练大型神经网络。
(2)query set :用于与训练样本比对的样本,一般来说query set就是一个样本。Query data的类别属于support data中的类别,训练集中的Q’的类别可以在S中看到,但在测试时的数据集里Q’无法在S’中看到。

(3)在support set中,如果有n个种类,每个种类有k个样本,那么这个训练过程叫n -way k-shot ,如下图就是5-way 1-shot。

FSL 通常会被分成 N-way k-shot 问题,特指 Meta-testing 中的Support Set S’的情况,对于训练过程中的S和Q没有任何要求。

1668707106138

对于训练过程,要根据query set S,每次放入一个样本得到其预估分类,和真实标签做损失后更新模型;

其中,N 指的是 Meta-testing 过程中的样本类别数,k 指的是 Meta-testing 的过程中每一类有多少个样本,

1668706589070
S’ 和 Q’ 是如何得到的?如上图所示,假设 Testing data 所代表的大的矩形框对应着原始的测试数据,这些数据可能包含有很多类。现在,我们从中随机选出 N 个类,每个类都可能含有很多个样本。然后,我们再从这 N 个类中,每类都随机选出 k+x 个样本(x 代表可以选任意个,但必须满足 k+x 不超过每个类最大的样本个数),其中的 k 个样本将被用作 Support set S’,另外的 x 个样本将被用作 Query set Q’。由此,我们便得到了 Meta-testing 过程中需要用到的两个数据集。

  • 测试数据的样本规模 N*(k+x),x为任意值。

  • S 与 Q 中的样本通常是不会重合的,S’ 与 Q’ 亦然。

元学习Meta learning

传统监督学习: 对于一个给定训练数据集,通过训练使模型可以识别训练数据集,并将其泛化到测试数据集中。要求测试数据集中数据标签类别包含在训练数据集中。
meta learning: 目的是让模型learn to learn,使模型可以区分不同的事物。意思是让模型自己学会学习。通过一张待测试图像,其类别不包含在训练数据集中,但包含在support set中,通过待测试图像与support set中每张图像计算他们之间的相似度,将与support set中相似度最高的类别作为query图像的类别,完成模型的预测。

https://zhuanlan.zhihu.com/p/334641593

多任务学习(MTL):

一般来说,优化多个损失函数就等同于进行多任务学习(与单任务学习相反)。

联合学习(joint learning)、自主学习(learning to learn)和带有辅助任务的学习(learning with auxiliary task)等都可以指 MTL。

迁移学习:

将相关任务的训练数据中的可泛化知识迁移到目标任务上。
也就是不同领域的知识迁移的过程,源领域——>目标领域。
领域指的是一个样本空间(x,y)(x,y)及其数据分布p(x,y)p(x,y)。只要三者中有不同,就是不同领域。
说人话就是,输入-输出-数据分布相同,才是两个相同的标准机器学习任务。换句话说就是一个数据集你用不同模型跑跑。

源域有大量标注好的数据,目标域没有数据,这时候就用源域训练好的模型去直接test目标域。

一些处理数据和标签噪声与不平衡 的误差函数

1668331346921

元学习模型

借助训练时的元知识

A. Santoro,神经图灵机变种

O.Vinyals,Matching Network

G. Koch et al.,孪生网络

基于小样本学习的图像分类技术综述,刘颖等,自动化学报,2021,47(2):297-315

以建模方式为标准,分类为 卷积神经网络模型 和 图神经网络模型。

  • 卷积网络模型
    • 迁移学习 基于特征;基于关系;基于共享参数
    • 元学习 基于度量;基于优化;基于模型
    • 对偶学习 自编码
    • 贝叶斯学习
  • 图神经网络模型
    • 非欧几里得数据—>应用于欧几里得数据

A类

  • CCS ACM Conference on Computer and Communications Security ACM

  • TIFS IEEE Transactions on Information Forensics and Security IEEE

  • S&P IEEE Symposium on Security and Privacy IEEE

  • USENIX Security USENIX Security Symposium USENIX Association

  • NDSS Network and Distributed System Security Symposium ISOC

B类

  • TOPS ACM Transactions on Privacy and Security ACM
  • Computers & Security Elsevier
  • JCS Journal of Computer Security IOS Press
  • CSFW IEEE Computer Security Foundations Workshop IEEE
  • RAID International Symposium on Recent Advances in Intrusion Detection Springer
  • ESORICS European Symposium on Research in Computer Security Springer
  • ACSAC Annual Computer Security Applications Conference IEEE
  • DSN International Conference on Dependable Systems and Networks IEEE/IFIP 可靠系统和网络

只关注这13个会议期刊,其他的在资源匮乏的时候,可以去看四家出版社或者arxiv上的论文。

可读论文

清华张长水教授团队所做论文

Up主借鉴的小样本学习的论文

定义

A compelling case of this approach is classifying objects classes that have not yet been used in the training set, namely Zero-shot Learning.

零样本学习:可辨别训练集里没有的新类的样本。

小样本学习的目标:

学会学习,找不同,能够判断未见过的事物。

学到基础类别的知识,进而能够学会分类同一个数据集中的新类。

基于少量样本便可完成类别的判断

少量标签数据,训练得到良好泛化能力的模型。

B站-liupengyuanblcu

问题产生的原因:

训练数据少:

1.标注数据cost很大,

2.有些数据的获取很难

3.有些数据本身就很少

当前模型的训练基于经验风险最小化,用经验风险代替期望风险,所以训练数据少时,模型误差很大。

1668265194697

Read more »

任务

回归

分类、

Structured Learning

符号约定

Label 指真实值, y^; 预测值用y表示。

误差/距离的衡量(计算)方式 MAE(Mean Absolute Error) MSE(Mean Square Error)

http://www.owasp.org.cn/OWASP-CHINA/owasp-project/download/OWASP_testing_guide.pdf

应用安全测试最重要的方面可能就是必须在有限的时间尽可能多地覆盖应用程序的各个方面,安全问题深度隐藏在业务逻辑和定制应用设计中。

何时测试?

通用软件开发生命周期(SDLC)模型:定义—>设计—>开发—>部署—>维护

最佳的方法之一是将安全测试融入到软件开发生命周期每一个阶段以防止安全漏洞的出现

安全是一个过程,不是某个产 品。

1656913862123

安全威胁模型(帮助区分系统中的哪些部分的 特定资源是危险的)

测试流程

1.了解测试软件

结构,数据流程图,使用情况等,书面确定保存下来;

2.自动化通用漏洞例行扫描

2.2适当时候要看到源码。

3.

1.基础依赖

1
2
3
4
5
$ sudo apt-get install python python-pip python-dev libffi-dev libssl-dev
$ sudo apt-get install python-virtualenv python-setuptools
$ sudo apt-get install libjpeg-dev zlib1g-dev swig
sudo apt-get install git mongodb libffi-dev build-essential python-django python python-dev python-pip python-pil python-sqlalchemy python-bson python-dpkt python-jinja2 python-magic python-pymongo python-gridfs python-libvirt python-bottle python-pefile python-chardet tcpdump -y

1
find /home/ -path "/home/Downloads" -prune -o -type f -name 'pip.conf' -print

2.安装数据库软件

基于Django的web接口(依赖Mongodb)

1
2
3
4
5
6
7
#对于Ubuntu22
sudo vim /etc/apt/sources.list
#插入
deb http://security.ubuntu.com/ubuntu bionic-security main
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
sudo apt-get update
sudo apt-get install mongodb
1
sudo apt-get install postgresql libpq-dev

m2crypto

1
2
ln -s /usr/include/x86_64-linux-gnu/openssl/opensslconf.h /usr/include/openssl/opensslconf.h
pip install --global-option=build_ext --global-option="-I/usr/include/x86_64-linux-gnu" m2crypto

Volatility

1
2
3
4
5
git clone https://github.com/volatilityfoundation/volatility.git
cd volatility
python setup.py build
python setup.py install
python vol.py -h

3.可选项安装

mitmproxy辅助模块

virturalenv py3.6

Intercept SSL/TLS generated traffic

把它的二进制文件路径放在cuckoo配置文件里

guacd

1
apt install libguac-client-rdp0 libguac-client-vnc0 libguac-client-ssh0 guacd

Pydeep

1
2
3
4
5
6
7
8
9
apt install libfuzzy-dev
wget http://sourceforge.net/projects/ssdeep/files/ssdeep-2.13/ssdeep-2.13.tar.gz/download -O ssdeep-2.13.tar.gz
tar -zxf ssdeep-2.13.tar.gz
cd ssdeep-2.13
./configure
make
sudo make install
ssdeep -V #检查版本
pip show pydeep #再安装一次看看会不会提示已安装

KVM/Zen等虚拟化软件

1
$ sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils python-libvirt

4.安装Cuckoo

1
2
3
4
apt-get install libx11-dev
#apt-file search Intrinsic.h apt-file可以根据缺少的文件找对应需要安装的库
sudo apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk
pip install -U cuckoo

5.运行

1.cuckoo -d

1
2
3
4
Potentially vulnerable virtualbox version installed. Failed to retrieve its version. Update if version is: 5.2.27
find / -name 'cuckoo.conf'|grep cuckoo
vim /root/.cuckoo/conf/cuckoo.conf
将vulnerable 置为 yes

2.再次运行报告下面的错误

1
2023-04-12 13:52:37,757 [cuckoo] CRITICAL: CuckooCriticalError: Unable to bind ResultServer on 192.168.56.1:2042 [Errno 99] Cannot assign requested address. This usually happens when you start Cuckoo without bringing up the virtual interface associated with the ResultServer IP address. Please refer to https://cuckoo.sh/docs/faq/#troubles-problem for more information.

修改cuckoo的网卡接口与wsl启动保持一致

6.借助CWD在一部机器上运行多个实例

1
2
3
4
5
6
7
$ sudo mkdir /opt/cuckoo
$ sudo chown cuckoo:cuckoo /opt/cuckoo
$ cuckoo --cwd /opt/cuckoo

# You could place this line in your .bashrc, for example.
$ export CUCKOO=/opt/cuckoo
$ cuckoo

1.概念介绍

1.1 纳税流程

谈合同/协议—>签合同—>干活—>发工资(企业预扣税+个人实领工资)—>纳税个人收报—>年度汇缴(税款多退少补)。

1.2 工资薪金

工资、薪金所得是个人非独立劳动,从所在单位领取的报酬,他与支付报酬的单位存在雇佣与被雇佣关系。

1.3 劳务报酬范围

个人担任企业董事职务所取得的董事费收入,也属于劳务报酬性质,按劳务报酬所得项目征收个人所得税。

劳务报酬所得是个人独立从事某种技艺,独立提供某种劳务而取得的报酬,他与支付报酬的单位不存在雇佣与被雇佣关系,一般也不用受委托方的上下班、劳动工作制度约束工作成果达到合同要求即可领取报酬。

劳务报酬可以专项扣除吗?

可以,但不预扣,汇算时才扣除。劳务报酬所得预扣预缴计算方法里是没有专项附加扣除的,所以在预扣预缴时不能扣除,只有汇算清缴时才能扣除专项附加。

2.相关法条介绍

1
2
扣缴义务人向居民个人支付劳务报酬所得,按次或者按月预扣预缴个人所得税。
​ ——《国家税务总局关于全面实施新个人所得税法若干征管衔接问题的公告》(税务总局公告2018年第56号)

劳务报酬所得以收入减除费用后的余额为收入额。

减除费用:劳务报酬所得每次收入不超过四千元的,减除费用按八百元计算,每次收入四千元以上的,减除费用按百分之二十计算。应纳税所得额:劳务报酬所得,以每次收入额为预扣预缴应纳税所得额,劳务报酬所得适用百分之二十至百分之上海个人避税四十的超额累进预扣率。

劳务报酬所得应预扣预缴税额=预扣预缴应纳税所得额×预扣率-速算扣除数。

3.每月扣税

按照新个税法,劳务报酬缴纳个税分为两步,一是按次预扣;二是汇缴。

劳务报酬收入最后会纳入综合所得,和工资薪金一起进行年度汇缴。

劳务报酬所得、稿酬所得、特许权使用费所得以收入减除百分之二十的费用后的余额为收入额。

劳务报酬所得预扣预缴应纳税所得额=每次收入*(1-20%)=9000*(1-20%)=7200元

劳务报酬所得应预扣预缴税额=预扣预缴应纳税所得额×预扣率-速算扣除数=7200*20%-0=1440元。

4.汇缴及退税

假如2022年,我只工作两个月,下个月我的劳务报酬所得预扣预缴应纳税所得额=9900*(1-20%)=7920元,劳务报酬所得应预扣预缴税额=9900*20%-0=1980元。

年收入额=工资薪金所得收入+劳务报酬所得收入=0+(7200+7920)=15100元

居民个人综合所得应纳税所得额=年收入额-6万元-专项扣除-专项附加扣除=0

按照下表所示,全年应纳税额=应纳税所得额*税率-速算扣除数=0-0=0;
我在两个月内一次性取得15100元劳务报酬收入时候已经预扣预缴个税1440+1980=3420元,所以,2022年度汇算后,我还需要退税=3420-0=3420元。

6.SVM优化

7.软间隔

8.核函数

核技巧(Vapnik)让SVM成为非线性;

kernel function表示将输入从输入空间映射到特征空间得到的特征向量之间的内积。

1.相关库

image-20220321094551847

2.数据等级

  • 非结构化—>结构化数据

结构化数据要从定类别开始,—>定序(引入比较与排序)—>定距(可以加减)—>定比(引入绝对零度,增加乘除)

3.数据分析

1.数据质量分析

缺失值 80%数据全部丢失,30%的缺失(做填充)

异常值 均值填充

一致性分析 (训练集和测试集的逻辑分布要是一致的)

2.数据特征分析

  • 分布分析 数据要选分布宽度比较低的
  • 对比分析 均值、方差
  • 统计量分析 sum
  • 周期性分析 一般用在时间序列上
  • 贡献度分析
  • 相关度分析

3.函数工具

函数名 函数功能 所属扩展库
interpolate 一维、高维数据插值 Scipy
unique 去除数据中的重复元素,得到单值元素列表,它是对象的方法名(此功能可以用集合的办法去重) Pandas/Numpy
isnull 判断是否空值 Pandas
notnull 判断是否为非空值 Pandas
PCA 对指标变量矩阵进行主成分分析 Scikit-Learn
random 生成随机矩阵 Numpy

4.数据规约

image-20220321102046509

属性规约

属性的合并、提取和删除、归纳、主成分分析

  • 合并 {A1,A2,A3}—->{A};{B1,B2.B3}—->{B} 数据降维
  • 逐步向前选择 从空属性集开始 ,每次从原属性集中选一个当前最优的属性加到现在的集合中,直到无法选择出最优属性或满足一定阈值约束为止。
  • 逐步向后删除 从全属性集开始,…(与逐步向前选择恰好相反)
  • 决策树归纳 用决策树对初始数据进行分类归纳学习,决策树上没有的属性可以认为是无关属性,删除之。
  • PCA,用较少的变量去解释原始数据中的大部分变量,即将很多相关性很高的变量降低相关性,变为不相关或者独立的变量

数值规约

​ 数据标准化

5.数据变换

  • 简单函数变换
  • 规范化 把数据变成0,1,数据标准化减少噪声的影响
  • 连续属性离散化
  • 属性构造
  • 小波变换
  • 傅里叶变换

6.数据集成

合并多个数据源的数据,让数据没有偏见

  • 实体属性识别
  • 冗余属性识别

7.数据清洗

删除原始数据集中的无关数据、重复数据,平滑噪声数据,筛选值与挖掘主题无关的数据,处理缺失值、异常值等。

image-20220321205617659

缺失值处理

  • 均值、中位数、众数
  • 使用固定值
  • 最近邻插补
  • 回归方法
  • 插值法

    • 拉格朗日插值
    • 牛顿插值

      异常值处理

  • 删除

  • 视为缺失
  • 平均值

学习策略:间隔最大化。形式化为一个凸二次规划(convex quadratic programming)问题,等价于正则式的合页损失函数的最小化问题。

由简到繁:

  • 线性可分——>学习线性的分类器——>线性可分(硬间隔)支持向量机;
  • 数据近似线性可分—>软间隔最大化—>学习线性的分类器—>线性支持向量机;
  • 数据线性不可分—>kernel trick+软间隔最大化—>非线性支持向量机(等价于在高维空间中学习线性支持向量机);

1.超平面:

image-20220526234208124

2.函数间隔和几何间隔

因为超平面wx+b=0,所以对于点(xi,yi),(wxi+bi)能够表示点距离超平面的远近,其与yi的乘积的符号可以用来表示分类的正确性(-1表示分类错误,分类正确时)。

所以ri=yi(wxi+bi)定义为超平面关于样本点(xi,yi)的函数间隔;超平面关于训练集T的函数间隔为所有超平面关于每个样本点的函数间隔的最小值。

r’=min(ri)

函数间隔规范化(确保超平面不变的时候,间隔也是确定的)后,即w=w/||w||,b=b/||w||,函数间隔r'变为几何间隔r

约束优化问题为:求解能够正确划分训练数据集并且使得几何间隔最大的分离超平面

Read more »