当前位置: 首页 > news >正文

感知机(Perceptron)—有监督学习方法、非概率模型、判别模型、线性模型、参数化模型、批量学习、核方法

定义

假设输入空间(特征空间)是 χ \chi χ ⊆ R n \subseteq R^n Rn,输出空间是y = { + 1 , − 1 } =\{+1,-1 \} ={+1,1} 。输入 x ∈ χ x \in \chi xχ表示实例的特征向量,对应于输入空间(特征空间)的点;输出 y ∈ y \in yy表示实例的类别。由输入空间到输出空间的如下函数:

f ( x ) = s i g n ( ω ⋅ x + b ) f(x)=sign(\omega \cdot x+b) f(x)=sign(ωx+b),称为感知机

其中 ω \omega ω和b为感知机模型参数:
权值(weight)或权值向量(weight vector) ω ∈ R n \omega \in R^n ωRn

偏置(bias): b ∈ R b \in R bR

ω 和 x 的内积: ω ⋅ x \omega和x的内积:\omega \cdot x ωx的内积:ωx

符号函数: s i g n ( x ) : { + 1 , x ≥ 0 − 1 , x < 0 sign(x):\begin{cases} +1,x \geq 0 \\ -1,x < 0 \end{cases} sign(x):{+1,x01,x<0

输入空间

T= { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } \left\{(x_1,y_1),(x_2,y_2),\dots,(x_N,y_N)\right\} {(x1,y1),(x2,y2),,(xN,yN)}

import numpy as np
import time
start = time.time()
def loadData(fileName,lines=60000):'''加载Mnist数据集(下载地址:https://download.csdn.net/download/nanxiaotao/89720991):param fileName:要加载的数据集路径:return: 训练数据集'''# 定义数据集dataSet = np.zeros((lines, 785))# 打开文件fr = open(fileName, 'r')i = 0# 将文件按行读取for line in fr.readlines():# 对每一行数据按切割福','进行切割,返回字段列表curLine = line.strip().split(',')# Mnsit有0-9是个标记,由于是二分类任务,所以将>=5的作为1,<5为-1x = [int(num)/255 for num in curLine[1:]]if int(curLine[0]) >= 5:dataSet[i] = np.append(x, 1)else:dataSet[i] = np.append(x, -1)i=i+1#返回训练数据集return dataSet
train_dataSet = loadData('../Mnist/mnist_train.csv')

特征空间(Feature Space)

train_dataSet[0][0:784]

统计学习方法

模型

决策函数: f ( x ) = ω ⋅ x + b f(x)=\omega \cdot x+b f(x)=ωx+b

策略

− y i ( ω ⋅ x i + b ) ⩾ 0 -y_i(\omega \cdot x_i + b ) \geqslant 0 yi(ωxi+b)0

算法

− y i ( ω ⋅ x i + b ) ⩾ 0 -y_i(\omega \cdot x_i + b ) \geqslant 0 yi(ωxi+b)0
ω ⇐ ω + η y i x i \omega \Leftarrow \omega + \eta y_i x_i ωω+ηyixi
b ⇐ b + η y i b \Leftarrow b + \eta y_i bb+ηyi

def model_train(train_dataSet, iter=10):''':param train_dataSet:训练数据集:param iter: 迭代次数:return: w和b'''dataMat = np.mat(train_dataSet[:,0:784])labelMat = np.mat(train_dataSet[:,784:785])m, n = np.shape(dataMat)w = np.zeros((1, np.shape(dataMat)[1]))b = 0lr = 0.0001#进行iter次迭代计算for k in range(iter):for i in range(m):xi = dataMat[i]yi = labelMat[i]if -1 * yi * (w * xi.T + b) >= 0:w = w + lr *  yi * xib = b + lr * yiprint('iter %d:%d training' % (k, iter))return w, b
w, b = model_train(train_dataSet, iter = 30)

假设空间(Hypothesis Space)

{ f ∣ f ( x ) = ω ⋅ x + b } \left\{f|f(x) = \omega \cdot x + b \right\} {ff(x)=ωx+b}

输出空间

y = { + 1 , − 1 } =\{+1,-1 \} ={+1,1}

模型评估

训练误差(Training Error)

test_dataSet = loadData('../Mnist/mnist_test.csv',10000)
def model_test(test_dataSet, w, b):'''测试准确率:param test_dataSet:测试数据集:param w: 训练获得的权重w:param b: 训练获得的偏置b:return: 正确率'''dataMat = np.mat(test_dataSet[:,0:784])labelMat = np.mat(test_dataSet[:,784:785])m, n = np.shape(dataMat)errorCnt = 0for i in range(m):xi = dataMat[i]yi = labelMat[i]result = -1 * yi * (w * xi.T + b)if result >= 0: errorCnt += 1accruRate = 1 - (errorCnt / m)return accruRate
accruRate = model_test(test_dataSet, w, b)

测试误差(Test Error)

模型选择

过拟合

正则化

泛化能力


http://www.mrgr.cn/news/23038.html

相关文章:

  • 数据结构:(牛客)CM11 链表分割
  • LeetCode刷题:找到第K大的元素
  • 基于人工智能的智能垃圾分类系统
  • 低代码平台:助力企业数字化转型的利器
  • 请解释Java中的线程局部变量的作用和使用场景。什么是Java中的Lock接口?它与synchronized关键字有何区别?
  • 【JUC】13-原子类
  • C++学习笔记----6、内存管理(五)---- 智能指针(1)
  • 学习threejs,创建立方体,并执行旋转动画
  • 本地服务器部署Text generation并添加code llama实现远程多人协作
  • 线程池的应用
  • 九月五日(k8s配置)
  • 外贸人提高潜在客户EDM电子邮件营销参与度的一些建议
  • 电池的电-热-寿命模型是什么?
  • 在debian11下的tightvncserver配置
  • 安全产品概述
  • oracle数据库报ORA-00060错误(死锁)的解决办法
  • AI人工智能如何重塑我们的世界,引领无限可能
  • 收藏:B站相当精彩的关于向量数据库的2个视频
  • 百望云 X 爱普生 :对接乐企实现税企直连,节省数十万元管理成本!
  • std::fixed