Categories
不学无术

论文参考文献著录格式

论文参考文献著录格式
论文参考文献著录格式 引用格式

Categories
不学无术

特征选择-常见的搜索算法

特征选择-常见的搜索算法

 本文转载自:http://hi.baidu.com/zhangweijiqn/item/bafddc1bf53cd4f5756a843e
2.2.1完全搜索
完全搜索分为穷举搜索(Exhaustive)与非穷举搜索(Non-Exhaustive)两类。
  (1) 广度优先搜索( Breadth First Search )
算法描述:广度优先遍历特征子空间。
算法评价:枚举了所有的特征组合,属于穷举搜索,时间复杂度是O(2n),实用性不高。
  (2)分支限界搜索( Branch and Bound ) 
算法描述:在穷举搜索的基础上加入分支限界。例如:若断定某些分支不可能搜索出比当前找到的最优解更优的解,则可以剪掉这些分支。
  (3) 定向搜索(Beam Search )
算法描述:首先选择N个得分最高的特征作为特征子集,将其加入一个限制最大长度的优先队列,每次从队列中取出得分最高的子集,然后穷举向该子集加入1个特征后产生的所有特征集,将这些特征集加入队列。
  (4) 最优优先搜索( Best First Search )
算法描述:与定向搜索类似,唯一的不同点是不限制优先队列的长度。
2.2.2 启发式搜索

  (1)序列前向选择( SFS , Sequential Forward Selection )
算法描述:特征子集X从空集开始,每次选择一个特征x加入特征子集X,使得特征函数J( X)最优。简单说就是,每次都选择一个使得评价函数的取值达到最优的特征加入,其实就是一种简单的贪心算法。
算法评价:缺点是只能加入特征而不能去除特征。例如:特征A完全依赖于特征B与C,可以认为如果加入了特征B与C则A就是多余的。假设序列前向选择算法首先将A加入特征集,然后又将B与C加入,那么特征子集中就包含了多余的特征A。
 
  (2)序列后向选择( SBS , Sequential Backward Selection )
算法描述:从特征全集O开始,每次从特征集O中剔除一个特征x,使得剔除特征x后评价函数值达到最优。
算法评价:序列后向选择与序列前向选择正好相反,它的缺点是特征只能去除不能加入。
另外,SFS与SBS都属于贪心算法,容易陷入局部最优值。
  (3) 双向搜索( BDS , Bidirectional Search )
算法描述:使用序列前向选择(SFS)从空集开始,同时使用序列后向选择(SBS)从全集开始搜索,当两者搜索到一个相同的特征子集C时停止搜索。
双向搜索的出发点是  。如下图所示,O点代表搜索起点,A点代表搜索目标。灰色的圆代表单向搜索可能的搜索范围,绿色的2个圆表示某次双向搜索的搜索范围,容易证明绿色的面积必定要比灰色的要小。
图2. 双向搜索
  (4) LR选择算法( LRS , Plus-L Minus-R Selection )
该算法有两种形式:
<1> 算法从空集开始,每轮先加入L个特征,然后从中去除R个特征,使得评价函数值最优。( L > R )
<2> 算法从全集开始,每轮先去除R个特征,然后加入L个特征,使得评价函数值最优。( L < R )
算法评价:增L去R选择算法结合了序列前向选择与序列后向选择思想,L与R的选择是算法的关键。
  (5) 序列浮动选择( Sequential Floating Selection )
算法描述:序列浮动选择由增L去R选择算法发展而来,该算法与增L去R选择算法的不同之处在于:序列浮动选择的L与R不是固定的,而是“浮动”的,也就是会变化的。
序列浮动选择根据搜索方向的不同,有以下两种变种。
<1>序列浮动前向选择( SFFS , Sequential Floating Forward Selection )
算法描述:从空集开始,每轮在未选择的特征中选择一个子集x,使加入子集x后评价函数达到最优,然后在已选择的特征中选择子集z,使剔除子集z后评价函数达到最优。
<2>序列浮动后向选择( SFBS , Sequential Floating Backward Selection )
算法描述:与SFFS类似,不同之处在于SFBS是从全集开始,每轮先剔除特征,然后加入特征。
算法评价:序列浮动选择结合了序列前向选择、序列后向选择、增L去R选择的特点,并弥补了它们的缺点。
  (6) 决策树( Decision Tree Method , DTM)
         算法描述:在训练样本集上运行C4.5或其他决策树生成算法,待决策树充分生长后,再在树上运行剪枝算法。则最终决策树各分支处的特征就是选出来的特征子集了。决策树方法一般使用信息增益作为评价函数。
