这是我参加mlhub123组织的书籍共读计划的读书笔记,活动见mlhub第一期读书计划 阅读章节:第二章:感知机 开始时间:2018-09-18 结束时间:2018-09-21 目标:读完第二章,掌握基本概念,产出一篇笔记 本章主要介绍了二类分类的线性分类模型:感知机: 感知机模型 感知机学习策略 感知机学习算法 说明:个人感觉这本书偏理论化,讲究的是一招定天下,好处是内功深厚自然无敌,一通百通,但难处是语言有点晦涩,这章可以考虑结合我之前的一篇关于感知器的笔记,或许能加深理解,见这里 感知机模型 感知机(perceptron):是一个二类分类的线性判断模型,其输入为实例的特征向量,输出为实例的类别,取+1和–1值,属于判别模型 注:+1 -1 分别代表正负类,有的可能用 1 0 表示 在介绍感知机定义之前,下面几个概念需要说明一下: 输入空间:输入所有可能取值的集合 输出空间:输出所有可能取值的集合 特征空间:每个具体的输入是一个实例,由特征向量表示 所以对于一个感知机模型,可以这样表示: 输入空间(特征空间):$\chi \subseteq \mathbb{R} ^n$ 输出空间:$\gamma = \{+1,-1 \}$ 那么感知机就是由输入空间到输出空间的函数: $$\displaystyle f( x) \ =\ sign( w\cdot x+b)$$ 其中: $sign$: 符号函数 $w$: 权值(weight)或权值向量(weight vector) $b$: 偏置(bias) 感知机的几何解释如下:线性方程 $$w\cdot x + b =0$$ 如果是二维空间,感知机就是一个线性函数,将正负样本一分为二,如何是三维空间,那么感知机就是一个平面将类别一切为二,上升到n维空间的话,其对应的是特征空间$\mathbb{R} ^n$的一个超平面$S$: $w$: 超平面的法向量 $b$: 超平面的截距 感知机学习策略 数据集的线性可分性 什么是数据集的线性可分性,很简单,对于一个数据集:

这是我参加mlhub123组织的书籍共读计划的读书笔记,活动见mlhub第一期读书计划 阅读章节:第一章:统计学习方法概论 开始时间:2018-09-14 结束时间:2018-09-16 目标:读完第一章,掌握基本概念,产出一篇笔记 第一章主要对全书内容做了一个内容的概括: 统计学习:定义、研究对象和方法 监督学习 统计学习三要素:模型、策略、算法 模型评估与选择:包括正则化、交叉验证与学习的泛化能力 生成模型与判别模型 分类问题、标注问题与回归问题 统计学习 什么是统计学习 统计学习是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科,统计学习也称为统计机器学习 统计学习的特点 统计学习以计算机及网络为平台,是建立在计算机及 网络之上的 统计学习以数据为研究对象,是数据驱动的学科 统计学习的目的是对数据进行预测与分析 统计学习以方法为中心,统计学习方法构建模型并应用模型进行预测与分析 统计学习是概率论、统计学、信息论、计算理论、最优化理论及计算机科学等多个领域的交叉学科,并且在发展中逐步形成独自的理论体系与方法论 什么是机器学习 如果一个程序可以在任务T上,随着经验E的增加,效果P也可以随之增加,则称这个程序可以从经验中学习。 — 卡内基美隆大学的Tom Michael Mitchell教授 如果以垃圾邮件为例,一个程序指的是用到的机器学习算法,比如:朴素贝叶斯、逻辑回归;任务T指的是区分垃圾邮件的任务;经验E为已经区分过是否为垃圾邮件的历史邮件;效果P为机器学习算法在区分是否为垃圾邮件任务上的准确率 统计学习的目的 统计学习用于对数据进行预测与分析,特别是对未知新数据进行预测与分析 统计学习的方法 监督学习(supervised learning):KNN、决策树、贝叶斯、逻辑回归 非监督学习(unsupervised learning):聚类、降维 半监督学习(semisupervised learning):self-training(自训练算法)、Graph-based Semi-supervised Learning(基于图的半监督算法)、Semi-supervised supported vector machine(半监督支持向量机,S3VM) 强化学习(reinforcement learning):蒙特卡洛方法 监督学习 基本概念 输入空间(input space):输入所有可能取值的集合 输出空间(output space):输出所有可能取值的集合 特征空间(feature space):每个具体的输入是一个实例(instance),通常由特征向量(feature vector)表示。这时,所有特征向量存在的空间称为特征空间 联合概率分布:统计学习假设数据存在一定的统计规律,X和Y具有联合概率分布的假设就是监督学习关于数据的基本假设 - 机器学习-联合概率分布笔记 假设空间:学习的目的在于找到最好的模型,模型属于由输入空间到输出空间的映射的集合,这个集合就是假设空间(hypothesis space) 人们根据输入、输出变量的不同类型,对预测任务给予不同的名称: - 分类问题:输出变量为有限个离散变量的预测问题 - 回归问题:输入变量与输出变量均为连续变量的预测问题 - 标注问题:输入变量与输出变量均为变量序列的预测问题

很早就想将博客升级为HTTPS,在心中也确立了方案,步骤也很简单: 博文上传至Git Caddy结合Webhook自动更新,顺便上HTTPS 流程很简单,麻烦在于需要Caddy以及Webhook的设置,然后一台服务器也是必须的,这里本人推荐使用搬瓦工的年付19.9$方案,购买之后,选择CentOS7,安装后进入shell: yum install git vim wget # 创建用户 useradd howie # 设定密码 passwd username # 添加 sudo 权限 visudo # 找到 root ALL=(ALL) ALL # 添加 howie ALL=(ALL) ALL # 用刚创建的用户名登录 # 安装Caddy以及插件,这里我列出了我需要的插件 各位酌情选择 curl https://getcaddy.com | bash -s personal http.git,http.realip,http.ratelimit,http.ipfilter 首先是从git拉取代码,因为我们还是希望服务器可以自动从git远程拉取代码并且自动更新: mkdir git cd git git clone https://github.com/howie6879/howie6879.github.io.git 然后是编写Caddyfile,这是Caddy的配置文件,我将配置文件写在/etc/caddy/Caddyfile,贴上我的配置内容: cd ~ mkdir /etc/caddy/ vim /etc/caddy/Caddyfile # 输入 www.howie6879.cn { root /home/howie/git/howie6879.github.io tls xiaozizayang@gmail.

结合前面讲的配置、项目结构、页面渲染、数据库连接,构造一个优雅的Sanic应用对你来说估计没什么大问题了,但是在实际使用过程中,可能你会碰到各种各样的需求,与之对应,你也会遇到千奇百怪的问题,除了在官方pro提issue,你大部分问题都需要自己去面对,看官方的介绍大概就可以明白Sanic框架的重心不会放在诸如session cache reload authorized这些问题上 本文最新内容可到github上阅读 6.常用的技巧 Async Python 3.5+ web server that’s written to go fast 此篇我将将我遇到的一些问题以及解决方案一一记录下来,估计会持续更新,因为问题是不断的哈哈,可能有些问题与前面讲的有些重复,你大可略过,我将其总结成一些小技巧,供大家参考,具体如下: api请求json参数以及api接口验证 gRPC的异步调用方式 Blueprint html&templates编写 cache 热加载 session 对于一些问题,我将编写一个小服务来演示这些技巧,具体见demo06,依旧使用前面rss的那个例子,经过修改一番后的rss例子现在目录变成这样子了,里面加了我遇到的各种问题的解决方案,或许你只需要关注你想要了解的就好,如果你有其他的问题,欢迎issue提问,目录大概如下所示: src ├── config │ ├── __init__.py │ ├── config.py │ ├── dev_config.py │ └── pro_config.py ├── database │ ├── __init__.py │ └── redis_base ├── grpc_service │ ├── __init__.py │ ├── grpc_asyncio_client.py │ ├── grpc_client.py │ ├── grpc_server.py │ ├── hello_grpc.py │ ├── hello_pb2.

