摘要:
Context本质 golang标准库里Context实际上是一个接口(即一种编程规范、 一种约定)。 type Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan struct{} Err() err 阅读全文
摘要:
我在上一篇文章详细介绍了go反射的API用法,参见 一篇带你全面掌握go反射的用法 - 张朝阳 - 博客园 (cnblogs.com) go自带的json序列化就是通过反射来实现的,为了加深对反射API的掌握程度,我自动实现了类似json序列化和反序列化功能。 package main import 阅读全文
摘要:
最重要的 你为什么要用反射?这个问题请读者自己回答。我强调一下反射的2个弊端: 代码不易阅读,不易维护,容易发生线上panic 性能很差,比正常代码慢一到两个数量级 go语言反射里最重要的两个概念是Type和Value,Type用于获取类型相关的信息(比如Slice的长度,struct的成员,函数的 阅读全文
摘要:
基础知识 json和gob是go语言自带的序列化方式,都在encoding包下面。 go自带的json使用反射机制,效率低。easyjson在解析json数据的时候,并不是使用反射机制,而只针对预先定义好的json结构体对输入的json字符串进行纯字符串的截取,并将对应的json字段赋值给结构体。e 阅读全文
摘要:
关于ZeroMQ(又称ØMQ)有很多传神的解说,我这里给各位看官上一段比较凡尔赛的描述。 Underneath the brown paper wrapping of ZeroMQ’s socket API lies the world of messaging patterns. "在ZeroMQ 阅读全文
摘要:
当然,go语言的超时控制肯定不止4种方法,起这个标题是我的一种自嘲,让我想起了孔乙己说的茴香的茴有4种写法。 本文写的4种方程都借助于同一个套路: workDoneCh := make(chan struct{}, 1) go func() { LongTimeWork() //这是我们要控制超时的 阅读全文
摘要:
磁盘是块存储设备,读写连续的一整块磁盘数据其实还是很快的,平时我们感觉磁盘比内存慢是因为没有顺序地读磁盘,而是在随机读,大部分时间都浪费在寻道和旋转上面。 做个试验,对比一下顺序读磁盘和读写内存的速度,看看到底差多少。 试验方法:创建一个长度为10M的字节数组,执行3种操作--顺序地访问该数组里的元 阅读全文
摘要:
Go语言以高并发闻名于世,牛皮不能光靠吹,今天我们就来做一个对比试验,体会一下Go在并发方面的巨大优势!靶子就瞄准Java,谁让它是后端开发语言的老大哥呢。 基本任务:初始化一个100*100的矩阵,矩阵每个元素是从[0,1)随机取的双精度浮点数,计算矩阵跟自身相乘,需要100万次乘法运算。 机器配 阅读全文
摘要:
按照通常的理解,Channel满了,就阻塞写;Channel空了,就阻塞读 go协程很聪明,阻塞之后它就主动交出cpu,相当于调用runtime.Gosched(),让其他协程去执行,希望其他协程能帮自己解除阻塞(当然是通过读写管道的方式) 如果阻塞发生在main协程里,并且没有其他子协程可以执行, 阅读全文
摘要:
1.购买服务器 服务器就是电脑,理论上个人电脑也可以,但由于服务器上要部署网站,为了保证网站随时可以访问,就要求服务器不能关机。个人电脑由于没有专门的降温设备,长时间运行CPU扛不住,所以最好还是购买专门的服务器。对于个人以及很多小微企业,也不可能真的去向华为、浪潮等服务器提供商购买物理服务器,因 阅读全文
摘要:
特征表示 Field feature feature取值 x 备注 user侧 Field1 性别 男 x1 每个取值对应一个x 女 x2 Field2 年龄 <18 x3 连续特征先离散化 19-24 x4 25-30 x5 31-35 x6 36-40 x7 >40 x8 Field3 省 山西 阅读全文
摘要:
L2正则 $$C=C_0+\frac{\lambda}{n}\sum_{i=1}^n{w_i^2}$$ $$\frac{\partial C}{\partial w}=\frac{\partial C_0}{\partial w}+\frac{\lambda}{2n}w$$ \begin{equat 阅读全文
摘要:
比如我们要开个网站卖书,使用LR模型预估一下用户点击某本书的概率。 1 为什么选用LR 离线训练和在线预测非常快 内存占用少 效果跟xgboost、深度模型差不多 模型简单,方便调参 模型易于解释,排查问题方便 第4点和第5点非常重要,工作实践中大多数时间都是在排查问题,根据badcase调参数。 阅读全文
摘要:
图书简介 实用性是本书的第一个基本出发点,书中介绍了近年来在工业界被广泛应 用的机器学习算法,这些算法经受了时间的考验,不但效果好而且使用方便。此 外作者也十分注意理论的深度和完整性,组织各章节的内容时力求由浅入深、推 理完整、先后连贯、自成体系,先讲统计学、矩阵、优化方法这些基础知识,再 由简到繁 阅读全文
摘要:
python遇到计算性能瓶颈尽量使用Numpy,因为Numpy会调用C的并行计算库,如果numpy不能实现你的需求,就只好自己写C代码了。 用C实现数组的按位相乘(当然这个功能用numpy就可以实现,这里只是个示例): 值得一提的是,对于计算密集型任务,即使不用OpenMP,C语言的速度也比Pyth 阅读全文
摘要:
1. 安装Go版TensorFlow TensorFlow 提供了一个 Go API,该 API 特别适合加载用 Python 创建的模型并在 Go 应用中运行这些模型。 安装TensorFlow C库 下载地址 TensorFlow C 库网址 Linux Linux CPU only https 阅读全文
摘要:
结论: 数据集不同、参数不同、测试方法不同都会导致结论不同,以下是我的测试代码。 storage.go package storage import ( "fmt" ) var storageOpenFunction = map[string]func(path string) (Storage, 阅读全文
摘要:
近期调参感受: 在实际项目中数据和特征对最终的效果贡献是最大的,所以要花时间打造你的数据流,花时间多想一些特征,特征要算准。 word2vec、FFM、XgBoost这些算法之所以能得到业界公认,是因为他们在各种数据集上都表现良好,而且对参数不太敏感。 试验总结: FFM优于FM,FM优于LR。 X 阅读全文
摘要:
上一篇我们讲了《FFM原理及公式推导》,现在来编码实现一下。 把写代码所需要所有公式都列出来,各符号与原文《Field-aware Factorization Machines for CTR Prediction》中的保持一致。 符号约定: $n$:特征的维数 $m$:域的个数 $k$:隐向量的维 阅读全文
摘要:
SSE是Streaming SIMD Extensions的缩写,SIMD是Single Instruction Multiple Data的缩写,即对多条数据并行执行相同的操作,以提高CPU的性能。 从SSE4.1开始支持向量的内积:__m128 _mm_dp_ps( __m128 a,__m12 阅读全文
摘要:
上一篇讲了FM(Factorization Machines),今天说一说FFM(Field-aware Factorization Machines )。 回顾一下FM: \begin{equation}\hat{y}=w_0+\sum_{i=1}^n{w_ix_i}+\sum_{i=1}^n{\ 阅读全文
摘要:
特征组合 x1年龄 x2北京 x3上海 x4深圳 x5男 x6女 用户1 23 1 0 0 1 0 用户2 31 0 0 1 0 1 如上例特征X有6个维度,年龄是连续值,城市和性别用one-hot表示,假设我们用最简单的线性拟合来预测y值。 $$\hat{y}=w_0+\sum_{i=1}^n{w 阅读全文
摘要:
slice 输出: 4 3 [0 1 2][0 1][1 2 0]*****************4 3 [0 1 9][0 1 9][1 9 0]*****************8 5 [0 6 9 7 6][0 1 9][1 9 0]*****************16 10 [0 6 9 阅读全文
摘要:
本文由网上多篇博客拼凑而成。 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等。但是同时,单决策树又有一些不好的地方,比如说容易over-fitting,虽然有一些方法,如剪枝可以减少这种情况,但是还是不够的。 模型 阅读全文
摘要:
指数分布族 \begin{equation} p(y;\eta)=b(y)\cdot exp\{\eta^TT(y)-a(\eta)\} \label{exponential family} \end{equation} $b(y)$和$T(y)$是关于y的函数,$a(\eta)$是关于$\eta$ 阅读全文
摘要:
n阶线性方程组 系统矩阵A非奇异,且aii≠0。则 于是雅可比迭代法就有了: 高斯-赛德尔迭代比雅可比迭代收敛性更好,应为它在计算xim+1时利用了已经计算出来的xi-1m+1 …… x1m+1。 阅读全文
摘要:
参考原文《亚马逊推荐系统20年》 现有所有用户的购物列表: 现在要计算商品X的相似商品。 思路:要计算X和Y的相似度直接计算p(Y|X)即可。根据极大似然估计 \begin{equation} p(Y|X)=\frac{count(X,Y)}{count(X)}=\frac{2}{3} \label 阅读全文
摘要:
#在github上通过GUI创建一个repositoryhttps://guides.github.com/activities/hello-world/ #新建一个文件echo "# my_fisrt_repository" >> README.md#在当前目录初始化一个git环境git init 阅读全文
摘要:
我曾经讲过如何度量两个随机变量之间的独立性和相关性,今天来讲一下如何度量两个概率分布之间的相似度。 在概率论中,f散度用来度量两个概率分布$P$和$Q$之间的距离,距离函数具有如下形式: \begin{equation}D_f(P||Q) \equiv \int_{\Omega}f\left(\fr 阅读全文
摘要:
最大熵模型 最大熵模型的思想是在满足已知条件的情况下,不对未知情况做任何有偏的假设,这样得到的模型预测风险最小。 满足已知条件,且不对未知情况做任何有偏的假设,即认为未知情况各种事件发生的概率相等,这实际上就是说条件熵最大。 $$max \; H(Y|X)=-\sum_i{\sum_j{p(x_i, 阅读全文
摘要:
所有机器学习算法的目标就是求得一个决策函数$y=f(x)$或者说是求得一个条件概率$p(y|x)$。 生成模型:直接求联合概率$p(x,y)$,得到$p(x,y)$后就可以去生成样本。HMM、高斯混合模型GMM、LDA、PLSA、Naive Bayes都属于生成模型。当我们得到HMM模型后,就可以根 阅读全文
摘要:
凸函数 如果一个函数处处二次可微,且对于任意的x都有$f^{''}(x) \ge 0$,则f(x)是凸函数。当x是向量时,$f^{''}(x)$就对应到Hessian矩阵,$f^{''}(x) \ge 0$就对应到Hessian矩阵H是半正定的,即$H \ge 0$。当$f^{''}(x) > 0$ 阅读全文
摘要:
加、减、乘、除、指数运算、求倒数、取相反数、位运算 等各种运算都是在各个元素上分别进行的 加法 >>> a=numpy.array([2,4,5])>>> b=numpy.array([1,1,1])>>> a+barray([3, 5, 6]) 乘法 >>> a*barray([2, 4, 5]) 阅读全文
摘要:
FTRL(Follow The Regularized Leader)是一种优化方法,就如同SGD(Stochastic Gradient Descent)一样。这里直接给出用FTRL优化LR(Logistic Regression)的步骤: 其中$p_t=\sigma(X_t\cdot w)$是L 阅读全文
摘要:
RNN 中文分词、词性标注、命名实体识别、机器翻译、语音识别都属于序列挖掘的范畴。序列挖掘的特点就是某一步的输出不仅依赖于这一步的输入,还依赖于其他步的输入或输出。在序列挖掘领域传统的机器学习方法有HMM(Hidden Markov Model,隐马尔可夫模型)和CRF(Conditional Ra 阅读全文
摘要:
统计语言模型 问题:如何计算一段文本序列出现的概率? 建模:句子S由T个词组成,$S=w_1,w_2,\cdots,w_T$。则句子出现的概率 $$p(S)=\prod_{i=1}^T{p(w_i|context_{w_i})}$$ $context_{w_i}$表示词$w_i$的上下文环境,统计语 阅读全文
摘要:
Michael Nielsen在他的在线教程《neural networks and deep learning》中讲得非常浅显和仔细,没有任何数据挖掘基础的人也能掌握神经网络。英文教程很长,我捡些要点翻译一下。 交叉熵损失函数 回顾一下上篇的公式(7)和(8),基于最小平方误差(MSE)的缺失函数 阅读全文
摘要:
Michael Nielsen在他的在线教程《neural networks and deep learning》中讲得非常浅显和仔细,没有任何数据挖掘基础的人也能掌握神经网络。英文教程很长,我捡些要点翻译一下。 感知机 \begin{equation}output=\left\{\begin{ma 阅读全文
摘要:
查看进程占多少CPU#top -p 25484 查看进程里各个线程占多少CPU#top -p 25484 -H 查看线程的执行栈信息先把线程号转换为16进制。#printf '%0x\n' 286166fc8再通过jstack命令看看这个线程在干嘛$jstack 25484 | grep -A 10 阅读全文
摘要:
PLSA模型 PLSA和LDA很像,都属于主题模型,即它们都认为上帝在写文章时先以一定概率选择了一个主题,然后在这主题下以一定概率选择了一个词,重复这个过程就完成了一篇文章,即$p(d_i,w_j)=p(z_k|d_i)p(w_j|z_k)$,其中$d$表示文章,$w$表示词,$z$表示主题。 模型 阅读全文