题目:
Given an absolute path for a file (Unix-style), simplify it.
For example,path = "/home/", => "/home"
path = "/a/./b/../../c/", => "/c"
分析:此题主要需注意以下两点
1、结果起码有一个"/"
2、当有一个这样的形式/../,就代表少一个路径
代码如下:
string simplifyPath(string path) {
int n=path.length();if(n<=1)return path;
string result;
int numdot=0,numdoubledot=0,g=0;//分别表示"."的个数,".."的个数,g其实是个标量
bool flag=false;
for(int i=n-1;i>=0;i--)
{
if(path[i]=='/')
{
if(flag)
{
result=path[i]+result;
flag=false;
}
if(g)
{
g=0;
numdoubledot--;
}
numdot=0;
}
else if(path[i]=='.')
{
if(flag)
{
result=path[i]+result;
}
else
{
numdot++;
if(numdot==2)
{
numdot=0;
numdoubledot++;
}
}
}
else
{
if(numdoubledot)
{
g++;
}
else
{
result=path[i]+result;
flag=true;
}
}
}
if(result.length()==0)result+=path[0];
return result;
}
以下是在看模型识别,机器学习及数理统计时,对贝叶斯决策、概率分布、样本关系的总结,每想到一点就写下来,比较乱,这块需要反复学习、慢慢理解。
1. 机器学习的一些概念:
什么是机器学习?
机器学习包含哪些基本要素?
机器学习,就是由已知数据,训练出一个模型,形成一个假设的空间,在拿到新的数据后,能在假设空间搜索出一个合理的结果。
搜索出合理的结果,只是评价机器学习的效果,模型的好坏。
如何建立模型,才是机器学习算法的核心,包括假设,推理,验证。
如何保证目标概念在假设空间内?
是否有包含所有假设的空间?
如何保证收敛?
假设空间的大小与训练样例数量的关系?
概率、贝叶斯公式与机器学习的关系?
概率论,特别是贝叶斯公式,为机器学习提供了强有力的推导依据。
1. 统计与概率、机器学习是什么关系?
概率论及其分布函数、特性,是理论基础。而统计是应用,利用样本统计量来估计概率模型中的参数,而后更进一步获取更有用的统计数据。
统计是机器学习中统计判决部分的理论基础。或者是说统计分析在机器学习方面的应用。
2.
贝叶斯学习
两个前提条件:
1)类别,一般是已知类别的个数,各个类别的需要概率的初始知识,即先验概率P(h)。
2)特征数据在各个类别中的概率分布,即先验条件分布P(x|h)。
待解决的问题:
已知采集的数据:
训练数据D:包含特征数据和类别
求:
假设的分类面,或者一个采集到数据的分类。
其中,问题又可分为 类别的先验概率P(h)已知,和未知两种情况。
1)P(h)已知的情况。求解,相对简单,普通的贝叶斯公式。
2)P(h)未知,但一种类别的错误率已知的情况,求另外一个类别的错误率。可以利用聂曼-皮尔逊决策(N-P判决)来计算决策面。
3. h为类别,D为特征数据,P(D|h)与P(h|D)的区别?
计算假设目标的概率P(D|h). 假设成立时,观测到D的概率。有多种假设 都能观测到数据D,每种假设所占的比率。先验概率
P(h|D),假设h的后验概率,其反应了训练数据后,假设h成立的概率。其反应了训练数据的影响。
但先验概率p(h)是与训练数据D相互独立的.
极大后验假设MAP, max a posteriori 最大可能假设。
MAP = max(P(h|D))
贝叶斯推理的概率,很大程度上依赖于 先验概率。 首先,需要知道 先验概率。
由贝叶斯推理,推导出最大似然估计,再推导出最小方差估计(平方误差最小估计)。
---------------------------------------
1.
在模式分类中,贝叶斯决策,比较简单的场景是:先验概率已知,然后,某两种或多种条件下,某事件发生的概率已知。 求出后验概率,即贝叶斯公式,根据后验概率的大小,做出决策。
稍微复杂的场景:
先验概率已知,连续概率密度函数的类型已知,但是参数未知。 有大量的抽样数据,
则据抽样数据,估计概率密度函数的参数。
然后,据贝叶斯公式,计算出决策函数,决策面。
拿到决策面,就能对测试数据进行分类了。
在这里,有几个问题,如果弄清楚,对贝叶斯决策就会由比较清晰的掌握。
1)什么判决函数,什么是判决面?
对特征点进行分类的界面,就是判决面;而分类界面的函数就是判决函数。
2) 后验概率与贝叶斯公式的关系,使用后验概率、贝叶斯决策的先决条件?
类别的经验分布概率、特征在不同类别下的先验概率(即条件概率)已知,或者可计算
3)经典分布概率,包括
类别的先验概率
类别特征的条件经验分布概率,即特征在不同类别中的概率
4) max 与最小误差判决面的关系
5)高斯分布
如何求每个类别的高斯分布?
相邻判决面的求解?那非相邻类别那?
6)高斯分布的分类,哪些因素有关?
均值:决定中心位置
方差:决定了判决面到中的距离
7) 错误率有哪些?
P1(e): P(w2|x), 分类为w1时,错误率
P2(e): P(w1|x), 分类为w2时,错误率
如何计算总的错误率?
P(e) = 积分(max[P(w2|x)*P(x), P(w1|x)*P(x)])
如何应用最大似然估计推导错误率?
错误样本的个数t,总样本个数为N,假设错误率为e
则其联合分布密度为
二项分布
求极值
计算出,错误率的估计量 t/N
8)聂曼-皮尔逊决策 的使用场景:
P(wi)先验概率未知,在P2(e)已知的情况下,使P1(e)尽可能小的决策面。求判决阈值。
采用拉格朗日乘数法 进行推导计算。
因为P1(e)错误的后果比较严重,所以要严格限制其错误率。
两种类别的概率密度函数已知:p(x|w1), p(x|w2)
则判决函数为 p(x|w1) / p(x|w2)
判决面为 p(x|w1) / p(x|w2) = lamda, lamda为阈值。
阈值lamda如何求解?
已知错误率P1(e),p(x1 | w1), 查表,可以求出阈值
9) 均值向量,协方差矩阵未知情况下,如何利用样本进行估计
向量形式:均值
协方差矩阵:
bays的训练,就是利用各个类别的样本,估计各个类别的方差和均值。然后计算决策面。
判决函数,应该是一组空间的集合;而判决面就是两组空间的交集/交面。
---------------------------------------
归纳偏置
什么是无偏的学习器?
期望与样本均值相等。线性特征。
学习器必须对目标概念做预先的假设,否则无法对未来的实例进行分类。
由于归纳学习需要预先假设,这种形式,被称为归纳偏置。 用自己话说就是 归纳假设。
如何评估假设?
1. 估计的方差
均值的误差程度,也是概率分布的宽度或散度。随机变量与其均值的差有多大。即使均值无偏,方差可能比较大。
2. 估计的偏差
期望值,与真实值,差距
精度的分析
即或是分类的精度
样本错误率:统计样本被错误分类的比率
真实错误率:按真实概率分布抽取实例,然后统计器错误率
样本错误率与真实错误率的关系?
样本错误率是对真实错误率的估计。
如何评价这种估计?
统计理论:
100%:真实错误率,是样本错误率
95%:真实错误率,是一个区间,以样本错误率为中心的区间
百分比,又称为置信度,而真实错误率的区间,又称为,置信区间。对于二项分布,样本个数越大,置信度不变,置信区间就越小。
测试样本错误率多次
每次选用不同的样本,统计的错误率符合 二项分布。
独立且多次尝试的0-1实验,生成一个独立的、同分布的随机变量序列,这个序列
其分布为 二项分布
np(1-p) >= 5 或 n>=30时,二项分布可以用正态分布近似表示。
--------------------------------------------------
1. 朴素贝叶斯分类器
即MAP,最大后验概率分类器。如何训练分类器?
已知训练数据。
只需统计各个类别的频率p(h),及特征数据在各个类别中的频率(D|h)。
已知待分类数据D,可以求其max(P(h|D)),等同于max(p(hj) * p(D|hj))
2. 贝叶斯网络
是指一组条件概率,而朴素贝叶斯分类器假设所有特征变量是相互独立的。而贝叶斯网络将此条件放宽。
理解贝叶斯网络,就需要理解条件独立性。两个变量间无相互影响,及相互独立。条件独立,两个变量,在给定条件下,如第三个变量的指定值的条件下,相互独立。
条件概率,具有传播性,形成一个链式的规则。
如
x -> y -> z -> w
每两个相邻变量的条件概率都知道,如何求P(w|x)。这就是贝叶斯定理的概率传播。
联合概分布的求解。
p(xyzw) = p(x) * p(y|x) * p(z|x,y) * p(w|x, y, z)
贝叶斯网络的一个重要性质,一个节点独立于非前驱节点。即p(xi | x(i-1)...x1) = p(xi | x(i-1)) 类似马尔科夫过程。
贝叶斯网络,也可以看做马尔科夫链的非线性扩展。
结构形式:
有向无环图(DAG),即是一个前向多段图的结构
如何学习
每天和Eclipse相处, 是否希望牠变得可人一些?
介绍一个Eclipse颜色主题插件 Eclipse
Color Themes
Eclipse直接安装, 地址 http://eclipse-color-theme.github.io/update/
安装成功后,打开首选项
会发现下方有一个"Import a theme"按钮, 可以去官网上去下载自己喜欢的主题.
比如我喜欢这个主题:
可以下载此主题的xml文件.
然后点那个"Import a theme"按钮, 就可以导入此主题.
当然也可以自行编辑里面的配色方案等.