Latex速查 March 22, 2018 转自[一份不太简短的 LATEX2e 介绍](http://www.mohu.org/info/lshort-cn.pdf "一份不太简短的 LATEX2e 介绍") [latex.pdf](https://image.feelncut.com/2018/03/1734916613.pdf)
对于朴素贝叶斯算法的理解 March 22, 2018 [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算法的理解 March 9, 2018 [TOC] ### 整体思想 今天看了K-NN算法,该算法适用于分类,整体思想是把训练数据集当成了一个数据库,在训练数据集找与输入数据最临近的k个数据,这k个数据中的多数属于某个类,这个输入就输入某个类。特别地, k=1 是称为最近邻算法。 ### 如何定义近邻 可以用欧氏距离,$$L_p$$距离,Minkowski距离等。 ### k值的选择 k太小,学习的近似误差会减小,估计误差会增大,比如遇到噪声,这时候容易发生过拟合。 k过大,会增加不相近的数据对输入的干扰,虽然增大了学习的近似误差,但是减少了估计误差,k的增大意味着整体模型变得简单。 k=N,对于一个输入用上了全部数据,不可取。 ### 分类决策规则 多数投票表决规则等价于经验风险最小化,除了投票还有求均值等规则。 ### 实现 书上介绍通过kd树实现训练数据存储,然后在kd树上查找最近邻。除了kd树还有很多优化算法。
对于感知机Perceptron算法的理解 March 8, 2018 [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)
投票私链交付文档 March 6, 2018 [TOC] ### 环境要求 开发环境: Ubuntu 16.04 Python 3.5+ PM2 创世区块分配钱包地址为:`0x4a244BF6834f7569A726DB8ec0D3B24D31ce52c3` 私钥为:`0x4a115bf4ec4e27fce40db37c974d526953e50cc5c1edbffef3f724062fcb01c7` ### 环境安装 #### 安装PM2 PM2用于管理Geth和Web API后台进程。 **参考安装方式**:通过 nvm 安装 NodeJS ``` curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash source ~/.bashrc nvm install v6.9.1 npm install -g pm2 ``` #### 安装Python环境 安装Web API 必须环境: 安装时注意python应使用python3,如果系统带有python2.7和python3.5,下面命令应使用`python3`。 ``` # python 包管理器pip sudo apt-get python3-pip sudo pip install --upgrade pip # python web framework sudo pip install flask # python web server sudo pip install gunicorn # install web3.py sudo apt-get install libssl-dev libffi-dev autoconf automake libtool git clone git@github.com:ethereum/web3.py.git cd web3.py pip install -r requirements-dev.txt pip install -e .[tester] # install pyethereum sudo apt-get install libssl-dev build-essential automake pkg-config libtool libffi-dev libgmp-dev libyaml-cpp-dev git clone https://github.com/ethereum/pyethereum/ cd pyethereum python setup.py install ``` ### 部署节点 #### 部署主节点 ``` cd vote_master # start block chain pm2 start geth.sh # start web api pm2 start web.sh # show pm2 list pm2 list # show nodeInfo ./geth attach http://127.0.0.1:8545 # 控制台内输入 admin.nodeInfo ``` 保存nodeInfo中的enode: ``` "enode://7c2222797bc4579e5675d75a4ed6803606f7ea925ffd83ce58712e21488c5a30c107758ac69098e791f4589a23663cfb8484d0f56663e06f4d1b9517f3b685f0@[::]:30101" ``` 注意:`[::]`替换为`ip` 更多pm2命令参考:http://pm2.keymetrics.io/docs/usage/quick-start/ #### 部署挖矿节点 ``` cd vote_miner # 初始化挖矿节点 bash init.sh ``` 在`data`目录下新建`static-nodes.json`,保存一下内容,注意替换`ip`: ``` ["enode://7c2222797bc4579e5675d75a4ed6803606f7ea925ffd83ce58712e21488c5a30c107758ac69098e791f4589a23663cfb8484d0f56663e06f4d1b9517f3b685f0@ip:30101"] ``` ``` # 启动节点 pm2 start miner.sh ``` 至此,环境部署完毕。 ### 智能合约 `smart contracts`下`token contract`为代币智能合约源代码,`abu.js`和`votes.js`为合约部署文件。部署智能合约参考推荐在控制台中部署。