- 博客(58)
- 收藏
- 关注
原创 About Bayesian Theory
当我们要判断一个x他属于哪一类时,也就是要判断他的y值,那么可以通过这个公式转移,朴素贝叶斯分类器的做法比较简单,直接比较分母,因为分子是相同的,我只要找到使得分子最大的那个y,就是x属于的类别,但是这里需要注意的有两点:1 P(x/y)应该可以写成P(x1/y)*p(x2/y)*....p(xn/y),这需要这些属性条件独立才能这样拆开来做。2 对于P(xi/y)这个值,如果一旦出现了0
2015-04-18 15:58:31 629
原创 LeetCode Largest Rectangle in Histogram&&Maximal Rectangle
第一题就是让你在一个直方图里面求一个面积最大的矩阵,觉得O(n*n)的方法应该是非常显然了,枚举一个长方形,分别往前往后找到它的界,也就是第一个比这个长方形高度小的位置,然后两个界之差乘以这个长方形的高度就是结果,然后枚举所有长方形求最大值即可。这样的复杂度应该是过不了的,这题枚举长方形确实已经不能再优化了,但是找界的方法,可以用一个叫单调队列的东西在O(1)的时间找到。我曾经做过这么一道题,
2015-04-10 12:33:49 511
原创 LeetCode Best Time to Buy and Sell Stock III && Best Time to Buy and Sell Stock IV
LeetCode这个买股票题,个人认为是出的比较好的,一共四个问题,其中3和4都是hard,在我看来,4的难度比3还是难了不少,因为他涉及到了dp的优化这里就稍微再提一下第一问和第二问,第一问已经有了一个dp的思想,答案是max(prices[i]-min(prices[j]))其中,j从0取到i-1,乍一看需要O(n*n)的复杂度,但是通过用一个数保存前i个price中最小的那个price就
2015-03-13 10:57:28 488
原创 Projection Matrix and Linear Regression
假如想把一个向量投影到一个空间,我们想得到投影后的向量,那么我只需要用一个投影矩阵乘以原来的向量就能得到投影后的矩阵,那么如何得到这个投影矩阵呢,下面开始推导,首先从一维空间开始:对于上面这幅图来说,a,b都是向量,x是一个数,可以得到:解出: 因为aTb是一个数字,所以我们能将数字和向量a交换,得到投影后的向量xa。对于投影到一维空间来说,
2014-12-15 11:42:14 1642 2
原创 Probabilistic Latent Semantic Analysis(PLSA)
对于上次说的LSA模型,它能解决多个单词一个意义,但是不能解决多个意义一个单词,就是多义词的问题,而PLSA模型能较好的解决这个问题,首先说下,这个模型的假设:1 假设生成一个单词的过程是这样的:首先选择一篇文章di,然后再次基础上选择一个潜变量zk,最后在此基础上再在选择一个单词。如果p(di,wj)表示第i个文本中第j个单词的概率,根据假设有:2 另外一个非常重要的假设是,单词wj
2014-12-13 20:35:42 1103 2
原创 最小哈希和局部性哈希理论
最近在看《大数据-互联网大规模数据挖掘与分布式处理》这本书,觉得里面有些内容还是值得学习的,对于超大规模的文档集合,文档长度很长,文档的个数也很多,这么个情况下,如果寻找相似性比较高的文档对,会有一些问题,比如内存不够用,时间复杂度过大。首先需要说明两点:1相似度衡量的一个方法:采用Jaccard相似度,它的数学表达式为:A与B的相似度为A与B的交集除以A与B的并集。2 文本的特征:采
2015-08-11 19:29:52 1520
原创 Kmeans中k值的相关理论
Kmeans算法作为机器学习十大算法之一,它的流程相信不用多说,这里说下它的缺点:1.需要提前给定k值2.对初始聚类中心的选取有很大的依赖性3.如果长时间不能收敛,计算时间会很长。而对于初始聚类中心的选择,《大数据-互联网大规模数据挖掘》这本书里有相关的策略,主要提到了2点;1 尽量选择较远的点作为聚类中心:首先随机选一个点,然后选距离这个点最远的点作为第二个聚类中心,然后再选
2015-08-10 22:34:38 1334
原创 PageRank及其MapReduce实现
Pagerank是一个衡量网页重要性的算法,这个算法把互联网上的网页集合看成一个有向图,每个网页是一个节点,如果网页A有指向网页B的链接,则这两个点存在一条有向边A->B,那么如果A这个网页上有k个网页的链接,那么他会以1/k的概率从A这个网页跳到他所指的网页,所以可以用一个转移矩阵来表示一对网页集合的转移关系。这幅图相应的转移矩阵为:相信这个转移矩阵应该很好理解,另外就是一个
2015-08-08 17:30:19 4077 1
原创 MapReduce初步理解及一些简单计算应用
MapReduce 只要靠2个函数来进行计算,map函数和reduce函数,分开来说的话,它主要计算过程如下:1 map函数的作用将多个输入转化成很多个键值对,具体如何转换,需要看具体问题编写具体的map函数。 2 对于产生的所有的键值对,会按照键的值进行分组,同一个键值的会分到同一组,每一组又可以归到一个reduce任务。3 对于相同键产生序列对,reduce任务会将它们按照某种方
2015-08-06 17:10:49 2225
原创 Preliminary understanding of bagging and boosting
boosting and bagging这两个概念在统计学习理论中还是挺重要的,两者都采取训练多次的做法,但是还是有一些区别,先说比较简单的bagging。bagging 也称bootstrap aggregation,它其实就是抽样了很多次,然后每次对抽样训练出一个分类器,那么最后的分类结果是基于这些所有分类器投票的结果。bagging的具体做法:1 从样本集中用Bootstrap(
2015-04-19 20:12:49 549
原创 Gaussian discriminant analysis and Gaussian Mixture Model
高斯判别分析的做法和贝叶斯思想有一定的公式,他是根据贝叶斯
2015-04-17 17:05:35 1372
原创 CART Decision Tree and two pruning theory
之前讲过ID3和C4.5决策树,CART和他们的区别虽然不大,但还是有一些值得说明的区别:1 CART节点分支只能是两个,就是说二分,对于连续型feature,那么就和C4.5的方法一样,选取最优的分界。如果是离散型feature,那么我们想要分成两部分,就显得比较复杂,比如说1,2,3分成两部分,可以是{1,2},{3}和{1,3},{2},{2,3},{1}。这里可以说一个公式,n个属性,
2015-04-16 11:23:12 753
原创 Bias and Variance
本文主要是想解释清楚machine learning中比较重要的两个概念及他们的关系,之前说到过过拟合问题,过拟合问题可以这样理解,由于我只是为了目标cost函数最小而选用比较复杂的模型来拟合,来达到每个点基本都是完全预测正确这样的一个效果,但是问题来了,这样的预测模型好不好?
2015-04-14 21:16:27 679
原创 ID3 and C4.5 Decision Tree
ID3决策树主要是用来进行分类,它的主要做法还是比较简单的,但是基于是递归的建树,所以写起代码来不是那么好写,它的做法大概是:对于初始样本,选择一个最优的feature(怎么样算是最优,下面会解释),将一个点根据这个feature的不同取值,分成不同的分支,也就是说feature取几个值,就有几个分支,然后递归它的每一个分支,直到达到某些条件则停止递归。
2015-04-14 16:29:09 654
原创 Logistic regression ,Softmax regression and Newton's method
首先说的是Logistic regression,z这个回归的相对还是比较简单的,但是一般来说他只能用于分两类(0或1)的情况,虽然我曾在Andrew Ng的课上好像记得也可以处理多类的情况,但是 Softmax regression貌似是一个更好的处理多类情况的一个方法。Logistic regression的思想其实非常简单,就是将负无穷到正无穷的区间用一个函数映射到了0到1的区间。这个函
2015-04-12 21:04:26 840
原创 BP Neural Networks初步理解
神经网络应该有很多种,先说最经典的bp神经网络,bp的全称就是Back Propagation,中文译为反向传播。首先来一张神经网络的图:这是一张只有一层hidden layer的神经网络,它的大致做法可以用这样的式子表示:其实X是输入层,Y是输出层,Z是隐藏层,alpha和beta都是待估计的参数,第一行那个字母函数一般选择sigmoid函数,而gk(T)这个函数是sotfm
2015-03-11 11:14:42 1656
原创 Apriori算法及python代码实现
Apriori算法作用就是在一个数据集合中,找到满足出现次数大于等于一个阀值的子集及出现个数,这句话可能不是很好理解。举一个例子,比如说你是一家超市的店主,每天你的超市有大量的商品卖出,你想知道哪几样的商品,他们被一起买的次数很多,那么你可以改变超市商品摆放布局,让被一起买的商品放的位置近一些,这样可能能提高超市的销售额。那么假如现在有很多张顾客购买的清单,他们总共购买了n种商品,你想找出这n种商
2015-02-28 12:50:32 4315 2
原创 LeetCode Subsets && Subsets II
这是两个比较基础的搜索题(dfs),可能也叫做回溯法,个人觉得dfs一般都会有回溯,第一问比较简单,每次进入一个状态就把当前状态加入到ans中,如何只要在搜索过程中,记录当前的起点是第几个数,然后从该数往下搜索即可,注意保留现场,也就是push_back后还得pop_back,代码如下:vector >ans;vectortmp;void solve(int dep, vector &S){
2015-02-07 10:15:01 441
原创 LeetCode Dungeon Game
起初我是这样定义dp的。dp[i][j]表示从(0,0)到(i,j)需要的最少血量,那么有,dp[i][j]=min(dp[i-1][j],dp[i][j-1])-dungeon[i][j];大家可以想想这个方程对吗?给这么一组数据 -3,2那么我走到-3需要hp=4,那么走到2需要hp反而变少了,变成了2?试问我用hp等于2出发,连-3都过不了!所以这样的方程明显错误。换
2015-01-28 21:20:46 617
原创 LeetCode Longest Valid Parentheses
觉得本题是我见过为数不多的O(N)复杂度的dp,当然思想也比较巧妙,不过这题不是我自己想出来的,由于这个括号匹配问题和卡特兰数有关,所以我的dp方程就是往二维的去想了,但是这题就是超时。dp[i]表示以第i个字符为结尾的最长合法串,首先如果这个字符是左括号,那么有dp[i]=0,否则计算dp[i]可能需要dp[i-1]的值,就是dp[i-1]表示以第i-1个字符为结尾的最长合法串,那么在这
2015-01-28 20:02:21 417
原创 Fisher's linear discriminant(Linear Discriminant Analysis)
Fisher's linear discriminant的主要思想是(简单起见这里先讨论分成2类的情况)将高维的数据投影到一维,在这一维上,我们就能轻易得到分类。以下两幅图分别来自prml 和the elements,我觉得非常好的说明了在分成两类的情况下Fisher's linear discriminant的思想(左图的投影没有右图的好):
2015-01-21 20:37:36 7416 4
原创 LeetCode Palindrome Partitioning I&&Palindrome Partitioning II
一看到这个问题马上有一个类似矩阵连乘dp的思想,dp[i][j]表示第i个字符到第j个字符可以分的最少回文串数,那么有dp[i][j]=min(dp[i][k],dp[k+1][j]),k=[i,j-1],如果i到j不是回文;dp[i][j]=1,i到j是回文。用这样的方法首先要用数据isdc[i][j]来记录i位置到j位置的串是不是回文,计算这样的dp数组需要的时间复杂度是O(n^3),交上去超
2015-01-16 19:59:22 487
原创 LeetCode 3Sum&&3Sum Closest&&4Sum
终于做了决定,开始做LeetCode,上来先做了3题都是关于sum的,这三题我认为都是从同一个问题变过来的,很多人都知道一个经典的问题就是给你一个数组a和一个数字tar,问你这个数组中有没有两个数的和等于这个给定的数字tar,显然要用O(N)的方法,这个问题的答案就是先排序,然后定义两个边界l和r,l一开始等于0,r一开始等于n-1,每次把边界指的两个数相加和给定的数tar比较一下,如果比tar小
2015-01-14 10:42:57 492
原创 Least Angel Regression
最小角回归和上一篇说的forward stepwise有一些相似的地方是都是将一些variable选到variable集合中来,不一样的是,forward stepwise 每次选的都是与当前残差相关度最大的variable,选进来以后,会重新对所有的入选variable做一下回归,而最小角回归的做法是,同样是首先找到与当前残差相关度最大的variable,然后沿着这个这个variable的方向行
2015-01-12 11:48:46 1261
原创 subset selection
这几天看the elements of statistical learning,觉得非常吃力,可能自己水平还不够,觉得这书不适合初学者看,就从Subset Selection 这一章节来说,本文说了主要说了三个点,best-subset selection,stepwise selection and stagewise selection,但是后面两个并没有特别详细的做法步骤,看的似懂非懂,后
2015-01-09 10:44:39 5374 1
原创 poj1952
又是一道最长上升子序列的变形,让你求最长下降子序列的长度和个数,长度很简单,统计个数关键是不能重复,什么叫做重复呢,就是你找出来的所有情况,不可以存在2种序列完全一模一样,比如3 2 1 3 2 1这个问题答案 3 1,因为第一个 虽然有2个3 2 1出现,但是他们是重复的,只能算是一种。首先一个问题,假如现在不考虑重复,怎么求最长下降子序列的个数。对于这个问题,我首先想起来以前做过的一道关于最短
2014-12-29 11:37:36 1046
原创 Regularization and Ridge Regression
对于线性回归中过拟合的问题,有一种叫做regularization的方法,将代价函数改成了
2014-12-23 11:58:00 942
原创 Spectral Clustering
谱聚类一般用于无向图点的聚类,进行谱聚类首先需要得到需要这个图的临界矩阵W和度矩阵D。临界矩阵的定义相信大家都清楚,w(i,j)=0表示i,j两个点没有边相连,否则w(i,j)=1,至于对于任意一个图,什么时候让两个点相连呢,到本文后面会去讨论,另外一个矩阵叫做度矩阵,用D表示,它是一个对角矩阵,定义如下:最为重要不是D或者W,而是D-W,定义一个图的laplacian矩阵为
2014-12-19 23:36:45 734
原创 hdu1069
本题是一个最长上升子序列的变形,题目给你n种长方体,每种都是无数个,然后让你堆出最大的高度,如果长方体A能放在长方体B上面,那么必须满足长方体A的底面长宽分别都是严格小于长方体B的,根据这一点,给定一块长方体,按照不同的放法,可以生成6个长方体,注意不是3块。另外比较重要的一点就是,这个问题dp前必须要排序,假设长方体的长宽高设为x,y,z,因为前面已经扩展出6个长方体,我就把z当做高,把x,y当
2014-12-19 00:07:53 512
原创 九度1499
这题与很久以前做过一个贪心题类似,给你n个任务,每个任务都有起始时间和结束时间,而且每个任务还有一个价值,不可以在同一时间同时做两个任务,也就是说不能一个任务没做完去做下一个任务,说白了就是给你一段区间,然后几个线段让你去放到区间上,区间和区间不能有重叠(边界有交集可以),每个区间有个价值,问你怎么放才能取得最大的价值。我之前做的是价值为1的,或者说是问你最多可以安排多少个任务,这道题每个区间
2014-12-13 21:10:04 396
原创 EM Algorithm
上一次刚写了LSA模型,本来这次想写PLSA模型,但是由于PLSA模型是需要用到EM算法的,所以这里我想先解释下EM算法,
2014-12-13 11:12:23 785
原创 Latent Semantic Analysis(LSA)
对于一个term-document加权词频矩阵(如TD/IDF),如果他的规模m*n非常大,那么这些文本的存储还有计算聚类都会有不小的麻烦,LSA采用SVD分解将高维文本映射到低维的隐含语义空间,较好的解决了这个问题。分解后的三部分都有解释,U*sigma的每行都是每个单词在隐含语义层的坐标,V*sigma的每行都是每个文本在隐含语义层的坐标,另外也有一种说法就是U,V分别为单词和文本在潜
2014-12-12 10:15:02 1160
原创 关于几种二分的想法
一般的二分能解决在单调序列中查找某个数是否存在的作用,假如查找的某数有多个,我要你输出第一个的位置,或者最后一个的位置,其实这些问题也能用而二分解决。c++中貌似自带lower_bound 和upper_bound函数,分别是在单调有序的序列中,找到第一个大于给定值和第一个大于等于给定值的数的位置,但是这些都是怎么实现的呢?现在有一串单调非递减的序列(意味着有重复数字),那么先说明4个问题
2014-12-09 12:01:38 997 2
原创 SVD and PCA
MIT 线性代数课程中讲过的矩阵分解有很多种,但是据我所知最重要的应该是SVD分解了,假如现在想把行空间的正交基通过A左乘的方法变换到列空间的正交基,既有:需要说明的一点是,我们可以轻易得到行空间的正交基,但是并不是所有的A都能满足变换过去后还是正交基的条件,所以,这个A需要满足条件,或者说A和U,V需要满足一定的关系。将上式左右两边都乘以V的转置,就可以得到矩阵奇异值分解的公式,SV
2014-12-09 10:09:16 1206 3
原创 About PCA
在处理高维度的数据时,比如数据个数为m,每个数据都是n维的,经常遇到的一个问题就是m*n这个值非常大,这不仅对于存储,而且对于计算都是不小的麻烦,主成分分析法(PCA)可以有效的解决这个问题,主成分分析法的大概意思就是,让原来的每个特征经过线性组合生成新的几个特征,新的特征的个数,一般是远远小于原来特征的个数,这样我们处理每个数据的新特征就行,但是我们如何选择新的特征呢,或者说如何选择线性组合的系
2014-12-08 09:57:22 582
原创 关于几个数
说这些数和公式之前,我想先说下一个非常重要的问题,也就是子问题,所谓子问题,无非就是问题实质和原问题一样,而规模小了一点而已,可能小了1,也可能小了一半,解决一个问题往往要解决它的子问题,然后通过子问题的值推到出原问题的答案,这也是动态规划的精髓之一。1错排:有n个人编号1到n,本来都站在各自的位置上,现在让他们站一排,每个人不能站在原来的位置上去,问有都少种排列方法?现在我觉得我高中
2014-02-13 10:58:07 847 3
原创 约瑟夫问题
以前搞acm的时候,做的最少的就是数论这种题目了,可以说是完全不会,曾经接触过约瑟夫问题,如果作为一个模拟,给初学者做做挺好的,但是它居然有公式,而且公式和mod扯上了关系,乍一看以为又是和数论有关,其实,它最主要的是一个递归子问题,也是我比较喜欢的问题之一。约瑟夫问题,有n个人,编号从0到n-1围成一个圈,从1开始,数m个,然后把第m个从这个圈中剔除,然后继续从1开始数m个,再剔除这个人,直
2014-01-30 18:32:34 630
原创 pat1071
字符串的题是我的弱项,因为我觉得我好像对数字感兴趣,其实这只是借口。本题我在11月2号的时候只拿到了17分,已经忘了是怎么写的,早上做了半小时过了,我觉得让你在一串字符串中统计单词的问题需要注意三点:1开始的时候需要注意单词的开始可能不是在这串东西的第0个位置,可能一开始带有几个空格或者其他非法字符,不过这只是可能,具体也要看题。我的处理的方法是到第一个合法字符开始统计2中间可能有多个
2014-01-25 11:03:57 671
原创 poj2362
本题很早就看到过,一直拖到现在才做,本题就是一个排序+搜索+剪枝题,题意非常简单,说一下剪枝:1为了早点剪枝,将优先选择边长较长的棒子2棒子长度和是4 的倍数,最长的棒子小于边长,棒子个数要大于等于43符合2的情况下,我搜到3个边长,也意外着可以构成。代码如下:#include#include#include#includeusing namespace std;in
2014-01-19 12:15:00 730
原创 九度1502
九度1502这题我觉得我还是比较奇葩的,看到这种最值这种想到的就是动态规划,弄出了dp方程居然过了2组数据,后来发现,这题貌似没有最优子结构性质。后来看到别人是二分做的,二分的是答案,好吧,总觉得二分答案的想法很奇特,是不是没啥想法了就试试二分答案呢,然后宁波理工蔡老师地方拿来final队员的二分写法,果然比市面上流传的2种更好理解点。受教了。说了一大堆,本题的思路就是,二分一个答案,看看是否
2013-11-03 18:04:06 903
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人