超平面

什么是超平面

我们最常见的平面概念是在三维空间中定义的:

Ax+By+Cz+D=0Ax+By+Cz+D=0

它由两个性质定义:

  • 方程是线性的: 是空间点的各分量的线性组合
  • 方程数量为1

若抛却维度等于3的限制, 就得到了超平面的定义. 方程数量为1, 它的本质其实是自由度比空间维度dd小一. 自由度的概念可以简单的理解为至少要给定多少个分量的值才能确定一个点. 例如, 三维空间里的(超)平面只要给定了(x,y,z)(x,y,z)中任意两个分量, 剩下的一个的值就确定了. 先确定值的两个分量是自由的, 因为它们想取什么值就能取什么值;剩下的那个是"不自由的", 因为它的值已经由另外两确定了. 二维空间里的超平面为一条直线. 一维空间里超平面为数轴上的一个点.
现在用数学语言定义一下.
dd维空间中的超平面由下面的方程确定:

wTx+b=0wTx+b=0

其中,wwxx都是dd维列向量,x=(x1,x2,,xd)Tx=(x1,x2,…,xd)T为平面上的点, w=(w1,w2,,wd)Tw=(w1,w2,…,wd)T为平面的法向量.bb是一个实数, 代表平面与原点之间的距离.

点到超平面的距离

假设点xx′为超平面A:wTx+b=0A:wTx+b=0上的任意一点, 则点xxAA的距离为xxx−x′在超平面法向量ww上的投影长度:

d=|wT(xx)|||w||=|wTx+b|||w||d=|wT(x−x′)|||w||=|wTx+b|||w||

超平面的正面与反面

一个超平面可以将它所在的空间分为两半, 它的法向量指向的那一半对应的一面是它的正面, 另一面则是它的反面.

判断一个点是在超平面的正面还是反面(面向的空间里)

还是要用到它的法向量ww.
仍然假设点xx′为超平面A:wTx+b=0A:wTx+b=0上的任意一点, 点xx为待判断的点.
xxx−x′ww的夹角小于9090∘, 则xxAA的正面, 否则在反面

wT(xx)>0wT(x−x′)>0

wTx+b>0→wTx+b>0

所以判定依据为:
xA,wTx+b>0,wTx+b=0,wTx+b<0x在A的{正面,wTx+b>0平面上,wTx+b=0反面,wTx+b<0

若将距离公式中分子的绝对值去掉, 让它可以为正为负. 那么, 它的值正得越大, 代表点在平面的正向且与平面的距离越远. 反之, 它的值负得越大, 代表点在平面的反向且与平面的距离越远.

原链接

http://www.cnblogs.com/dengdan890730/p/5554787.html

### 超平面分离的概念及其与感知机的关系 #### 超平面的定义 超平面是 \(R^n\) 空间内的一个 \(n-1\) 维仿射子空间。具体而言,超平面可以由线性方程 \(\omega \cdot x + b = 0\) 表示,其中 \(\omega\) 是超平面的法向量,\(b\) 是截距[^3]。超平面将特征空间分为两个部分,位于两部分的点(特征向量)被划分为正负两类。因此,超平面 \(S\) 被称为分离超平面(separating hyperplane)。 #### 超平面分离定理 超平面分离定理(Separating Hyperplane Theorem)表明,在特定条件下,两个不相交的凸集总可以用一个超平面进行分离[^2]。该定理的核心思想是通过找到一个合适的超平面,使得所有属于一个集合的点都在超平面的一侧,而另一个集合的点在另一侧。 #### 感知机中的超平面分离 感知机是一种二分类的线性分类模型,其目标是找到一个能够将输入空间中的实例划分为两类的分离超平面。为实现这一目标,感知机导入了基于误分类的损失函数,并利用梯度下降法对损失函数进行最优化求解[^4]。 在感知机中,超平面由公式 \(\omega \cdot x + b = 0\) 定义,其中 \(\omega\) 和 \(b\) 是需要学习的参数。训练过程中,算法不断调整这些参数,直到找到一个能够正确划分数据的超平面。对于线性可分的数据集,感知机算法能够保证收敛到一个解[^4]。 #### 超平面分离的原理 超平面分离的原理基于几何距离的概念。给定一个数据点 \(x_i\) 和其类别标签 \(y_i \in \{+1, -1\}\),如果点 \(x_i\) 被正确分类,则满足条件 \(y_i (\omega \cdot x_i + b) > 0\)。否则,该点被视为误分类点。感知机通过最小化误分类点到超平面的距离来优化参数 \(\omega\) 和 \(b\)。每次迭代中,算法选取一个误分类点并更新参数,以减少误分类的可能性[^4]。 #### 示例代码 以下是一个简单的感知机实现,展示了如何通过超平面进行分离: ```python import numpy as np class Perceptron: def __init__(self, learning_rate=0.1, max_epochs=1000): self.learning_rate = learning_rate self.max_epochs = max_epochs self.w = None self.b = None def fit(self, X, y): n_samples, n_features = X.shape self.w = np.zeros(n_features) self.b = 0 for _ in range(self.max_epochs): misclassified = False for i in range(n_samples): if y[i] * (np.dot(self.w, X[i]) + self.b) <= 0: # 如果误分类 self.w += self.learning_rate * y[i] * X[i] self.b += self.learning_rate * y[i] misclassified = True if not misclassified: break def predict(self, X): return np.sign(np.dot(X, self.w) + self.b) # 示例用法 if __name__ == "__main__": X = np.array([[3, 3], [4, 3], [1, 1]]) y = np.array([1, 1, -1]) perceptron = Perceptron(learning_rate=0.1, max_epochs=1000) perceptron.fit(X, y) print("权重 w:", perceptron.w) print("偏置 b:", perceptron.b) print("预测结果:", perceptron.predict(X)) ``` 上述代码实现了感知机的基本训练和预测功能,展示了如何通过超平面进行分离。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值