Blogs

Contact

微信群 如果上面的图片没有及时更新的话(这几乎是必然的),联系我拉你进群,联系方式有很多,哪种最快看缘分,都试试肯定及时: Email: hu@daonao.com QQ 443089607 微博 @胡争辉 GitHub https://github.com/huzhenghui Facebook TODO Twitter TODO Bitbucket https://bitbucket.org/huzhenghui/ Docker https://hub.docker.com/r/huzhenghui 微信 huzhenghui 更新:2018年2月20日14点26分

继续阅读

How to compose article in chuxinshequ.github.io

chuxinshequ.github.io Alpha Step 1 (manual, only once) “git submodule add” git repository and create soft link Step 2 create article in git reposity Important Please enter the correct format date in Front Matter in front of Markdown article. https://github.com/huzhenghui/public-article/blob/master/posts/help/Front-Matter-Sample.md Step 3 create new issue to trigger CI/CD https://github.com/chuxinshequ/chuxinshequ.github.io/issues/new Step 4 wait 5 minutes then visit https://chuxinshequ.github.io/blog/

继续阅读

Markdown Tables Sample 表格示例

Markdown Tables Sample 表格示例 Name | Age --------|------ Bob | 27 Alice | 23 Name Age Bob 27 Alice 23

继续阅读

Front Matter Sample 格式示例

Front Matter Sample 格式示例 目前使用的 Hugo 支持 Markdown Front Matter 语法 https://jekyllrb.com/docs/frontmatter/ 主要涉及 title、date、tags、categories四个变量 也就是 .md 文件的开头需要包含如下内容 --- title: Post Format Sample 文章格式示例 date: 2018-01-30 17:54:55 tags: [help] categories: help --- 需要注意 Hugo 按照 .md 文件中的 date 变量排序,如果不写或者格式错误,那么就会被排在最后了。 可以在 GitHub 中预览 Markdown Front Matter 语法是否正确,例如上例预览效果为 title date tags categories Post Format Sample 文章格式示例 2018-01-30 09:54:55 -0800 help help 预览中在 date 变量看到时区,也就是 -0800 或者类似的字样代表正确。

继续阅读

Hexo-Yilia加入相册功能

参考:点击查看 但是其中有一些小问题,自己便重新整理了一下(本文适用于使用github存放照片) 主页新建相册链接 主题_config.json文件的menu 中加入 相册和对应的链接 themes/yilia/_config.json menu: 主页: / ... ... 相册: /photos 新建目录并拷贝相应文件 使用的是litten 大神的博客 photos文件夹,对应的路径为: https://github.com/litten/BlogBackup/tree/master/source/photos 自己的项目根目录下的source文件夹下新建photos文件夹,将下载的几个文件放在该文件夹中,或者不用新建,直接将下载的photos文件夹放在source目录下。 文件修改 修改 ins.js 文件的 render()函数 这个函数是用来渲染数据的 修改图片的路径地址.minSrc 小图的路径. src 大图的路径.修改为自己的图片路径(github的路径) 例如我的为: ``` var minSrc = ‘https://raw.githubusercontent.com/Thinkgamer/GitBlog/master/min_photos/' + data.link[i] + ‘.min.jpg’; var src = ‘https://raw.githubusercontent.com/Thinkgamer/GitBlog/master/photos/' + data.link[i]; # 生成json 1:下载相应python工具文件 - tools.py - ImageProcess.py 下载地址:https://github.com/Thinkgamer/GitBlog 2:新建photos和min_photos文件夹 在项目根目录下创建,用来存放照片和压缩后的照片 mkdir photos mkdir min_photos 3:py文件和文件夹都放在项目根目录下 4:生成json 执行 python tools.

继续阅读

梯度算法之批量梯度下降,随机梯度下降和小批量梯度下降

在机器学习领域,体梯度下降算法分为三种 批量梯度下降算法(BGD,Batch gradient descent algorithm) 随机梯度下降算法(SGD,Stochastic gradient descent algorithm) 小批量梯度下降算法(MBGD,Mini-batch gradient descent algorithm) 批量梯度下降算法 BGD是最原始的梯度下降算法,每一次迭代使用全部的样本,即权重的迭代公式中(公式中用$\theta$代替$\theta_i$), $$ \jmath (\theta _0,\theta _1,…,\theta n)=\sum{i=0}^{m}( h_\theta(x_0,x_1,…,x_n)-y_i )^2 $$ $$ \theta _i = \theta _i - \alpha \frac{\partial \jmath (\theta _1,\theta _2,…,\theta _n)}{\partial \theta _i} $$ $$ 公式(1) $$ 这里的m代表所有的样本,表示从第一个样本遍历到最后一个样本。 特点: 能达到全局最优解,易于并行实现 当样本数目很多时,训练过程缓慢 随机梯度下降算法 SGD的思想是更新每一个参数时都使用一个样本来进行更新,即公式(1)中m为1。每次更新参数都只使用一个样本,进行多次更新。这样在样本量很大的情况下,可能只用到其中的一部分样本就能得到最优解了。 但是,SGD伴随的一个问题是噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。 特点: - 训练速度快 - 准确度下降,并不是最优解,不易于并行实现 小批量梯度下降算法 MBGD的算法思想就是在更新每一参数时都使用一部分样本来进行更新,也就是公式(1)中的m的值大于1小于所有样本的数量。 相对于随机梯度下降,Mini-batch梯度下降降低了收敛波动性,即降低了参数更新的方差,使得更新更加稳定。相对于批量梯度下降,其提高了每次学习的速度。并且其不用担心内存瓶颈从而可以利用矩阵运算进行高效计算。一般而言每次更新随机选择[50,256]个样本进行学习,但是也要根据具体问题而选择,实践中可以进行多次试验,选择一个更新速度与更次次数都较适合的样本数。mini-batch梯度下降可以保证收敛性,常用于神经网络中。 补充 在样本量较小的情况下,可以使用批量梯度下降算法,样本量较大的情况或者线上,可以使用随机梯度下降算法或者小批量梯度下降算法。 在机器学习中的无约束优化算法,除了梯度下降以外,还有前面提到的最小二乘法,此外还有牛顿法和拟牛顿法。 梯度下降法和最小二乘法相比,梯度下降法需要选择步长,而最小二乘法不需要。梯度下降法是迭代求解,最小二乘法是计算解析解。如果样本量不算很大,且存在解析解,最小二乘法比起梯度下降法要有优势,计算速度很快。但是如果样本量很大,用最小二乘法由于需要求一个超级大的逆矩阵,这时就很难或者很慢才能求解解析解了,使用迭代的梯度下降法比较有优势。 梯度下降法和牛顿法/拟牛顿法相比,两者都是迭代求解,不过梯度下降法是梯度求解,而牛顿法/拟牛顿法是用二阶的海森矩阵的逆矩阵或伪逆矩阵求解。相对而言,使用牛顿法/拟牛顿法收敛更快。但是每次迭代的时间比梯度下降法长。

