2模式识别与机器学习思考题(07)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
模式识别与机器学习
思考题
1:简述模式识别与机器学习研究的共同问题和各自的研究侧重点。
模式识别和机器学习都是信息科学和人工智能的重要组成部分。
一、模式识别(Pattern Recognition)是指对表征事物或现象的各种形式的(数值的、文字的和逻辑关系的)信息进行处理和分析,以对事物或现象进行描述、辨认、分类和解释的过程。
模式识别主要的研究领域有:(1)计算机视觉医学影像分析,光学文字识别;(2)语音识别;(3)手写识别;(4)生物特征识别:人脸识别,指纹识别,虹膜识别;(5)文件分类;(6)互联网搜索引擎;(7)信用评分。
模式识别研究主要集中在两方面,一是研究生物体(包括人)是如何感知对象的,属于认识科学的范畴,二是在给定的任务下,如何用计算机实现模式识别的理论和方法。
前者是生理学家、心理学家、生物学家和神经生理学家的研究内容,后者通过数学家、信息学专家和计算机科学工作者近几十年来的努力,已经取得了系统的研究成果。
二、机器学习(Machine Learning)是研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。
机器学习的研究领域有:(1)计算机视觉;(2)语音和手写识别;(3)生物特征识别(4)搜索引擎(5)医学诊断(6)检测信用卡欺诈(7)证券市场分析(8)DNA序列测序;(9)战略游戏和机器人运用
模式识别与机器学习都对计算机视觉、语音识别、手写识别、生物特征识别有重要的应用。
三、模式识别与机器学习各自的研究侧重点不同。
模式识别侧重研究计算机如何模拟人类的感知识别能力,主要集中在两方面,一是研究生物体(包括人)是如何感知对象的, 属于认识科学的范畴;二是在给定的任务下,如何用计算机实现模式识别的理论和方法。
模式识别是机器学习的一个主要任务。
前者是生理学家、心理学家、生物学家和神经生理学家的研究内容, 后者通过数学家、信息学专家和计算机科学工作者近几十年来的努力, 已经取得了系统的研究成果。
模式识别主要有两种基本的方法, 即统计模式识别方法和结构( 句法) 模式识别方法, 与此对应的模式识别系统都由两个过程所组成, 即设计和实现。
此外, 还有其他诸如模板匹配的方法和神经网络方法等。
机器学习侧重研究计算机如何模拟人类的学习行为,主要在以下三个方面进行:一是面向任务的研究—研究和分析改进一组预定任务的执行性能的学习系统;二是认知模型—研究人类学习
过程并进行计算机模拟;三是理论分析—从理论上探索各种可能的学习方法和独立于应用领域的算法。
2:列出在模式识别与机器学习中的常用算法及其优缺点。
1. k-近邻法
近邻法是一种最简单的非参数模式识别方法中的模式匹配法,它主要依据样本间的多维空间距离来实现分类.其基本规则是,在所有N 个样本中找到与测试样本的k 个最近邻者,其中各类别所占个数表示成k i , i =1,…,c 。
定义判别函数为: g i (x)=k i , i=1, 2,…,c 。
决策规则为:
c i x g j i
i ,,1;)(max arg ==
优点:算法简单,易于理解和分析,分类效果好, 在训练样本趋于无穷大时接近最优。
缺点:可以明显看出它需要的计算量大,存储容量大;没有考虑到决策的风险;对于近邻法错误率的分析都是建立在样本数趋向于无穷大的假定上的,而这在实际应用时是很难实现的。
而对有限样本集的情况,又缺乏理论上的分析。
2. 贝叶斯决策理论
贝叶斯决策理论是主观贝叶斯派归纳理论的重要组成部分,是基于概率统计的基本的判别函数分类理论。
贝叶斯决策就是在不完全情报下,对部分未知的状态用主观概率估计,然后用贝叶斯公式对发生概率进行修正,最后再利用期望值和修正概率做出最优决策。
贝叶斯决策理论方法是统计模型决策中的一个基本方法,其基本思想是:
1. 已知类条件概率密度参数表达式和先验概率
2. 利用贝叶斯公式转换成后验概率
3. 根据后验概率大小进行决策分类
设D 1,D 2,……,D n 为样本空间S 的一个划分,如果以P(D i )表示事件D i 发生的概率,且P(D i )>0(i=1,2,…,n)。
对于任一事件x ,P(x)>0,得到贝叶斯公式:
∑==
n i i i i i i D P D x P D P D x P x D P 1)()|()()|()|(
优点: (1)算法简单,易于理解和分析,其基本概念被众多的先进决策算法运用,判断结果较精确;
(2)能对信息的价值或是否需要采集新的信息做出科学的判断;
(3)它能对调查结果的可能性加以数量化的评价,而不是像一般的决策方法那样,对调查结果或者是完全相信,或者是完全不相信。
(4)如果说任何调查结果都不可能完全准确,先验知识或主观概率也不是完全可以相信的,那么贝叶斯决策则巧妙地将这两种信息有机地结合起来了;
(5)它可以在决策过程中根据具体情况下不断地使用,使决策逐步完善和更加科学。
缺点:
(1)它需要的数据多,分析计算比较复杂,特别在解决复杂问题时,这个矛盾就更为突出。
(2)有些数据必须使用主观概率,有些人不太相信,这也妨碍了贝叶斯决策方法的推广使用。
3. 逆向传播神经网络
逆向传播神经网络的优点:
(1)每个神经元的运算功能十分简单。
(2)各神经元之间是并行结构互使得其具有高速处理能力。
(3)在神经网络中,知识与信息的存储表现为神经元之间分布式的物理联系,知识存储容量很大。
(4)网状结构似的整个系统的工作不会因为个别的神经元的损失而大大降低系统性能。
(5)它可以实现输入和输出数据之间的非线性映射.
逆向传播神经网络的缺点:
(1)算法的稳定性与学效率成反比。
(2)还没找到某一明确的规则确定学效率的大小,尤其相对于非线性网络来说,学效率的选择更是一个难题。
(3)训练过程也可能陷入局部最小,可以通过变换初始值进行多次训练来决绝这个问题,但又增加了计算的负担。
(4)没有有效的方法可以确定网络层数,太多或太少都会影响系统的性能。
4. 遗传算法
遗传算法是一种基于生物自然选择与遗传机理的随机搜索算法,是一种仿生全局优化方法。
遗传算法具有的隐含并行性、易于和其它模型结合等性质使得它在数据挖掘中被加以应用。
遗传算法的优点:
(1)遗传算法解决了传统优化算法容易误入局部最优解的缺点,不用单值迭代,而是从解集合进行搜索,利于全局择优。
(2)遗传算法需要的参数少,容易形成通用算法程序。
(3)遗传算法有极强的容错能力,遗传算法的初始串集本身就带有大量与最优解甚远的信息;该算法具有收敛性,通过选择、交叉、变异操作能迅速排除与最优解相差极大的串。
(4)遗传算法是采用随机方法进行最优解搜索,选择体现了向最优解迫近,交叉体现了最优解的产生,变异体现了全局最优解的复盖。
(5)力称为隐含并行性(Implicit Parallelism)。
它说明遗传算法其内在具有并行处理的特质。
遗传算法的缺点:
(1)选取的值范围大,变量多时,收敛速度也随之下降,甚至有时还无法给定取值范围。
(2)可找到最优解附近,但无法精确确定最优解位置。
(3)遗传算法的参数(n,Pm,Pc)选择还没准确的定数,还需要进一步研究其数学基础理论。
5. 决策树算法
决策树是一种常用于预测模型的算法,它通过将大量数据有目的分类,从中找到一些有价值的,潜在的信息。
优点:由于决策树具有易构造、结构简单、易于理解、分类精度高,且易于转化成SQL 语句有效地存取数据库,易于算法实现等优点,决策树尤其适于数据挖掘。
描述简单,分类速度快,特别适合大规模的数据处理。
缺点:在学习过程中不能有很多背景知识。
是非递增学习算法;ID3决策树是单变量决策树,复杂概念的表达困难;同性间的相互关系强调不够;抗噪性差。
决策树的这种明确性可能带来误导。
3:试举例说明,如何将一个实际问题化解成所学的机器学习算法来解决的问题。
例如:根据下列的数据集,你如何利用机器学习的算法,设计一个从程序,当输入三个数值作为Age, Tall,Weight时,马上就能给出答案,这应该是何种动物?(Sheep,Ox,或 Pig)。
*Age Tall Weight Animal
0 30 8 sheep
1 35 10 sheep
2 37 16 sheep
3 40 20 sheep
4 4
5 25 sheep
5 50 35 sheep
6 55 40 sheep
7 60 45 sheep
8 65 50 sheep
9 65 50 sheep
10 65 50 sheep
0 45 15 ox
1 50 25 ox
2 55 35 ox
3 65 45 ox
4 70 5
5 ox
5 75 65 ox
6 80 75 ox
7 85 85 ox
8 90 95 ox
9 95 105 ox
10 105 115 ox
0 15 5 pig
1 17 15 pig
2 20 25 pig
3 23 35 pig
4 27 4
5 pig
5 30 55 pig
6 33 65 pig
7 35 75 pig
8 37 85 pig
9 40 95 pig
10 45 105 pig
用上述数据建立一个KNN模型见件附带程序KNNtrainfromFile.m,在Matlab 7.1 版本中运行这程序,将获得一个训练好的模型存到硬盘上的名字为TrainingGroup.mat. 在程序useTrainedKNN.m中装入这个训练好的模型利用KNN 算法就可通过Age, Tall,Weight三个数据来识别是什么动物。
KNNtrainfromFile.m程序
function asd=KNNtrainingFromFile()
% This program demostrates the application of KNN
% written by Q.Wu. Nov. 2009.
namePre='animalExm'; %%%%%%%%%%%%
nameExt1='.txt';
name=[namePre nameExt1];
ptCell=file2cells(name); %converte data file to cellarray
%dispplayPt(ptCell)
im=size(ptCell,2); %number of training samples
jm=size(ptCell{1},2); %number of attributes for each sample.
training=zeros(im,jm-1);
decision{1}=cellstr(ptCell{1}{jm});
num=1;
group(im)=0;
%create training set and group numbers
for i=1:im
fprintf('\n No.%g ',i);
for j=1:jm-1
training(i,j)=str2num(ptCell{i}{j});
fprintf(' %s ',ptCell{i}{j});
end
tt=0;
for k=1:num
ads=cellstr(ptCell{i}{jm});
ads2=cellstr(decision{k});
if strcmp(ads,ads2)
group(i)=k;
tt=1;
break;
end
end
if tt==0
num=num+1;
decision{num}=cellstr(ptCell{i}{jm});
group(i)=num;
end
strc=char(ptCell{i}{jm});
fprintf('%s GROUP No. %g ',strc,group(i));
end
%test the KNN using samples
fprintf('Input sample\n');
sample =[8 65 50; 4 27 45] %examples
fprintf('Sample class\n');
class = knnclassify(sample, training, group)
save TrainingGroup training group%save the KNN model %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5555
function dispplayPt(ptCell)
fprintf('\n Number of samples= %g\n',size(ptCell,2));
for i=1:size(ptCell,2)
fprintf('No.%g ',i);
for j=1:size(ptCell{i},2)
fprintf(' %s ',ptCell{i}{j}); %{j});
end
fprintf('\n');
end
fprintf('\n\n'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function ptCell=file2cells(filename)
%read a text file adn transfer to cell ptCell
fid = fopen(filename,'r');
line = fgetl(fid);
linecell=line2cell(line);
numInput=size(linecell,2);
s{1}=linecell;
i=2;
while ~feof(fid)
line = fgetl(fid);
linecell=line2cell(line);
if size(linecell,2)~=numInput
s{i-1}
linecell
fprintf('\n Data number is wrong at record No:%g.',i);
fprintf('This data number is %g. It should be %g\n
\n',size(linecell,2),numInput);
break;
end
s{i}=linecell;
i=i+1;
end
ptCell=s;
status = fclose(fid); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function acell=line2cell(line)
acell={};
n=0;
while ~isempty(strtok(line))
if ~isempty(findstr(',',line))
delimiter=',';
else
fprintf('\n Data items sould be seperated by ","\n');
end
[token,line]=strtok(line,delimiter);
n=n+1;
acell{n}=token;
end
%%%%end of file2cells %%%%%%%%%%%%%%%%
4:请应用一种具体的模式识别与机器学习算法,简述解决问题的主要步骤。
请从你熟悉的实际生活问题中,选择一个问题并收集一组实际数据(也可从机器学习基准数据库The UCI Machine Learning Repository,/ml/中找一个数据集)。
将数据分成训练集和测试集。
用训练集建立识别模型,然后用测试集算出准确率(或用十组交叉验证求准确率)。
要求训练数据要大于50个。
在模式识别与机器学习中解决问题的主要步骤:
(1)数据采集
数据采集是指利用各种传感器把被研究对象的各种信息转换为计算机可以接受的数值或符号(串)集合。
这一步的关键是传感器的选取。
(2)数据预处理
为了从这些数字或符号(串)中抽取出对模式识别与机器学习有效的信息,必须进行数据预处理,包括数字滤波和特征提取。
数据预处理是一个非常重要的步骤,它影响着整个模式识别与机器学习的成败。
数字滤波是为了消除输入数据或信息中的噪声,排除不相干的信号,只留下与被研究对象的性质和采用的识别方法密切相关的特征(如表征物体的形状、周长、面积等等)。
特征提取是指从滤波数据中衍生出有用的信息,从许多特征中寻找出最有效的特征,以降低后
续处理过程的难度。
比如,图像识别时,提取的特征有灰度变化、纹理、形状等。
我们对滤波后的这些特征进行必要的计算(比如进行快速傅里叶变换以得到信号功率谱)后,通过特征选择和提取或基元选择形成模式识别与机器学习的特征空间。
(3)选择或设计模型
对同一个问题或许有许多不同的模型可以描述,不同的模型会导致识别和学习结果的不同,因此需要利用已有的经验和知识来选择或设计适当的模型。
在确定了所建立的模型后,就可以估计模型的参数,需要注意的时,应该使得模型对未知数据有良好的适应性。
(4)训练所建立的模型
用前面所得的数据分成两组,一组作为训练数据,一组作为测试数据。
设定目标误差,用训练数据对所建立的模型进行训练,达到目标误差,就停止训练,这样就确定了所建立模型的参数。
(5)测试、验证模型
测试模型的目的是为了确定所建立模型是否满足实际应用的要求。
测试数据应该和训练用的样本数据不一致,否则,测试所得的结果永远都是满意的。
用测试数据对所建立模型进行测试,观察测试结果是否与实际情况是相符合。
若与实际情况相符合,所建立模型就可对未知数据做预测,从而得到进一步的验证。
5:在模式识别与机器学习中,常常需要用已知的数据集来训练所建立的模型。
如果所建立的模型被说成是‘over-fit’,请解释这是什么意思?请陈述一些避免‘over-fit’的方法。
‘over-fit’就是过拟合的意思,所谓“过拟合”就是训练样本的误差被训练的非常小,而当用训练好的模型对未知样本进行预测时却产生很大误差的现象,也就是说此时所建立模型的泛化能力变差了,或者说所建立模型预测未知的可靠性降低了。
1. BP网络建模过程中,出现"过拟合"现象时网络学习能力与推广能力之间满足一般测不准关
系.测不准关系式中的过拟合参数 P的确定将有助于避免出现"过拟合"现象.
2. 过拟合的解决方法是设置满足问题求解精度要求的上限,不要将目标误差设置太小。
个人
认为过拟合还与样本过于冗余有关,采用删除冗余样本信息的特征样本,不仅可以加快训练速度,还可以改善过拟合问题。
3. 使用初期终止的方法来提高泛化能力。
用训练集来训练网络,同时考察网络在校验集上的
误差,一旦校验集上的误差的误差不再下降(或者累计n次不再下降),那么就停止训练,这样可以减轻网络过拟合的程度。
4. 决策树方法中,为防止过拟合,同时也减少了训练的时间。
应在适当的时候停止树的生长.
常用的方法是设定决策树的最大高度(层数)来限制树的生长。
还有一种方法是设定每个节点必须包含的最少记录数,当节点中记录的个数小于这个数值时就停止分割。
防止过拟合的方法:(1)按照一定比例在TRAIN函数导入校验和测试的VV和VT参数;(2)采用TRAINGDX和LEARNGDM组合训练;(3)采用TRAINBR函数训练等等,发现没有一个的泛化(GENERALIZATION)效果能很理想的。
6:在模式识别与机器学习的研究中,还不断有人提出新的算法。
请问有那些方法可以用来判定他们的优劣?
答:1. 正确性
说一个算法是正确的,是指对于一切合法的输入数据,该算法经过有限时间(算法意义上的有限)的执行都能产生正确(或者说满足规格说明要求)的结果。
2. 时间复杂性
应该怎样计算一个算法的执行时间呢?首先想到的是,我们应选择一种度量,对解决同一个问题的诸多算法用该度量可有效地进行比较。
:(1)它能告诉我们算法所用方法(包括数据结构)的时间效率;(2)它与算法描述语言(或程序设计语言)及设计风格无关;(3)它与算法实现过程中的许多细节:诸如增加循环下标、计算数组下标、设置数据结构指针等簿记运算无关;(4)它应该是足够精确和具有一般性的。
一个算法的时间复杂性是指该算法的基本运算次数。
3. 空间复杂度
空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度。
一个算法在计算机存储器上所占用的存储空间,包括存储算法本身所占用的存储空间,算法的输入输出数据所占用的存储空间和算法在运行过程中临时占用的存储空间这三个方面。
4. 占用空间
算法执行需要存储空间来存放算法本身包含的语句、常数、变量、输入数据和实现其运算所需的数据(如中间结果等),此外还需要一些工作空间用来对(以某种方式存储的)数据进行操作。
5. 可读性
可读性好的算法有助于设计者和他人阅读、理解、修改和重用。
与此相反,晦涩难懂的算法不但容易隐藏较多的错误,而且增加了人们在阅读、理解、调试、修改和重用算法等方面的困难。
6. 坚固性
当输入数据非法时,算法能适当地做出合适的反应。
可用多组数据交叉等方法,用标准数据集对上述指标进行实验结果比较。
7:如果你所遇到的数据集是纯数值型数据,你会采用那些模式识别与机器学习算法?若是包含大量非数值数据你会采用那些模式识别与机器学习算法?为什么?
答:在计算机进行信息处理时,所涉及到的数据包含数值型数据(Numeric)和非数值型数据(NonNumeric)两大类。
数值型数据是指能参加算术或逻辑运算的数据;非数值型数据是指不能参加算术运算的数据,这些数据只能参加逻辑运算。
纯数值型:
1. 贝叶斯决策法
是基于概率统计的基本的判别函数分类法。
只要知道先验概率和条件概率就可以对样本进行判断,算法简单,易于理解和分析,其基本概念被众多的先进决策算法运用,判断结果较精确。
由于数据是纯数值型数据,数据简单,样本间的空间距离易计算,且先验概率和条件概率易求得。
2、BP神经网络算法
神经网络只能处理数值型数据,建立神经网络需要做的数据准备工作量很大. 要想得到准确度高的模型必须认真的进行数据清洗,整理,转换,选择等工作,对任何数据挖掘技术都是这样,神经网络尤其注重这一点.比如神经网络要求所有的输入变量都必须是0-1(或-1 -- +1)之间的实数,因此像"地区"之类文本数据必须先做必要的处理变成数值之后才能用作神经网络的输入。
但每个神经元的运算功能十分简单。
各神经元之间是并行结构互使得其具有高速处理能力。
在神经网络中,知识与信息的存储表现为神经元之间分布式的物理联系,知识存储容量很大。
3、贝叶斯算法
是一种具有最小错误率或最小风险概率的分类方法,是利用事件的先验概率和条件概率确定事件的后验概率,只要知道各个属性发生的频率数,就可根据结果进行精确的分类,效率高。
非数值型数据:
1、决策树
决策树很擅长处理非数值型数据, 决策树的分类方法.它是从实例集中构造决策树,是一种有指导的学习方法.该方法先根据训练子集(又称为窗口)形成决策树.如果该树不能对所有对象给出正确的分类,那么选择一些例外加入到窗口中,重复该过程一直到形成正确的决策集. 决策树提供了一种展示类似在什么条件下会得到什么值这类规则的方法.是根据样本的必要属性分类的。
其算法的特点是通过将大量数据有
目的分类,从中找到一些有价值的,潜在的信息。
它的主要优点是描述简单,分类速度快,特别适合大规模的数据处理。
2. 近邻法
是一种最简单的非参数模式识别方法中的模式匹配法,它主要依据样本间的多维空间距离来实现分类. 且该算法简单,易于理解和分析,分类效果好。
3、遗传算法,
特点从解集合进行搜索,利于全局择优。
该算法具有收敛性,通过选择、交叉、变异操作能迅速排除与最优解相差极大的串。
是非数值并行算法之一,解决了非数值数据及大量数据带来的计算量和存储量的问题。
8:请陈述一个你认为在模式识别与机器学习最难解决的问题,并说明理由。
答:我认为最难解决的问题应该是机器学习和模式识别的准确性,人工的程序、算法是总是会有一定的逻辑性,对外界千变万化的随机事件的处理存在很大局限,很难像人类的神经网络一样精确判断外界的各种刺激并做出正确的反应。
而且,算法的程序是已经确定的,而外界事物处于不断变化与学习的过程中,因此,算法经常需要修改与升级以适应外界的变化。