用python实现朴素贝叶斯分类算法
简介朴素贝叶斯算法主要用于分类问题,原理十分简单,主要采用后验概率最大化的方法来判定测试样本的类别。对于某个给定的测试样本$ x = \{x_1,…,x_n\} $,其类别为$y$的概率可以通过贝叶斯公式计算:
P(y|x_1,...,x_n) = \frac{P(y)P(x_1,...,x_n|y)}{P(x_1,...,x_n)}其中$P(y)$是类别$y$的先验概率,$P(x_1,…,x_n|y)$是条件概率。后验概率最大化就是找出能够使得$P(y|x_1,…,x_n)$最大的类别$y$。
由于朴素贝叶斯算法假设各个特征之间相互独立,所以可以得到下面的公式:
P(x_1,...,x...
用python实现k近邻、kd树搜索
简介k近邻算法是一种非常简单、直观的算法:给定一个数据集,对于新的输入实例,在训练数据集中找到与该实例最近的k个实例,这k个实例的多数属于某个类,就把该新的输入实例分为这个类。
这里主要涉及到两个问题:一是实例间的距离度量,二是如何找到所有训练数据集中最靠近新的输入实例的k个实例。常用的距离度量有欧氏距离(Euclidean Distance)和Minkowski距离等,本文实现的k近邻算法就采用了欧氏距离。至于如何找到靠近输入实例最近的k个实例,一种比较朴素的实现方式是对整个训练数据集进行线性扫描,维护一个大小为k的优先队列,保存距离输入实例最近的k个实例点,也俗称暴力搜索,但是当训练...
用python实现逻辑回归
基本形式逻辑回归主要用于解决分类问题。逻辑回归函数的输出是一个处于0-1之间的值,代表输出是1的概率。\begin{align}& h_\theta(x) = P(y=1 | x ; \theta) = 1 - P(y=0 | x ; \theta) \newline& P(y = 0 | x;\theta) + P(y = 1 | x ; \theta) = 1\end{align}
基本形式如下:\begin{align}& h_\theta (x) = g ( \theta^T x ) \newline \newline& z = \theta^T...
用python实现线性回归
基本形式 线性回归基本形式:
其中$ \theta $代表参数, $ \theta_0 $就是通常说的偏置bias。$ x_n $代表特征,如果$ n = 1 $,则是一元线性回归;$ n > 1 $时是多元线性回归。
Andrew Ng《machine learning》小结
花了两周时间学完了吴恩达的机器学习课程,做完了所有作业。虽然编程作业大多是照着公式写代码,框架都给你搭好,几乎是保姆式的服务,但还是或多或少有所收获。因为有点基础,所以看得比较快,十一周的课程只花了两周的时间。总的来说还是值得一看,涉及到了很多方面,在此做个小结。
从Solr源码看自动机的实现
最近在公司被分配了一个任务,看一下Solr通配符查询的实现,主要是因为发现Solr对于通配符查询很慢,于是就哼哧哼哧跑去看源码了。源码看起来很累,大量调用的嵌套、委托模式,一层套一层,不过还是很有收获,今天不谈Solr具体查询的逻辑,谈一谈其查询的实现方式——自动机。对于想自己实现用自动机进行字符串匹配、正则表达式匹配的同学,还是值得一看的。(基于Solr_5.0.0)
自动机的定义
An automaton is a self-operating machine, or a machine or control mechanism designed to follow automatically a predetermined sequence of operations, or respond to predetermined instructions.
基于Netty的HTTP代理服务器
最近在看netty,光看看书也是挺无聊的,就想着写点东西。Netty的Github 上面有很多example可以学习,想到之前做的项目用Javascript写了一个http/https代理服务器来获取某些请求的参数,就想着自己再用netty来实现一下。思想很简单,实现的时候还是有很多细节的地方要注意。而且暂时https的代理还没能实现,遇到了一些问题,暂时避开这方面。
网易面试小记
前段时间有幸拿到了网易校招内推批次的内推码,于是就抱着试一试的心态投了杭研的Java职位。首先是笔试,笔试过程也是充满了戏剧性。第一次笔试由于平台的原因导致我提前交卷,没能答好,于是就有了第二次笔试的机会。鉴于第一次笔试的经验,第二次做的比较顺利,编程题有的很快也就有了思路,所以最后笔试也是过了,还是挺高兴的。
Java自动内存管理
最近找了两本Java虚拟机方面的书,看了看其中对于Java自动内存管理的章节,写的都大同小异,在此总结一下,主要是三个方面:内存划分、内存分配、内存回收。
Java线程池的简单实现
最近在写Java程序的时候,接触到一些多线程方面的东西,用到了Java中的线程池。JDK中对线程池的支持比较完善,在java.util.concurrent
包中,用ThreadPoolExecuter
类表示一个线程池,同时还有一个Executor
类扮演着线程池工厂的角色。例如:
1 2 3 4 public static ExecutorService newFixedThreadPool (int nThreads) public static ExecutorService newSingleThreadExecutor () public static ExecutorService newCachedThreadPool () ...