2.2.3 随机算法

  (1) 随机产生序列选择算法(RGSS, Random Generation plus Sequential Selection)
算法描述:随机产生一个特征子集,然后在该子集上执行SFS与SBS算法。
算法评价:可作为SFS与SBS的补充,用于跳出局部最优值。
  (2) 模拟退火算法( SA, Simulated Annealing )
模拟退火算法可参考 大白话解析模拟退火算法
算法评价:模拟退火一定程度克服了序列搜索算法容易陷入局部最优值的缺点,但是若最优解的区域太小(如所谓的“高尔夫球洞”地形),则模拟退火难以求解。

  (3) 遗传算法( GA,  Genetic Algorithms )
遗传算法可参考 遗传算法入门 。
算法描述:首先随机产生一批特征子集,并用评价函数给这些特征子集评分,然后通过交叉、突变等操作繁殖出下一代的特征子集,并且评分越高的特征子集被选中参加繁殖的概率越高。这样经过N代的繁殖和优胜劣汰后,种群中就可能产生了评价函数值最高的特征子集。
随机算法的共同缺点:依赖于随机因素,有实验结果难以重现。
Categories
不学无术

Primitive-based evaluation and estimation of emotions in speech 基于原语的语音情感评价估计方法

自己做了些笔记,不知道理解的对不对。
Primitive

Categories
不学无术

MFC开启/关闭数字键盘(小键盘)

呵呵呵呵,帮别人改程序,然后自己的x230没有找到任何开启/关闭小键盘的方法。MFC程序运行发现小键盘默认开启的,导致我+-号键用不来。

// Set NUMLOCK Status.
void SetNumLock( BOOL bState )
{
    BYTE keyState[256];
    GetKeyboardState((LPBYTE)&keyState);
    if( (bState && !(keyState[VK_NUMLOCK] & 1)) ||
        (!bState && (keyState[VK_NUMLOCK] & 1)) )
    {
        // Simulate a key press
        keybd_event( VK_NUMLOCK,
                     0x45,
                     KEYEVENTF_EXTENDEDKEY | 0,
                     0 );
        // Simulate a key release
        keybd_event( VK_NUMLOCK,
                     0x45,
                     KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
                     0);
    }
}

来自http://weseetips.com/tag/enable-numlock/

Categories
不学无术

Hidden Markov Model 隐马尔科夫模型 【自己的垃圾翻译】

看语音情感识别看到的论文,论文是:
Survey on speech emotion recognition: Features, classification schemes,
and databases
其中有一段写到了HMM用作分类器的,原文中部分如下(版权问题我就不放原文全文了):
The HMM classifier has been extensively used in speech
applications such as isolated word recognition and speech
segmentation because it is physically related to the production
mechanism of speech signal[102]. The HMM is a doubly stochastic
process which consists of a first-order Markov chain whose states
are hiddenfrom the observer. Associated with each state is a
random process which generates the observation sequence. Thus,
the hidden states of the model capture the temporal structure of
the data. Mathematically, for modeling a sequence of observable
data vectors,x1,…,xT, by an HMM, we assume the existence of a
hidden Markov chain responsible for generating this observable
data sequence. LetKbe the number of states,pi
, i¼1,y,Kbe the
initial state probabilities for the hidden Markov chain, and aij
,
i¼1,y,K,j¼1,y,Kbe the transition probability from stateito state
j. Usually, the HMM parameters are estimated based on the ML
principle. Assuming the true state sequence is s1,…,sT, the
likelihood of the observable data is given by
where
bi
ðxtÞPðxjst ¼iÞ
is the observation density of theith state. This density can be either
discrete for discrete HMM or a mixture of Gaussian densities for
continuous HMM. Since the true state sequence is not typically
known, we have to sum over all possible state sequences to find the
likelihood of a given data sequence, i.e.
====================================================
下面是我自己翻译的
 HMM 隐马尔科夫模型
====================================================

Categories
不学无术

机器学习&数据挖掘笔记_14(GMM-HMM语音识别简单理解)

