感知机原理:
为了使线性回归能用于分类,引入了logistic函数映射成比率来进行分类。但是从人的直观视角来看,对于如上图所示的点,能否在空间中直接就找到一条分割线呢?感知机学习的目标就是求得一个能够将训练数据集中正负实例完全分开的分类超平面。那么如何找这个超平面?
首先可以得出感知机的模型:
f
(
x
)
=
s
i
g
n
(
W
⋅
x
+
b
)
f(x)=sign(W·x + b)
f(x)=sign(W⋅x+b)其中sign函数为:
s
i
g
n
(
x
)
=
{
+
1
,
x
⩾
0
−
1
,
x
<
0
sign(x) =
即
w
⋅
x
+
b
w·x + b
w⋅x+b预测出的值的正例与反例,即可得到初步分割,将空间花费为两部分。
然后从机器学习的老套路来看,我们肯定需要一个损失函数,所以自然可以定义出损失函数的策略:误分类点到分隔超平面的总距离。
点到平面的几何距离为:
∣
w
⋅
x
i
+
b
∣
∣
∣
w
∣
∣
\frac{|w·x_i+b|}{||w||}
∣∣w∣∣∣w⋅xi+b∣其中||w||是L2范数,如果该点被误分:
−
y
i
(
w
⋅
x
i
+
b
)
∣
∣
w
∣
∣
\frac{-y_i(w·x_i+b)}{||w||}
∣∣w∣∣−yi(w⋅xi+b)
最终可得M个被误分点总的损失函数为:
J
(
w
,
b
)
=
−
∑
x
i
∈
M
y
i
(
w
⋅
x
i
+
b
)
J(w,b)=-\sum\limits_{x_i \in M} y_i(w·x_i+b)
J(w,b)=−xi∈M∑yi(w⋅xi+b)接下来就是对这个函数进行梯度下降求解了。
迭代的次数会不会很多?对偶优化问题
可以想到没有被误分的点参与迭代调整次数为0,而对于多次被误分的点就会参与多次的迭代,为了节省时间,将采用它的对偶形式来进行优化。即将w 和 b 表示为 xi和 yi的线性组合的形式来求解,计算时的样本内积形成的Gram矩阵将大大提高速度:
此时函数变为:
f
(
x
)
=
s
i
g
n
(
∑
j
=
1
N
α
i
y
i
x
j
⋅
x
i
+
b
)
f(x) = sign(\sum_{j=1}^N \alpha_iy_ix_j \cdot x_i +b)
f(x)=sign(j=1∑Nαiyixj⋅xi+b)是否误分类的判断条件变为:
y
i
(
∑
j
=
1
N
α
i
y
i
x
j
⋅
x
i
+
b
)
≤
0
y_i(\sum_{j=1}^N \alpha_i y_i x_j \cdot x_i +b)\le 0
yi(j=1∑Nαiyixj⋅xi+b)≤0
其他的就没什么的,不过值得注意的是感知机面向的特征空间必须是得线性可分的,而且满足条件的分割线会有多个。由此得来神经网络和支持向量机。
径向基函数(RBF)神经网络
RBF核如下:
K
(
x
,
x
′
)
=
e
x
p
(
−
∣
∣
x
−
x
′
∣
∣
2
2
2
σ
2
)
K(x,x')=exp(- \frac{||x-x'||_2^2}{2\sigma^2})
K(x,x′)=exp(−2σ2∣∣x−x′∣∣22)
x’为核函数中心,是一个自由参数,是函数的宽度参数 , 控制了函数的径向作用范围。而因为RBF核函数的值随距离减小,并介于0(极限)和1(当x = x’的时候)之间,所以其实是可以作为一种相似性度量的,但是这种非线性的映射似乎和感知机的sign函数很相似,也是可以用来构建神经网络的。
即用RBF作为隐单元的“基”构成隐含层空间,这样就可以将输入矢量直接映射到隐空间,而不需要通过权连接(普通神经网络需要),而当RBF的中心点确定以后,这种映射关系也就确定了。它与普通神经网络的区别在于:
- 局部逼近与全局逼近。神经元的输入离径向基函数中心越远,神经元的激活程度就越低,所以RBF是局部逼近,比起全局逼近,它的学习速度会更快。
- nn可以有多个隐层,而RBF只有一个
- RBF比nn更更好的逼近连续函数
为什么rbf高斯核函数就是映射到高维空间
因为它的幂级数展开是无限的,那么可以生成更多维度的多项式。
导读:全面掌握 iptables:从基础到实践
在 Linux 系统中,iptables
是一个非常强大的工具,它不仅是系统管理员用来构建和管理网络防火墙的首选工具,而且也是一个功能丰富的网络流量处理系统。无论是进行包过滤、监控网络流量、还是实现复杂的网络地址转换 (NAT),iptables
都能提供灵活的解决方案。本文将带你深入理解 iptables
的组成结构,掌握其常用命令,并通过具体的使用场景展示如何在实际中应用这些知识。
目录
iptables
是 Linux 操作系统中的一个非常强大的防火墙工具,它使用表格来组织防火墙规则,这些表格中的规则用于决定如何处理穿过防火墙的数据包。iptables
基于 Netfilter,Netfilter 是 Linux 内核的一个部分,负责处理通过网络栈的所有数据包。通过使用 iptables
,系统管理员可以定义规则,这些规则决定了如何处理进入、穿过和离开网络的数据包。
一、iptables
的主要组成
表 (Tables)
iptables
的规则分布在不同的“表”中,这些表是处理特定类型数据包的集合。每个表包含一个或多个“链”,这些链定义了数据包流经网络栈的不同点在何处应用这些规则。
-
filter
表- 用途: 主要用于决定数据包的基本处理,如是否允许数据包通过。
- 包含的链:
INPUT
: 处理进入本机的数据包。FORWARD
: 处理经过本机路由到其他网络的数据包。OUTPUT
: 处理由本机产生的数据包。
-
nat
表- 用途: 用于网络地址转换(NAT),包括源地址和目标地址的转换,主要用于路由设备。
- 包含的链:
PREROUTING
: 用于目标地址转换(DNAT),处理进入网络接口的数据包。POSTROUTING
: 用于源地址转换(SNAT),处理即将离开网络接口的数据包。OUTPUT
: 对于生成自本地进程的数据包,处理其目标地址转换。
-
mangle
表- 用途: 用于修改数据包的服务类型(TOS)字段或其他 IP 头信息,主要用于特殊的路由标记。
- 包含的链:
PREROUTING
: 修改进入网络接口的数据包。INPUT
: 修改到达本机的数据包。FORWARD
: 修改经过本机的数据包。OUTPUT
: 修改本机产生的数据包。POSTROUTING
: 修改即将离开本机的数据包。
-
raw
表- 用途: 主要用于配置免除连接跟踪的数据包,可以用来提高性能。
- 包含的链:
PREROUTING
: 设置进入网络接口前的数据包是否避开状态跟踪。OUTPUT
: 设置由本机产生的数据包是否避开状态跟踪。
-
security
表- 用途: 用于设置强制访问控制网络规则,通常与 SELinux 安全策略配合使用。
- 包含的链:
INPUT
: 设置进入本机的数据包的安全标记。FORWARD
: 设置经过本机的数据包的安全标记。OUTPUT
: 设置本机产生的数据包的安全标记。
链 (Chains)
表中的每个链代表数据包处理的一个阶段。预定义的链有:
PREROUTING
: 用于处理进入网络接口的数据包,主要用于nat
和mangle
表。INPUT
: 处理到达本机的数据包,用于filter
,mangle
, 和security
表。FORWARD
: 处理经过本机路由到其他网络的数据包,用于filter
,mangle
, 和security
表。OUTPUT
: 处理本机产生的数据包,用于filter
,nat
,mangle
,raw
, 和security
表。POSTROUTING
: 处理即将离开网络接口的数据包,用于nat
和mangle
表。
规则 (Rules)
规则定义了对特定条件下的数据包应该执行的操作。每条规则都关联到一个链,规则包含两个主要部分:
-
匹配条件: 定义了哪些数据包会被规则匹配。匹配条件可以包括多种属性:
- 源和目标 IP 地址 (
-s
,-d
) - 源和目标端口 (
--sport
,--dport
) - 协议类型 (
-p
), 如 TCP (tcp
), UDP (udp
), ICMP (icmp
) - 网络接口 (
-i
,-o
) - 更多复杂匹配,如连接状态 (
-m state --state
), 包大小 (-m length --length
), 时间段 (-m time --timestart
)
- 源和目标 IP 地址 (
-
目标 (Targets): 当规则匹配到一个数据包时,定义了应采取的行动。常见的内置目标有:
ACCEPT
: 允许数据包通过。DROP
: 静默丢弃数据包,不给发送方任何响应。REJECT
: 拒绝数据包,并向发送方发送一个错误响应。LOG
: 记录数据包的信息,然后继续处理该数据包。MASQUERADE
: 用于动态 NAT,隐藏数据包的源 IP。REDIRECT
: 修改数据包的目标 IP/端口为本机,用于本地端口重定向。
用户定义的链
用户可以定义自己的链来组织复杂的规则集。这允许更灵活的管理,例如创建一个专用链处理特定类型的流量,然后在预定义链中调用这个用户链。
二、常用 iptables
命令
iptables
是一个功能强大的工具,用于在 Linux 上管理网络包过滤和 NAT 规则。以下是详细解释 iptables
的常用命令和参数,帮助你更好地理解如何使用这个工具。
基本 iptables
命令格式
iptables [option] [chain] [matching criteria] [action]
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">
评论记录:
回复评论: