小王同学 - 机器学习 https://feelncut.com/category/ml/ 机器学习,深度学习都在这个分类下面 小 Giao 之死 https://feelncut.com/2019/12/09/giaocamerarobot.html 2019-12-09T22:18:00+08:00 ## 机器人小 Giao 的前生今世 一个突然地想法,想到用个普通的摄像头做个预警机器人🤖,于是折腾了三四天,小 Giao 出生了。 ![](/images/2019/12/245685690.png) *小 Giao 的头像经过模糊处理,头像来自 Allenzsy 在群里分享的第一个图片!* 小 Giao 威力巨大,为了防止小 Giao 统治人类世界,已经将其一棒子打死,尸体在: https://github.com/wangke0809/GiaoCameraRobot ------------ ## 目录 [TOC] ## 需求 需求分析: - 进入实验室检测:能够通过摄像头实时检测到有人进入实验室 -> Face Detection + Multi-label Classification - 检测结果通知:能够方便的接受监测结果 -> 使用钉钉群聊机器人 - 轻量级资源占用:工位上除了有个 2015 年办公的老电脑(i7-4790),还有个 GPU 工作站,因为借来的摄像头数据线长度不够,以及考虑到在工作站上跑实验时占用资源多会严重造成系统卡顿,所以决定在办公电脑上跑小 Giao ,所以需要保证运行小 Giao 的时候不能影响正常办公 -> 聚焦关键区域 + 上下帧图像变化量阈值 [...] 对于朴素贝叶斯算法的理解 https://feelncut.com/2018/03/22/107.html 2018-03-22T11:25:00+08:00 [TOC] ### 算法的基础 贝叶斯定理:已知P(B|A)求P(A|B)。公式: ```math P(A|B)= \frac {P(A)\times P(B|A)}{P(B)} ``` ### 何来朴素 因为对所有条件概率分布作了条件独立性的假设,目的是简化计算量。 ### 极大似然估计与贝叶斯估计 前者可能出现$$P(B_i|A)=0$$的情况,此时会影响到后验概率的计算结果,使分类产生偏差,不能很好的你和测试集。所以引出了贝叶斯估计。拉普拉斯平滑是条件概率贝叶斯估计的一个特例($$\lambda=1$$) 对于K近邻K-NN算法的理解 https://feelncut.com/2018/03/09/knn.html 2018-03-09T16:15:00+08:00 [TOC] ### 整体思想 今天看了K-NN算法,该算法适用于分类,整体思想是把训练数据集当成了一个数据库,在训练数据集找与输入数据最临近的k个数据,这k个数据中的多数属于某个类,这个输入就输入某个类。特别地, k=1 是称为最近邻算法。 ### 如何定义近邻 可以用欧氏距离,$$L_p$$距离,Minkowski距离等。 ### k值的选择 k太小,学习的近似误差会减小,估计误差会增大,比如遇到噪声,这时候容易发生过拟合。 k过大,会增加不相近的数据对输入的干扰,虽然增大了学习的近似误差,但是减少了估计误差,k的增大意味着整体模型变得简单。 k=N,对于一个输入用上了全部数据,不可取。 ### 分类决策规则 多数投票表决规则等价于经验风险最小化,除了投票还有求均值等规则。 ### 实现 书上介绍通过kd树实现训练数据存储,然后在kd树上查找最近邻。除了kd树还有很多优化算法。 对于感知机Perceptron算法的理解 https://feelncut.com/2018/03/08/perceptron.html 2018-03-08T17:01:00+08:00 [TOC] # 算法的适用范围 目标二分类,数据集线性可分。之所以不能学习XOR是因为XOR线性不可分。 # 几何意义 特征空间$$R^n$$中的一个超平面$$S$$将特征空间划分为两个部分。这两个部分分别代表两类。这个超平面称为**分离超平面**。 # 学习策略 感知机的损失函数由误分类点到超平面的距离之后推出,根据空间点到面的距离得到损失函数。 # 原始形式和对偶形式的区别 感知机学习算法分为原始形式和对偶形式,我的理解是原始形式和对偶形式本质上是一样的(废话),不同点在于计算顺序不同。假定处理高维数据,对偶形式的好处为可以首先并行计算出Gram矩阵,然后通过查表更新参数。而原始形式串行处理每组数据进行更新参数。 知乎的[这个](https://www.zhihu.com/question/26526858 "这个")答案解释的有点过了吧。 # 收敛性证明 收敛性证明的思路为递推缩放,主要是推导以下两个不等式。 ```latex ||\hat{W}_k|| \cdot ||\hat{W}_{opt}||\leq k \eta \gamma ``` ```math ||\hat{W}_k||^2 \leq k \eta^2 R^2 ``` # 多解的原因 - 初值不同 - 误分类点出现顺序不同 # 代码 通过`sklearn`实现:[Github](https://github.com/wangke0809/learn-statistical-learning-method/blob/master/Perceptron.py) kaggle房价预测:使用Python综合探索数据 https://feelncut.com/2018/01/23/62.html 2018-01-23T18:30:00+08:00 > 学习[COMPREHENSIVE DATA EXPLORATION WITH PYTHON](https://www.kaggle.com/pmarcelino/comprehensive-data-exploration-with-python "COMPREHENSIVE DATA EXPLORATION WITH PYTHON")笔记 **'The most difficult thing in life is to know yourself'** [...] Ubuntu 16.04下安装Jupyter Notebook并开启远程访问 https://feelncut.com/2018/01/09/50.html 2018-01-09T20:40:00+08:00 > 因为电脑在宿舍,所以开一个Jupyter Notebook远程访问还是比较方便测试程序的。 [...] Ubuntu 16.04下安装MXNet 1.0 GPU版 https://feelncut.com/2018/01/09/Mxnet.html 2018-01-09T20:27:00+08:00 虚拟环境已经在[安装TensorFlow](https://feelncut.com/2018/01/09/TensorFlow.html)的过程中安装好了,在改虚拟环境的基础上进行安装MXNet1.0 版本。 主要参考官方安装指南: > https://mxnet.apache.org/install/index.html [...] Ubuntu 16.04下安装TensorFlow最新GPU版 https://feelncut.com/2018/01/09/TensorFlow.html 2018-01-09T20:15:00+08:00 在安装TensorFlow GPU版本之前,需要安装好CUDA 8.0 + cuDNN 6.0,安装过程见[这里](/2018/01/09/46.html)。其他版本的CUDA与cuDNN也可以参考这个安装步骤。 >**补充:由于TF更新很快,本教程只适用于依赖CUDA 8.0 + cuDNN 6.0的TF版本,不过我按照同样的方法成功安装了CUDA 9.0 + cuDNN 7.0 和 TensorFlow 1.6版本,`注意环境变量添加的时候目录改成CUDA-9.0`。** 本次安装主要按照官网的安装指南进行安装,通过`virtualenv`安装了Python3.5 GPU版本,官网安装指南: > https://www.tensorflow.org/install/install_linux#InstallingVirtualenv [...] Ubuntu 16.04下安装NVIDIA驱动程序 + CUDA 8.0 + cuDNN 6.0 https://feelncut.com/2018/01/09/46.html 2018-01-09T18:39:00+08:00 > 吃鸡总有吃腻的那天,看着屏幕前倒在我枪口下的队友,我毅然决然的决定在自己的[PC机](https://feelncut.com/2018/01/09/44.html)上装个Ubuntu,开始步入深度调参这条不归路... #### **安装其他版本的CUDA与cuDNN步骤一样!!** 原本PC上只有一块M.2的固态硬盘,为了搭建深度学习环境,搞了一块500G的古董机械硬盘,首先分出来100G在Win下用~~装GTAV~~,剩下不到400G用来装Ubuntu。 我看着手中的U盘微微一笑:smirk:,熟练的把他插进了机箱上的USB口。如题目所讲,我装了一个`Ubuntu16.04 LTS`,台式机硬件配置见[这里](https://feelncut.com/2018/01/09/44.html)。 [...]