http://www.cnblogs.com/tornadomeet/p/3276753.html 全部内容及代码见左侧链接
为了对GMM-HMM在语音识别上的应用有个宏观认识,花了些时间读了下HTK(用htk完成简单的孤立词识别)的部分源码,对该算法总算有了点大概认识,达到了预期我想要的。不得不说,网络上关于语音识别的通俗易懂教程太少,都是各种公式满天飞,很少有说具体细节的,当然了,那需要有实战经验才行。下面总结以下几点,对其有个宏观印象即可(以孤立词识别为例)。
一、每个单词的读音都对应一个HMM模型,大家都知道HMM模型中有个状态集S,那么每个状态用什么来表示呢,数字?向量?矩阵?其实这个状态集中的状态没有具体的数学要求,只是一个名称而已,你可以用’1’, ’2’, ‘3’…表示,也可以用’a’, ‘b’, ’c ’表示。另外每个HMM模型中到底该用多少个状态,是通过先验知识人为设定的。
二、HMM的每一个状态都对应有一个观察值,这个观察值可以是一个实数,也可以是个向量,且每个状态对应的观察值的维度应该相同。假设现在有一个单词的音频文件,首先需要将其进行采样得到数字信息(A/D转换),然后分帧进行MFCC特征提取,假设每一帧音频对应的MFCC特征长度为39,则每个音频文件就转换成了N个MFCC向量(不同音频文件对应的N可能不同),这就成了一个序列,而在训练HMM模型的参数时(比如用Baum-Welch算法),每次输入到HMM中的数据要求就是一个观测值序列。这时,每个状态对应的观测值为39维的向量,因为向量中元素的取值是连续的,需要用多维密度函数来模拟,通常情况下用的是多维高斯函数。在GMM-HMM体系中,这个拟合函数是用K个多维高斯混合得到的。假设知道了每个状态对应的K个多维高斯的所有参数,则该GMM生成该状态上某一个观察向量(一帧音频的MFCC系数)的概率就可以求出来了。
三、对每个单词建立一个HMM模型,需要用到该单词的训练样本,这些训练样本是提前标注好的,即每个样本对应一段音频,该音频只包含这个单词的读音。当有了该单词的多个训练样本后,就用这些样本结合Baum-Welch算法和EM算法来训练出GMM-HMM的所有参数,这些参数包括初始状态的概率向量,状态之间的转移矩阵,每个状态对应的观察矩阵(这里对应的是GMM,即每个状态对应的K个高斯的权值,每个高斯的均值向量和方差矩阵)。
四、在识别阶段,输入一段音频,如果该音频含有多个单词,则可以手动先将其分割开(考虑的是最简单的方法),然后提取每个单词的音频MFCC特征序列,将该序列输入到每个HMM模型(已提前训练好的)中,采用前向算法求出每个HMM模型生成该序列的概率,最后取最大概率对应的那个模型,而那个模型所表示的单词就是我们识别的结果。
五、在建立声学模型时,可以用Deep Learning的方法来代替GMM-HMM中的GMM,因为GMM模拟任意函数的功能取决于混合高斯函数的个数,所以具有一定的局限性,属于浅层模型。而Deep Network可以模拟任意的函数,因而表达能力更强。注意,这里用来代替GMM的Deep Nets模型要求是产生式模型,比如DBN,DBM等,因为在训练HMM-DL网络时,需要用到HMM的某个状态产生一个样本的概率。
六、GMM-HMM在具体实现起来还是相当复杂的。
七、一般涉及到时间序列时才会使用HMM,比如这里音频中的语音识别,视频中的行为识别等。如果我们用GMM-HMM对静态的图片分类,因为这里没涉及到时间信息,所以HMM的状态数可设为1,那么此时的GMM-HMM算法就退化成GMM算法了。
 
 

Categories
不学无术

日语假名的由来(对应汉语文字)

下面罗列出的是日语假名的由来,希望对大家的记忆有一定的帮助。
<平假名ひらがな> <片假名カタカナ>
 
安 → あ 阿 → ア(阿の左側部分)
以 → い 伊 → イ(伊の左側部分)
宇 → う 宇 → ウ(宇の上の部分)
衣 → え 江 → エ(江の右側部分)
於 → お 於 → オ(於の左側部分)
 
加 → か 加 → カ(加の左側部分)
幾 → き 幾 → キ
久 → く 久 → ク(久の左側部分)
計 → け 介 → ケ
己 → こ 己 → コ(己の上の部分)
 
左 → さ 散 → サ(散の左上部分)
之 → し 之 → シ
寸 → す 須 → ス(須の右側部分)
世 → せ 世 → セ
曽 → そ 曽 → ソ(曽の上の部分)
 
