随笔分类 -  基本算法

凸优化(Convex Optimization)浅析
摘要:本博客已经迁往http://www.kemaswill.com/, 博客园这边也会继续更新, 欢迎关注~在机器学习中, 很多情况下我们都需要求得一个 问题的全局最优值(global optimum). 大多数的全局最优值很难求得, 但是对于凸问题, 我们可以比较高效的找到其全局最优值, 这是由凸问题的性质决定的.我们将逐步的介绍凸集, 凸函数, 凸问题等.1. 凸集(convex set)对于一个集合\(C\), 如果对于任意两个元素\(x,y \in C\), 以及任意实数\(\theta \in \mathbb{R}\)且\(0 \leq \theta \leq 1\)都满足$$\thet 阅读全文

posted @ 2013-11-23 22:47 潘的博客 阅读(10853) 评论(0) 推荐(1) 编辑

判别式模型 vs. 生成式模型
摘要:1. 简介 生成式模型(generative model)会对\(x\)和\(y\)的联合分布\(p(x,y)\)进行建模,然后通过贝叶斯公式来求得\(p(y|x)\), 最后选取使得\(p(y|x)\)最大的\(y_i\). 具体地, \(y_{*}=arg \max_{y_i}p(y_i|x)=arg \max_{y_i}\frac{p(x|y_i)p(y_i)}{p(x)}=arg \max_{y_i}p(x|y_i)p(y_i)=arg \max_{y_i}p(x,y_i)\). 判别式模型(discriminative model)则会直接对\(p(y|x)\)进行建模. 关于二者之 阅读全文

posted @ 2013-11-17 02:28 潘的博客 阅读(20506) 评论(6) 推荐(2) 编辑

线搜索(line search)方法
摘要:在机器学习中, 通常需要求某个函数的最值(比如最大似然中需要求的似然的最大值). 线搜索(line search)是求得一个函数\(f(x)\)的最值的两种常用迭代方法之一(另外一个是trust region). 其思想是首先求得一个下降方向,在这个方向上\(f(x)\)会下降, 然后是求得\(f(x)\)在这个方向上下降的步长. 求下降方向的方法有很多, 比如梯度下降, 牛顿方法和Quasi-Newton方法, 而步长可以是固定值, 也可以通过诸如回溯线搜索来求得. 1. 线搜索(line search) 线搜索是一种迭代的求得某个函数的最值的方法. 对于每次迭代, 线搜索会计算得到搜索的. 阅读全文

posted @ 2013-11-11 20:36 潘的博客 阅读(26549) 评论(0) 推荐(3) 编辑

受限玻尔兹曼机(Restricted Boltzmann Machine, RBM) 简介
摘要:受限玻尔兹曼机(Restricted Boltzmann Machine,简称RBM)是由Hinton和Sejnowski于1986年提出的一种生成式随机神经网络(generative stochastic neural network),该网络由一些可见单元(visible unit,对应可见变量,亦即数据样本)和一些隐藏单元(hidden unit,对应隐藏变量)构成,可见变量和隐藏变量都是二元变量,亦即其状态取{0,1}。整个网络是一个二部图,只有可见单元和隐藏单元之间才会存在边,可见单元之间以及隐藏单元之间都不会有边连接,如下图所示: 上图所示的RBM含有12个可见单元(构成一个向量. 阅读全文

posted @ 2013-07-21 13:06 潘的博客 阅读(80376) 评论(3) 推荐(7) 编辑

时间序列挖掘-预测算法-三次指数平滑法(Holt-Winters)
摘要:在时间序列中,我们需要基于该时间序列当前已有的数据来预测其在之后的走势,三次指数平滑(Triple/Three Order Exponential Smoothing,Holt-Winters)算法可以很好的进行时间序列的预测。 时间序列数据一般有以下几种特点:1.趋势(Trend) 2. 季节性(Seasonality)。 趋势描述的是时间序列的整体走势,比如总体上升或者总体下降。下图所示的时间序列是总体上升的: 季节性描述的是数据的周期性波动,比如以年或者周为周期,如下图: 三次指数平滑算法可以对同时含有趋势和季节性的时间序列进行预测,该算法是基于一次指数平滑和二次指数平滑算法的。 一次. 阅读全文

posted @ 2013-04-01 15:53 潘的博客 阅读(41144) 评论(0) 推荐(3) 编辑

基本算法-堆排序及其Java实现
摘要:(二叉)堆(heap)数据结构是一种数组对象,可以视作一颗完全二叉树,从该二叉树的根开始层次遍历这颗二叉树就可以得到其对应的数组。树的根节点为A[0],对于树中某个节点的坐标i,其左右孩子节点和父亲节点的坐标可以很方便的求得: LEFT(i)=2*i+1; RIGHT(i)=2*i+2; PARENT(i)=i/2 . 有两种二叉堆:最大堆和最小堆。最大堆中,每个节点存储的数值都大于等于其左右两个孩子节点存储的数值,亦即A[i]>=A[LEFT[i]]&&A[i]>=A[RIGHT[i]]。最小堆则正好相反。本文以最大堆为例。 知道了最大堆的定义之后,就要在给定的任 阅读全文

posted @ 2012-10-05 11:24 潘的博客 阅读(1290) 评论(0) 推荐(0) 编辑

基本算法-求最大子数组和 及其变种
摘要:这是个非常常见的算法题,见诸于《编程之美》、《编程珠玑》等经典算法书籍(亦或,经典面试书籍:))。网上有很多关于这个问题的讨论和实现,我谨在此写下自己的理解,可能之前有人写过,但毕竟是自己思考出来的东西,权当记录一下。 问题:一个有N个整数元素的一维数组(A[0],A[1].....,A[n-1]),这个数组当然有很多个子数组(n*n个),求最大的子数组之和。 经典解法:1 maxsofar=02 maxendinghere=03 for i=[0,n)4 maxendinghere=max(maxendinghere+a[i],0)5 maxsofar=max(ma... 阅读全文

posted @ 2012-10-04 20:42 潘的博客 阅读(634) 评论(0) 推荐(0) 编辑

基本算法-0/1背包问题
摘要:关于0/1背包问题网上有非常多的博文,在此我谨记录一下自己的理解。 问题表述:有N件物品和一个容量为V的背包。第i件物品的体积是C[i](0<=i<=N-1),价值是W[i]。求解将哪些物品装入背包可使价值总和最大。每个物品最多只可以放入背包一次。 这个问题的经典解法思路如下: 我们用f[i][j]表示在考虑前i个物品时体积为j的背包的最大价值,注意,我们并不是把前i个物品全部放入背包,而是考虑i个物品中挑选一些放入背包,使得价值最大的那些情况。 首先,我们考虑只有1个物品(第0个)时,容量分别为0,1,...,V的各背包所包含物品的最大价值。很明显,容量大于等于C[0]的背包的最 阅读全文

posted @ 2012-10-04 19:45 潘的博客 阅读(544) 评论(0) 推荐(0) 编辑

导航