随笔分类 - [41]Algorithm算法
-
朴素贝页斯分类法
摘要:朴素贝页斯分类法朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。对于搞机器学习的同学们来说,这是相对简单但效果较好的模型。朴素贝叶斯方法的理论设输入为n维特征向量X={x1,x2,...,xn},输出为类标记集合Y={c1,c2,...ck}。朴素贝叶斯法通过训练数据集学习联合概率分布P(X,Y),其中X是n维,Y是分类标记。有了模型P(X,Y),要预测一个特征向量的分类标记,则分别计算P(X,Y=c1),P(X,Y=c2),...P(X,Y=ck),选择取最大值的p(X,Y=cm),将cm作为X的分类标记。但对于模型P(X,Y)中的X是n维随机变量,若每一维特征取值最少有两个值,那 阅读全文
-
智能笔算法总结
摘要:智能笔算法总结 一周前,我在CocoaChina和博客园的问答区都提了一个问题,就是本篇文章将要描述的“智能笔问题”。遗憾的是,至今没有朋友给予有效地回复,但是,还是感谢回复我的朋友们。经过一周的琢磨和研究,终于在昨天搞定了这个问题。看着上图,回想自己渴求帮助的心情,想必有的朋友还是需要这样的算法的,再者在此也做一个总结,所以记录一下,互相学习指正。首先描述下这个功能的需求:在平板上,用手指自由地一笔画出一个图形,然后智能识别用户所画图形的类型,比如直线、圆、三角形或者矩形,并自动变换为最接近的几何图形。从上面的描述来看,就是自动识别图形的算法。并且已经获得了所勾勒自由图形的点轨迹。在此需要说 阅读全文
-
Dirichlet's Theorem on Arithmetic Progression
摘要:poj3006 Dirichlet's Theorem on Arithmetic Progressions很显然这是一题有关于素数的题目。注意数据的范围,爆搜超时无误。这里要用到筛选法求素数。筛选法求素数的大概思路是: 如果a这个数是一个质数,则n*a不是质数。(年轻的孩子们不要纠结于判断a是否为素数) 用一个数组实现就是: memset(prime,true,sizeof(prime)); if (prime[i]) prime[i*j]=false; 部分程序如下: const max=1000005;bool prime[1000005]; m... 阅读全文
-
LeetCode:Search in Rotated Sorted Array I II
摘要:LeetCode:Search in Rotated Sorted Array I IILeetCode:Search in Rotated Sorted ArraySuppose a sorted array is rotated at some pivot unknown to you beforehand.(i.e.,0 1 2 4 5 6 7might become4 5 6 7 0 1 2).You are given a target value to search. If found in the array return its index, otherwise return 阅读全文
-
概率统计:数学期望、方差、协方差、相关系数、矩
摘要:概率统计:数学期望、方差、协方差、相关系数、矩摘要:最近在学习机器学习/数据挖掘的算法,在看一些paper的时候经常会遇到以前学过的数学公式或者名词,又是总是想不起来,所以在此记录下自己的数学复习过程,方便后面查阅。1:数学期望数学期望是随机变量的重要特征之一,随机变量X的数学期望记为E(X),E(X)是X的算术平均的近似值,数学期望表示了X的平均值大小。当X为离散型随机变量时,并且其分布律为 P(X=xk) = pk ,其中k=1,2,…,n;则数学期望(要求绝对收敛).当X为连续型随机变量时,设其概率密度为f(x),则数学期望为(要求绝对收敛).2: 方差数学期望给出了随机变量的平均大小, 阅读全文
-
Spectral Clustering
摘要:谱聚类算法(Spectral Clustering)优化与扩展谱聚类(Spectral Clustering, SC)在前面的博文中已经详述,是一种基于图论的聚类方法,简单形象且理论基础充分,在社交网络中广泛应用。本文将讲述进一步扩展其应用场景:首先是User-Item协同聚类,即spectral coclustering,之后再详述谱聚类的进一步优化。1 Spectral Coclustering1.1 协同聚类(Coclustering) 在数据分析中,聚类是最常见的一种方法,对于一般的聚类算法(kmeans, spectral clustering, gmm等等),聚类结果都类似图1所示 阅读全文
-
Maximal Rectangle
摘要:LeetCode:Maximal Rectangle题目链接Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.分析:一般一个题目我首先会想想怎么暴力解决,比如这一题,可以枚举出所有的矩形,求出其中的面积最大者,那么怎么枚举呢,如果分别枚举矩形的宽度和高度,这样还得枚举矩形的位置,复杂度至少为O(n^4) (计算复杂度是我们把matrix的行、列长度都泛化为n,下同),我们可以枚举矩形左上角的位置, 阅读全文
-
递归
摘要:目录背景第一种实现:递归第二种实现:递推第三种实现:尾递归第四种实现:消除尾递归第五种实现:堆栈(堆中分配的栈)替换函数栈备注背景返回目录周末温习了一下递归相关的一些概念,本文先给出阶乘的五种算法。第一种实现:递归返回目录 1 private static long RecursiveFac(long n) 2 { 3 if (n == 0) 4 { 5 return 1; 6 } 7 else 8 { 9 ... 阅读全文
-
grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)
摘要:grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)这篇长文历时近两天终于完成了,前两天帮网站翻译一篇文章“为什么GNU grep如此之快?”,里面提及到grep速度快的一个重要原因是使用了Boyer-Moore算法作为字符串搜索算法,兴趣之下就想了解这个算法,发现这个算法一开始还挺难理解的,也许是我理解能力不是很好吧,花了小半天才看懂,看懂了过后就想分享下,因为觉得这个算法真的挺不错的,以前一直以为字符串搜索算法中KMP算很不错的了,没想到还有更好的,Boyer-Moore算法平均要比KMP快3-5倍。下面是我对该算法的理解,参考了一些关于该算法的介绍,里面每一张图都 阅读全文
-
LeetCode:Subsets I II
摘要:LeetCode:Subsets I II求集合的所有子集问题LeetCode:SubsetsGiven a set of distinct integers,S, return all possible subsets.Note:Elements in a subset must be in non-descending order.The solution set must not contain duplicate subsets.For example,IfS=[1,2,3], a solution is:[ [3], [1], [2], [1,2,3], [1,3], [... 阅读全文
-
分类算法之贝叶斯(Bayes)分类器
摘要:分类算法之贝叶斯(Bayes)分类器摘要:旁听了清华大学王建勇老师的 数据挖掘:理论与算法 的课,讲的还是挺细的,好记性不如烂笔头,在此记录自己的学习内容,方便以后复习。一:贝叶斯分类器简介1)贝叶斯分类器是一种基于统计的分类器,它根据给定样本属于某一个具体类的概率来对其进行分类。2)贝叶斯分类器的理论基础是贝叶斯理论。3)贝叶斯分类器的一种简单形式是朴素贝叶斯分类器,跟随机森林、神经网络等分类器都有可比的性能。4)贝叶斯分类器是一种增量型的分类器。二:贝叶斯理论第一次接触贝叶斯还是本科学概率论的时候,那时候也就只知道做题目,没想到现在还能够在工作和学习中用到它,先复习下相关的基础概率公式吧: 阅读全文
-
随机森林之特征选择
摘要:随机森林之特征选择摘要:在随机森林介绍中提到了随机森林一个重要特征:能够计算单个特征变量的重要性。并且这一特征在很多方面能够得到应用,例如在银行贷款业务中能否正确的评估一个企业的信用度,关系到是否能够有效地回收贷款。但是信用评估模型的数据特征有很多,其中不乏有很多噪音,所以需要计算出每一个特征的重要性并对这些特征进行一个排序,进而可以从所有特征中选择出重要性靠前的特征。一:特征重要性在随机森林中某个特征X的重要性的计算方法如下:1:对于随机森林中的每一颗决策树,使用相应的OOB(袋外数据)数据来计算它的袋外数据误差,记为errOOB1.2: 随机地对袋外数据OOB所有样本的特征X加入噪声干扰( 阅读全文
-
编程面试的10大算法概念汇总
摘要:编程面试的10大算法概念汇总嘿,第一次翻译文章,在ProgramCreek看到的,原文章名为Top 10 Algorithms for Coding Interview, 对于我这个明年即将直奔BAT(目前想法,以后不一定)但基础知识又差的小程序媛而言有点价值,就拿来翻译了下,并发表在伯乐在线。文章本身只是总结介绍简单概念,起个抛砖引玉的作用,具体深入了解需要自己慢慢学习,关键是文章中及末尾给出出了很多非常优秀的参考资料,可以继续深入掌握。下面是正文,有啥想吐槽的请直接评论在下面。正文:以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念。由于完全掌握这些概念需要 阅读全文
-
Distinct Subsequences
摘要:LeetCode:Distinct Subsequences我的LeetCode解题报告索引题目链接Given a stringSand a stringT, count the number of distinct subsequences ofTinS.A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positio 阅读全文
-
程序员就做出这八道题
摘要:程序员就做出这八道题每个程序员都会编程序,区别在于效率.各位可以试试一下这几道题,相信大家都能做,但是能用32M以内内存在1秒内解决吗?这就是传说中楼教主的男人八题,折腾了一个月,中间也是断断续续,今天终于做完了,教主果然名不虚传啊,再次膜拜教主.有兴趣的同学可以到POJ上提交自己的程序.第一题题意:n个各不相同的点能组成多少无向连通图?解:首先要搞清楚,这题必然要用高精度,因为随着n的增长无向连通图的数目的增长将比卡特兰数列更加猛烈.我用的方法是先统计出总共能组成多少无向图,再减去其中不联通的个数.设i个点能组成的无向连通图个数为a[i].n个点之间共有C(n,2)条边可连,总图个数为2^C 阅读全文
-
Best Time to Buy and Sell Stock I II III
摘要:LeetCode:Best Time to Buy and Sell Stock I II IIILeetCode:Best Time to Buy and Sell StockSay you have an array for which theithelement is the price of a given stock on dayi.If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorit 阅读全文
-
数据挖掘算法面试题
摘要:数据挖掘算法面试题昨天去某厂面试数据挖掘,遇到了这么一道题一个二维矩阵,右边的数值比左边的大,下边的数值比上边的大,设计一种算法,快速查找某个指定数字的位置如下表所示的数据:查找值:117——>右边的比左边的大下边的比上边大08151924293643475018222732414751546471353949596675808286934856667079839510110611373838894100106115123130136849199109117127130134143146105111114120128134143152155158125129136139147152160 阅读全文
-
写一个快排序,堆排序
摘要:写一个快排序,堆排序需要多少时间? 排序,作为计算机算法的基础知识之一,是每个程序员必备的技能之一,也许你不经常自己写排序,但是,如果自己写,试试需要多长时间,完整,正确的写好排序了?最简单的莫过于冒泡,选择排序。说白了,排序,莫过于三部走,一是如何遍历,二是比较,三是交换。其中遍历是关键! 下面,对常用的快排序和堆排序进行实现,争取5分钟只能完成一个算法的书写。天下武功,唯快不破!快速实现而熟练的实现是一个程序员基本功底的体现。如何最简单,最快,而正确的实现了?那就是对10以内的整数排序,是最快的,最能看到效果的。首先了明确输入和输出。记住快排序的思想是找一个标杆,让后左右开工,分别找... 阅读全文
-
随机森林之oob error 估计
摘要:随机森林之oob error 估计摘要:在随机森林之Bagging法中可以发现Bootstrap每次约有1/3的样本不会出现在Bootstrap所采集的样本集合中,当然也就没有参加决策树的建立,那是不是意味着就没有用了呢,答案是否定的。我们把这1/3的数据称为袋外数据oob(out of bag),它可以用于取代测试集误差估计方法.在论文:1:Bias,variance and prediction error for classification rules.2:An Efficient Method To Estimate Baggin’s Generalization Error.3:B 阅读全文
-
分类算法评价
摘要:python爬取网站数据开学前接了一个任务,内容是从网上爬取特定属性的数据。正好之前学了python,练练手。编码问题因为涉及到中文,所以必然地涉及到了编码的问题,这一次借这个机会算是彻底搞清楚了。问题要从文字的编码讲起。原本的英文编码只有0~255,刚好是8位1个字节。为了表示各种不同的语言,自然要进行扩充。中文的话有GB系列。可能还听说过Unicode和UTF-8,那么,它们之间是什么关系呢?Unicode是一种编码方案,又称万国码,可见其包含之广。但是具体存储到计算机上,并不用这种编码,可以说它起着一个中间人的作用。你可以再把Unicode编码(encode)为UTF-8,或者GB,再存 阅读全文