太 → た 多 → タ(多の上の部分)
知 → ち 千 → チ
川 → つ 川 → ツ
天 → て 天 → テ
止 → と 止 → ト(止の右上部分)
 
奈 → な 奈 → ナ(奈の左上部分)
仁 → に 二 → ニ
奴 → ぬ 奴 → ヌ(奴の右側部分)
祢 → ね 祢 → ネ(祢の左側部分)
乃 → の 乃 → ノ(乃の左側部分)
 
波 → は 八 → ハ
比 → ひ 比 → ヒ(比の右側部分)
不 → ふ 不 → フ(不の左上部分)
部 → へ 部 → ヘ(部の右側部分)
保 → ほ 保 → ホ(保の右下部分)
 
末 → ま 末 → マ
美 → み 三 → ミ
武 → む 牟 → ム(牟の上の部分)
女 → め 女 → メ(女の下の部分)
毛 → も 毛 → モ
 
也 → や 也 → ヤ
由 → ゆ 由 → ユ(由の右側部分)
与 → よ 与 → ヨ
 
良 → ら 良 → ラ(良の右上部分)
利 → り 利 → リ(利の右側部分)
留 → る 流 → ル(流の右下部分)
礼 → れ 礼 → レ(礼の右側部分)
呂 → ろ 呂 → ロ(呂の上の部分)
 
和 → わ 和 → ワ(和の右上部分)
遠 → を 乎 → ヲ
无 → ん 尓 → ン
 

Categories
不学无术

沪江网上的免费日语视频教程 | 日语基础视频讲座 | 日语初级视频讲座 |新版标准日本语视频初级讲座

发现这个地址挺难找到的,与大家分享:
http://jp.hjenglish.com/new/zt/riyushipin/
有以下三个内容的视频(虽然有些比较模糊但是是完全免费的!)
=====================

日语基础视频讲座

《日语基础》结构严谨内容充实,是合中日两国专家之力编成的一套具有权威性的、质量上乘的日语教材。前面的学习为基础阶段,对学生进行日语语音、文字、词汇、语法、句型以及功能意念等的教学。一共40讲。
=====================

日语初级视频讲座

「日本語で暮らそう」是日本NHK于2010年推出的一套日语教学视频讲座。为日语初级学者量身打造,适合日语初级学者提高实用日语口语和语法水平。一共25讲。
=====================

新版标准日本语视频初级讲座

《新版中日交流标准日本语(初级上、下)》电视辅导讲座2006年暑期于上海教育电视台首播,共50集,每集20分钟。节目播出后取得非常好的社会反响。希望更多日语学习者能观看到标日的辅导讲座,更好地学习这套教材。这里收录除2课入门单元的48课课文内容。
Categories
不学无术

功能强大的编辑器——Vi使用说明

转载自http://dsec.pku.edu.cn/~jinlong/vi/Vi.html

在Vi 中移动光标

  k        上
h   l    左  右
  j        下
^        移动到该行第一个非空格的字符处
w        向前移动一个单词,将符号或标点当作单词处理
W        向前移动一个单词,不把符号或标点当作单词处理
b        向后移动一个单词,把符号或标点当作单词处理
B        向后移动一个单词,不把符号或标点当作单词处理
(        光标移至句首
)        光标移至句尾
{        光标移至段落开头
}        光标移至段落结尾
H        光标移至屏幕顶行
M        光标移至屏幕中间行
L        光标移至屏幕最后行
0        到行首
$        到行尾
gg       到页首
G        到页末
行号+G   跳转到指定行
n+       光标下移n行
n-       光标上移n行
Ctrl+g   查询当前行信息和当前文件信息
fx       向右跳到本行字符x处(x可以是任何字符)
Fx       向左跳到本行字符x处(x可以是任何字符)
tx       和fx相同,区别是跳到字符x前
Tx       和Fx相同,区别是跳到字符x后
C-b      向上滚动一屏
C-f      向下滚动一屏
C-u      向上滚动半屏
C-d      向下滚动半屏
C-y      向上滚动一行
C-e      向下滚动一行
nz       将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

进入和退出Vi命令

vi filename               打开或新建文件,并将光标置于第一行首
vi +n filename            打开文件,并将光标置于第n行首
vi + filename             打开文件,并将光标置于最后一行首
vi +/pattern filename     打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename            在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename ... filename  打开多个文件,依次进行编辑
ZZ                        退出vi并保存
:q!                       退出vi,不保存
:wq                       退出vi并保存

重复操作

.        重复上一次操作

自动补齐

