统计学习模型——感知机模型

  • 感知机学习的三要素:二分类的线性分类模型、误分类点到超平面的距离的最小化、基于随机梯度下降法的对损失函数的最优化

一、感知机模型(分类方法)

  • 感知机是二分类的线性分类模型,属于判别模型。分为两种: 原始形式和对偶形式
    • 假设空间:函数集合 { f ∣ f ( x ) = w ⋅ x + b } \{f|f(x)=w\cdot x+b\} {ff(x)=wx+b}
    • 通过训练数据集,即输入实例的特征向量和类别,求解模型参数 w 、 b w、b wb
    • 对于新的输入实例,输出其对应的类别,取值+1或-1

二、感知机学习策略

  • 学习的目标:求得一个能够将训练数据集中正负实例点完全正确分开的超平面,即确定感知机模型参数 w 、 b w、b wb
  • 学习策略:经验损失函数最小化
  • 损失函数的选择:误分类点到超平面的总距离
  • 感知机 s i g n ( w ⋅ x + b ) sign(w\cdot x+b) sign(wx+b)的损失函数: L ( w , b ) = − ∑ x i ∈ M y i ( w ⋅ x i + b ) L(w,b)=-\sum_{x_i\in M}y_i(w\cdot x_i+b) L(w,b)=xiMyi(wxi+b)其中 M M M为误分类点的集合。

三、感知机学习算法

  • 输入:训练数据集 T = { ( x 1 , y 1 ) , ⋯   , ( x N , y N ) } T=\{(x_1,y_1),\cdots,(x_N,y_N)\} T={(x1,y1),,(xN,yN)},其中 x i ∈ X = R n x_i\in\mathcal{X}=\pmb{R}^n xiX=RRRn y i ∈ Y = { + 1 , − 1 } y_i\in\mathcal{Y}=\{+1,-1\} yiY={+1,1} i = 1 , 2 , ⋯   , N i=1,2,\cdots,N i=1,2,,N;学习率 η ( 0 ≤ η ≤ 1 ) \eta(0\le\eta\le1) η(0η1)
  • 输出: w , b w,b w,b;感知机模型 f ( x ) = s i g n ( w ⋅ x + b ) f(x)=sign(w\cdot x+b) f(x)=sign(wx+b)
    • (1) 选取初值 w 0 , b 0 w_0,b_0 w0,b0
    • (2) 在训练集中选取数据 ( x i , y i ) (x_i,y_i) (xi,yi)
    • (3) 如果 y i ( w ⋅ x i + b ) ≤ 0 y_i(w\cdot x_i+b)\le0 yi(wxi+b)0,则 w ← w + η y i x i w\leftarrow w+\eta y_ix_i ww+ηyixi b ← b + η y i b\leftarrow b+\eta y_i bb+ηyi
    • (4) 转至(2),直至训练集中没有误分类点

四、感知机学习算法的对偶形式

  • 基本思想:将 w w w b b b表示为实例 x i x _i xi和标记 y i y _i yi的线性组合的形式,通过求解其系数求得 w w w b b b
  • 算法:
    • 输入:训练线性可分的数据集 T = { ( x 1 , y 1 ) , ⋯   , ( x N , y N ) } T=\{(x_1,y_1),\cdots,(x_N,y_N)\} T={(x1,y1),,(xN,yN)},其中 x i ∈ R n x_i\in\pmb{R}^n xiRRRn x i ∈ Y = { + 1 , − 1 } x_i\in\mathcal{Y}=\{+1,-1\} xiY={+1,1} i = 1 , 2 , ⋯   , N i=1,2,\cdots,N i=1,2,,N;学习率 η ( 0 < η ≤ 1 ) \eta(0<\eta\le1) η(0<η1)
    • 输出: α , b \alpha,b α,b;感知机模型 f ( x ) = s i g n ( ∑ j = 1 N α j y j x j ⋅ x + b ) f(x)=sign(\sum_{j=1}^N\alpha_jy_jx_j\cdot x+b) f(x)=sign(j=1Nαjyjxjx+b),其中 α = ( α 1 , ⋯   , α N ) T \alpha=(\alpha_1,\cdots,\alpha_N)^T α=(α1,,αN)T
      • (1) α ← 0 , b ← 0 \alpha\leftarrow0,b\leftarrow0 α0b0
      • (2) 在训练集中选取数据 ( x i , y i ) (x_i,y_i) (xi,yi)
      • (3) 如果 y i ( ∑ j = 1 N α j y j x j ⋅ x i + b ) ≤ 0 y_i(\sum_{j=1}^N\alpha_jy_jx_j\cdot x_i+b)\le0 yi(j=1Nαjyjxjxi+b)0,则 α j ← α i + η \alpha_j\leftarrow \alpha_i+\eta αjαi+η b ← b + η y i b\leftarrow b+\eta y_i bb+ηyi
      • (4) 转至(2),直至训练集中没有误分类点
  • 训练集中实例间的内积计算出来并以矩阵的形式存储,即 G r a m Gram Gram矩阵: G = [ x i ⋅ x j ] N × N G=[x_i\cdot x_j]_{N\times N} G=[xixj]N×N
    参考:《统计学习方法》李航著
感知机是二分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取 +1 和 -1 二值。感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型感知机学习算法是基于随机梯度下降法的。具体地,首先任意选取一个超平面,然后用梯度下降法不断地极小化目标函数,找出最优超平面。 以下是感知机算法的C++类实现及案例代码: ```c++ #include <iostream> #include <vector> #include <random> using namespace std; class Perceptron { public: Perceptron(int feature_num) : w(feature_num), b(0) {} void train(const vector<vector<double>>& X, const vector<double>& y, int max_iter = 100) { int n_samples = X.size(); int n_features = X[0].size(); mt19937 rng(0); uniform_int_distribution<int> dist(0, n_samples - 1); for (int iter = 0; iter < max_iter; iter++) { int i = dist(rng); double wx = 0; for (int j = 0; j < n_features; j++) { wx += X[i][j] * w[j]; } double yi = y[i]; if (yi * (wx + b) <= 0) { for (int j = 0; j < n_features; j++) { w[j] += yi * X[i][j]; } b += yi; } } } double predict(const vector<double>& x) { double wx = 0; int n_features = x.size(); for (int i = 0; i < n_features; i++) { wx += x[i] * w[i]; } return wx + b > 0 ? 1 : -1; } void print_weights() const { cout << "w = ["; for (double wi : w) { cout << wi << ", "; } cout << "], b = " << b << endl; } private: vector<double> w; double b; }; int main() { vector<vector<double>> X{ {3, 3}, {4, 3}, {1, 1} }; vector<double> y{1, 1, -1}; Perceptron model(X[0].size()); model.train(X, y); model.print_weights(); cout << "predict([3, 4]) = " << model.predict({3, 4}) << endl; return 0; } ``` 在上述代码中,Perceptron类代表感知机模型。train函数接受训练数据X和y,以及最大迭代次数max_iter,默认为100。predict函数接受一个样本特征向量x,返回其预测的类别标签。print_weights函数打印训练后得到的权重和偏置项。 本例中,使用学习率为1的随机梯度下降法进行模型训练。训练数据X是一个3x2的矩阵,y是一个包含3个元素的向量,表示3个样本的类别标签。模型训练完毕后,使用predict函数对特定样本进行预测。 以上是感知机算法的C++类实现及案例代码,希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值