代码改变世界

随笔档案-2013年05月

字符串相关操作

2013-05-30 21:38 by 夜与周公, 194 阅读, 收藏, 编辑
摘要: 接下来,总结一些常见的字符串操作算法,第一个介绍字符串拷贝操作。字符串拷贝算法比较著名的资料是林锐的<<高质量的C、C++>>,网上的很多文章都借鉴了里面有关字符串拷贝的论述。虽然字符串拷贝操作看起来很简单,但是如果仔细考虑,不禁觉得原来写代码真是件细工活,一个模板化的C++字符串拷贝代码如下:char* str_copy(const char* pSource, char* pDest){ assert((pSource!=NULL) && (pDest!=NULL)); char* address = pDest; while ((*pDest++ 阅读全文

字符串包含判断

2013-05-30 13:28 by 夜与周公, 372 阅读, 收藏, 编辑
摘要: 本节总结编程的艺术(CSDN)字符串包含操作。 算法描述:假设有两个由字母组合的字符串A和字符串B,字符串A的长度要大于字符串B的长度。算法如何判断出现在字符串B中的字母也出现在字符串A呢? 算法举例:StringA = "ABCDEFG", 若StringB = "DCEFG",则StringA与StringB之间算法判断是true;若StringB = "DCEFM"。 而StringA与StringC之间算法判读是false。 我们首先可以想到的办法是:遍历StringB,对于B中每一个字母,遍历字符串A,判断当前字母是出现在字 阅读全文

数组循环移位

2013-05-25 20:16 by 夜与周公, 275 阅读, 收藏, 编辑
摘要: 从本节开依据网上的一些资料学习总结常见的一些算法问题(CSDN程序员编程艺术),第一个总结的是“数组循环移位”算法。 算法问题:设计一个算法,把一个含有N个元素的数据,循环左移(右移)K个位置,要求时间复杂度O(N),且只允许使用两个附件的变量。 算法示例:abc1234循环左移3位abc1234->1234abc。 最先想到的办法,每次想做移动一个位置,循环K次,算法的时间复杂度O(K*N):void LeftShift(char* arr, int N, int k){ while(k--) { char temp = arr[0]; f... 阅读全文

逻辑斯特回归模型(logistic regression)

2013-05-23 15:23 by 夜与周公, 8573 阅读, 收藏, 编辑
摘要: 本节开始线性分类器的另一种模型:模型斯特回归(logistic regression)。 在之前介绍的线性分类器中,h(x)=ΘTx+Θ0,如果h(x)>0,则样本x属于正类,否定x属于负类。直观上的认识,如何h(x)越大,我们更加确信样本属于正类,相应的,h(x)越小,我们更加确信样本属于负类,而h(x)在0之间徘徊,很难确信属于某一类。为了与概率统计知识想结合,可以将h(x)这种“值"上的特性映射到[0,1]之间,logistic 函数(又成sigmoid)函数,就是一个非常优越的选择,logistic 函数定义如下: 函数图象如下: 于是,我们的模型假设为: ... 阅读全文

朴素贝叶斯模型(NB model)

2013-05-08 16:58 by 夜与周公, 1627 阅读, 收藏, 编辑
摘要: 本节开始介绍第一个生成式模型:朴素贝叶斯模型(NB model)。生成式模型与判别式模型的区别在于,生成式模型对样本的联合分布建模: 因此我们需要求出样本的类别分布p(y)与,样本类概率分布p(x|y)。生成式模型的困难在于p(x|y)计算,有时我们很难去估计类概率分布。因此,我们会做出一些假设,Naive Bayes Assumption 是指:样本在给定类别的条件下,各个特征之间相互独立: 根据p(xi|y)分布的假设不同,我们可以分成两种假设模型:muti-variate Bernouli model 与 multinomial event model,以下将分两个部分介绍这两... 阅读全文

机器学习python工具包

2013-05-06 13:50 by 夜与周公, 289 阅读, 收藏, 编辑
摘要: http://jaquesgrobler.github.io/Online-Scikit-Learn-stat-tut/index.html 阅读全文

感知机算法C++实现

2013-05-06 13:14 by 夜与周公, 1441 阅读, 收藏, 编辑
摘要: 本节介绍感知机分类器的C++实现,其分类器实现框架会在后续的一些算法实现都会使用到。 1、类的设计 感知机类设计如下:View Code #pragma once#include <iostream>#include <fstream>#include <iomanip>#include <string>#include <vector>#include <set>#include <map>#include <algorithm>#include <cmath>#include < 阅读全文

多分类问题与多类感知机算法

2013-05-06 12:50 by 夜与周公, 4883 阅读, 收藏, 编辑
摘要: 本节延续线上节感知机算法,继续探讨多分类的线性感知机算法。 多分类问题首先可以看成是二元分类的一个拓展,具体的有两种方法:1.one vs rest;2.one vs one。 1.one vs rest 对于K(k>=3),我们可以用K-1个分类器,组合实现多分类: 这种方法被一些知名的开源工具支持实现(如Libsvm),绿色部分属于决策结果重叠部分,C1与C2均将其纳入决策区域。 2.one vs one 这种方法在每一类之间训练一个分类器,对于K分类问题需要训练(k-1)*k/2个二元分类器: 这种方法,可能会产生决策模糊区域,如上图绿色标记的区域无法判断属于哪一类... 阅读全文

线性分类器之感知机算法

2013-05-04 15:17 by 夜与周公, 1382 阅读, 收藏, 编辑
摘要: 感知机算法(The perceptron algorithm),应该是最早运用的机器学习算法,在模式识别与机器学习占有者非常重要的位置,人们尝试通过模拟大脑神经元的工作模式,创造机器智能。随后的neural network、最近很火的deeper learning,我们可以认为是对感知机算法的一种深度扩充。 感知机模型的直接将线性模型的输出映射到样本的标签: (1) 感知机属于判别式模型,按照一般判别式模型的求解思路:1、确定线性判别函数;2、按需要确定一个准则函数J;3、最优化方法求解J达到极限值时的参数Θ。对于参数的求解我们一般通过最大似然估计或者最大后验概率估计的方法。然而,感知... 阅读全文