C-n      匹配下一个关键字
C-p      匹配上一个关键字

插入

o        在光标下方新开一行并将光标置于新行行首,进入插入模式。
O        同上,在光标上方。
a        在光标之后进入插入模式。
A        同上,在光标之前。
R        进入替换模式,直到按下Esc
set xxx  设置XXX选项。

行合并

J        把下面一行合并到本行后面

Vi中查找及替换命令

/pattern         从光标开始处向文件尾搜索pattern
?pattern         从光标开始处向文件首搜索pattern
n                在同一方向重复上一次搜索命令
N                在反方向上重复上一次搜索命令
%                查找配对的括号
:s/p1/p2/g       将当前行中所有p1均用p2替代,若要每个替换都向用户询问则应该用gc选项
:n1,n2s/p1/p2/g  将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g    将文件中所有p1均用p2替换
.*[]^%~$ 在Vi中具有特殊含义,若需要查找则应该加上转义字符""

查找的一些选项

设置高亮

:set hlsearch    设置高亮
:set nohlsearch  关闭高亮
:nohlsearch      关闭当前已经设置的高亮

增量查找

:set incsearch   设置增量查找
:set noincsearch 关闭增量查找

在Vi中删除

x        删除当前光标下的字符
dw       删除光标之后的单词剩余部分。
d$       删除光标之后的该行剩余部分。
dd       删除当前行。
c        功能和d相同,区别在于完成删除操作后进入INSERT MODE
cc       也是删除当前行,然后进入INSERT MODE

更改字符

rx       将当前光标下的字符更改为x(x为任意字符)
~        更改当前光标下的字符的大小写

 

键盘宏操作

qcharacter  开始录制宏,character为a到z的任意字符
q           终止录制宏
@character  调用先前录制的宏

恢复误操作

u        撤销最后执行的命令
U        修正之前对该行的操作
Ctrl+R   Redo

在Vi中操作Frame

c-w c-n  增加frame
c-w c-c  减少frame
c-w c-w  切换frame
c-w c-r  交换两个frame

VIM中的块操作

Vim支持多达26个剪贴板

  选块   先用v,C-v,V选择一块,然后用y复制,再用p粘贴。
  yy     复制当前整行
  nyy    复制当前行开始的n行内容
  ?nyy   将光标当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字
  ?nyw   将光标当前行及其下n个词保存到寄存器?中,其中?为一个字母,n为一个数字
  ?nyl   将光标当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
  ?p     将寄存器?中的内容粘贴到光标位置之后。如果?是用yy复制的完整行,
         则粘贴在光标所在行下面。这里?可以是一个字母,也可以是一个数字
  ?P     将寄存器a中的内容粘贴到光标位置之前。如果?是用yy复制的完整行,
         则粘贴在光标所在行上面。这里?可以是一个字母,也可以是一个数字
  ay[motion]
            ay$    复制光标位置到行末并保存在寄存器a中
            ayft   复制光标位置到当前行第一个字母t并保存在寄存器a中

以上指令皆可去掉a工作,则y,p对未命名寄存器工作(所有d,c,x,y的对象都被保存在这里)。

剪切/复制/粘贴

所有删除的内容自动被保存,可以用p键粘贴

Vi的选项设置

all         列出所有选项设置情况
term        设置终端类型
ignorance   在搜索中忽略大小写
list        显示制表位(Ctrl+I)和行尾标志($)
number      显示行号
report      显示由面向行的命令修改过的数目
terse       显示简短的警告信息
warn        在转到别的文件时若没保存当前文件则显示NO write信息
nomagic     允许在搜索模式中,使用前面不带“”的特殊字符
nowrapscan  禁止vi在搜索到达文件两端时,又从另一端开始
mesg        允许vi显示其他用户用write写到自己终端上的信息

tips

对代码自动格式化 gg=G


主要参考网页:

http://www.caole.net/diary/vim.html 及相应 主页
Categories
不学无术

wcstombs转换中文的问题

http://blog.chinaunix.net/uid-1878979-id-2817097.html

在应用中碰到中文的字符串用wcstombs转换后,就成了NULL。查了一些一资料后,发现需要调用setlocale函数。这个是针对Unicode来说的,对于使用多国语言的时候需要使用该函数来定义语种
     setlocale(LC_ALL,””);     //设置本地默认Locale. 或者是setlocale(LC_ALL, “chs”)
wcstombs(dest, source, length);
setlocale(LC_ALL,”C”);     //默认