继续阅读

梯度算法之梯度上升和梯度下降

第一次看见随机梯度上升算法是看《机器学习实战》这本书,当时也是一知半解,只是大概知道和高等数学中的函数求导有一定的关系。下边我们就好好研究下随机梯度上升(下降)和梯度上升(下降)。 高数中的导数 设导数 y = f(x) 在 $ x_0 $的某个邻域内有定义,当自变量从 $ x0 $ 变成 $$ x{0} + \Delta x $$ 函数y=f(x)的增量 $$ \Delta y = f(x_0 + \Delta x) - f(x_0) $$ 与自变量的增量 $ \Delta x $ 之比: $$ \frac{ \Delta y }{ \Delta x } = \frac{ f(x_0 + \Delta x)-f(x0) }{ \Delta x } $$ 称为f(x)的平均变化率。 如 $ \Delta x \rightarrow 0 $ 平均变化率的极限 $$ \lim{\Delta x \rightarrow 0} \frac{ \Delta y }{ \Delta x } = \lim_{\Delta x \rightarrow 0} \frac{ f(x_0 + \Delta x)-f(x_0) }{ \Delta x } $$ 存在,则称极限值为f(x)在$ x_0 $ 处的导数,并说f(x)在$ x_0 $ 处可导或有导数。当平均变化率极限不存在时,就说f(x)在 $ x_0 $ 处不可导或没有导数。

继续阅读

异常检测之指数平滑(利用elasticsearch来实现)

指数平滑法是一种特殊的加权平均法,加权的特点是对离预测值较近的历史数据给予较大的权数,对离预测期较远的历史数据给予较小的权数,权数由近到远按指数规律递减,所以,这种预测方法被称为指数平滑法。它可分为一次指数平滑法、二次指数平滑法及更高次指数平滑法。 关于指数平滑的得相关资料: ES API接口: > https://github.com/IBBD/IBBD.github.io/blob/master/elk/aggregations-pipeline.md https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-pipeline-movavg-aggregation.html 理论概念 > http://blog.sina.com.cn/s/blog_4b9acb5201016nkd.html ES移动平均聚合:Moving Average的四种模型 simple 就是使用窗口内的值的和除于窗口值,通常窗口值越大,最后的结果越平滑: (a1 + a2 + … + an) / n curl -XPOST 'localhost:9200/_search?pretty' -H 'Content-Type: application/json' -d' { "size": 0, "aggs": { "my_date_histo":{ "date_histogram":{ "field":"date", "interval":"1M" }, "aggs":{ "the_sum":{ "sum":{ "field": "price" } }, "the_movavg":{ "moving_avg":{ "buckets_path": "the_sum", "window" : 30, "model" : "simple" } } } } } } ' 线性模型:Linear 对窗口内的值先做线性变换处理,再求平均:(a1 * 1 + a2 * 2 + … + an * n) / (1 + 2 + … + n)

继续阅读

Elasticsearch-DSL部分集合

ELK是日志收集分析神器,在这篇文章中将会介绍一些ES的常用命令。 点击阅读:ELK Stack 从入门到放弃 DSL中遇到的错误及解决办法 分片限制错误 Trying to query 2632 shards, which is over the limit of 1000. This limit exists because querying many shards at the same time can make the job of the coordinating node very CPU and/or memory intensive. It is usually a better idea to have a smaller number of larger shards. Update [action.search.shard_count.limit] to a greater value if you really want to query that many shards at the same time.

继续阅读

数据结构算法之链表

链表面试总结,使用python实现,参考:https://www.cnblogs.com/lixiaohui-ambition/archive/2012/09/25/2703195.html #coding:utf-8 # 定义链表 class ListNode: def __init__(self): self.data = None self.pnext = None # 链表操作类 class ListNode_handle: def __init__(self): self.cur_node = None # 链表添加元素 def add(self,data): ln = ListNode() ln.data = data ln.pnext = self.cur_node self.cur_node = ln return ln # 打印链表 def prt(self,ln): while ln: print(ln.data,end=" ") ln = ln.pnext # 逆序输出 def _reverse(self,ln): _list = [] while ln: _list.append(ln.data) ln = ln.pnext ln_2 = ListNode() ln_h = ListNode_handle() for i in _list: ln_2 = ln_h.

继续阅读