介绍中说的很明白,Sanic 是一个可以使用 async/await 语法编写项目的异步非阻塞框架,既然是异步框架,那么在使用过程中用到的第三方包也最好是异步的,比如http请求,最好就使用aihttp而非requests,对于数据库的连接,也是同样如此,下面我将用代码的形式来说明下如何在Sanic中连接数据库。 操作Mysql 对于mysql数据库的异步操作,我只在一些脚本中用过,用的是aiomysql,其中官方文档中讲得很清楚,也支持结合sqlalchemy编写ORM,然后aiomysql提供了自己编写的异步引擎。 from aiomysql.sa import create_engine # 这个才是关键 下面我编写一个具体的例子来用异步语句操作下数据库,首先建立如下目录: aio_mysql ├── demo.py ├── model.py └── requirements.txt 建立表: create database test_mysql; CREATE TABLE user ( id INT AUTO_INCREMENT PRIMARY KEY, user_name VARCHAR(16) NOT NULL, pwd VARCHAR(32) NOT NULL, real_name VARCHAR(6) NOT NULL ); 一切准备就绪,下面编写代码: # script: model.py import sqlalchemy as sa metadata = sa.MetaData() user = sa.Table( 'user', metadata, sa.Column('id', sa.Integer, autoincrement=True, primary_key=True), sa.

Neural Networks and Deep Learning 是由 Michael Nielsen 编写的开源书籍,这本书主要讲的是如何掌握神经网络的核心概念,包括现代技术的深度学习,为你将来使⽤神经网络和深度学习打下基础,以下是我的读书笔记。 神经网络是一门重要的机器学习技术,它通过模拟人脑的神经网络来实现人工智能的目的,所以其也是深度学习的基础,了解它之后自然会受益颇多,本章主要是以识别手写字这个问题来贯穿整篇,那么,人类的视觉系统和神经网络到底在识别一个目标的时候,主要区别在哪? 人类视觉系统:通过数十亿年不断地进化与学习,最终能够极好地适应理解视觉世界的任务,从而无意识地就可以对目标进行判断识别 神经网络:通过提供的样本来推断出识别某种目标的规则,作为判断标准 本章的主要内容是介绍神经网络的基本概念以及引入一个识别手写数字的例子来加深我们的理解,你将了解到: 两个重要的人工神经元:感知器和S型神经元 神经⽹络的架构 ⼀个简单的分类⼿写数字的⽹络 标准的神经网络学习算法:随机梯度下降算法 感知器 1943年,心理学家McCulloch和数学家Pitts发表了《A logical calculus of the ideas immanent in nervous activity》,其中提出了抽象的神经元模型MP,但是在这个模型中权重都是要求提前设置好才可以输出目标值,所以很遗憾,它不可以学习,但这不影响此模型给后来者带来的影响,比如感知器: 感知器是Frank Rosenblatt提出的一个由两层神经元组成的人工神经网络,它的出现在当时可是引起了轰动,因为感知器是首个可以学习的神经网络 感知器的工作方式如下所示: $x_{1},x_{2},x_{3}$ 分别表示三个不同的二进制输入,output则是一个二进制输出,对于多种输入,可能有的输入成立有的不成立,在这么多输入的影响下,该如何判断输出output呢?Rosenblatt引入了权重来表示相应输入的重要性。 对于$x_{1},x_{2},…,x_{j}$个输入,每个输入都有对应的权重$w_{1},w_{2},…,w_{j}$,最后的输出output由每个输入与其对应的权重相乘之和与阈值之差$\sum _{j} w{_j}x{_j}$来决定,如下: 假设$b=-threshold$且$w$和$x$对应权重和输⼊的向量,即: $x=(x_{1},x_{2},…,x_{j})$ $w=(w_{1},w_{2},…,w_{j})$ 那么感知器的规则可以重写为: 这就是感知器的数学模型,是不是就像一个逻辑回归模型?它的出现让我们可以设计学习算法,从而实现自动调整人工神经元的权重和偏置,与此同时output也会随之改变,这就是学习!如果你有兴趣可以看我用python写的一个感知器自动学习实现与非门,代码在这里。 说句题外话,由于感知器是单层神经网络,它只能实现简单的线性分类任务,所以它无法对异或问题进行分类,异或的真值表如下: $x$ $y$ $output$ 0 0 0 0 1 1 1 0 1 1 1 0 可以看出来,异或问题是线性不可分的,不信你画个坐标轴试试看,那么问题来了?怎么解决,大部分都能很快地想出解决方案,既然感知器可以实现线性分类,也就是说实现与非门是没有问题的,逻辑上来说我们可以实现任何逻辑功能(比如四个与非门实现异或),但前提是为感知器加入一个隐藏层,意思就是多了一个隐藏层的神经网络之后,就可以解决异或问题。