机器学习初窥

来源:互联网 发布:创游网络 编辑:程序博客网 时间:2024/05/14 08:58
机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。

学习是人类具有的一种重要智能行为,但究竟什么是学习,长期以来却众说纷纭。社会学家、逻辑学家和心理学家都各有其不同的看法。
比如,Langley(1996) 定义的机器学习是“机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能”。(Machine learning is a science of the artificial. The field's main objects of study are artifacts, specifically algorithms that improve their performance with experience.')
Tom Mitchell的机器学习(1997)对信息论中的一些概念有详细的解释,其中定义机器学习时提到,“机器学习是对能通过经验自动改进的计算机算法的研究”。(Machine Learning is the study of computer algorithms that improve automatically through experience.)
Alpaydin(2004)同时提出自己对机器学习的定义,“机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。”(Machine learning is programming computers to optimize a performance criterion using example data or past experience.)
尽管如此,为了便于进行讨论和估计学科的进展,有必要对机器学习给出定义,即使这种定义是不完全的和不充分的。顾名思义, 机器学习是研究如何使用机器来模拟人类学习活动的一门学科。稍为严格的提法是:机器学习是一门研究机器获取新知识和新技能,并识别现有知识的学问。这里所说的“机器”,指的就是计算机,电子计算机,中子计算机、光子计算机或神经计算机等等。
机器能否象人类一样能具有学习能力呢?1959年美国的塞缪尔(Samuel)设计了一个下棋程序,这个程序具有学习能力,它可以在不断的对弈中改善自己的棋艺。4年后,这个程序战胜了设计者本人。又过了3年,这个程序战胜了美国一个保持8年之久的常胜不败的冠军。这个程序向人们展示了机器学习的能力,提出了许多令人深思的社会问题与哲学问题。
机器的能力是否能超过人的,很多持否定意见的人的一个主要论据是:机器是人造的,其性能和动作完全是由设计者规定的,因此无论如何其能力也不会超过设计者本人。这种意见对不具备学习能力的机器来说的确是对的,可是对具备学习能力的机器就值得考虑了,因为这种机器的能力在应用中不断地提高,过一段时间之后,设计者本人也不知它的能力到了何种水平。
机器学习有下面几种定义: “机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能”。 “机器学习是对能通过经验自动改进的计算机算法的研究”。 “机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。” 一种经常引用的英文定义是:A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.
机器学习已经有了十分广泛的应用,例如:数据挖掘、计算机视觉、自然语言处理、生物特征识别、搜索引擎、医学诊断、检测信用卡欺诈、证券市场分析、DNA序列测序、语音和手写识别、战略游戏和机器人运用。

2发展史

机器学习是人工智能研究较为年轻的分支,它的发展过程大体上可分为4个时期。
第一阶段是在20世纪50年代中叶到60年代中叶,属于热烈时期。
第二阶段是在20世纪60年代中叶至70年代中叶,被称为机器学习的冷静时期。
第三阶段是从20世纪70年代中叶至80年代中叶,称为复兴时期。
机器学习的最新阶段始于1986年。
机器学习进入新阶段的重要表现在下列诸方面:
(1) 机器学习已成为新的边缘学科并在高校形成一门课程。它综合应用心理学、生物学和神经生理学以及数学、自动化和计算机科学形成机器学习理论基础。
(2) 结合各种学习方法,取长补短的多种形式的集成学习系统研究正在兴起。特别是连接学习符号学习的耦合可以更好地解决连续性信号处理中知识与技能的获取与求精问题而受到重视。
(3) 机器学习与人工智能各种基础问题的统一性观点正在形成。例如学习与问题求解结合进行、知识表达便于学习的观点产生了通用智能系统SOAR的组块学习。类比学习与问题求解结合的基于案例方法已成为经验学习的重要方向。
(4) 各种学习方法的应用范围不断扩大,一部分已形成商品。归纳学习的知识获取工具已在诊断分类型专家系统中广泛使用。连接学习在声图文识别中占优势。分析学习已用于设计综合型专家系统。遗传算法与强化学习在工程控制中有较好的应用前景。与符号系统耦合的神经网络连接学习将在企业的智能管理与智能机器人运动规划中发挥作用。
(5) 与机器学习有关的学术活动空前活跃。国际上除每年一次的机器学习研讨会外,还有计算机学习理论会议以及遗传算法会议。

3主要策略

学习是一项复杂的智能活动,学习过程与推理过程是紧密相连的,按照学习中使用推理的多少,机器学习所采用的策略大体上可分为4种——机械学习、通过传授学习、类比学习和通过事例学习。学习中所用的推理越多,系统的能力越强。

4基本结构

表示学习系统的基本结构。环境向系统的学习部分提供某些信息,学习部分利用这些信息修改知识库,以增进系统执行部分完成任务的效能,执行部分根据知识库完成任务,同时把获得的信息反馈给学习部分。在具体的应用中,环境,知识库和执行部分决定了具体的工作内容,学习部分所需要解决的问题完全由上述3部分确定。下面我们分别叙述这3部分对设计学习系统的影响。
影响学习系统设计的最重要的因素是环境向系统提供的信息。或者更具体地说是信息的质量。知识库里存放的是指导执行部分动作的一般原则,但环境向学习系统提供的信息却是各种各样的。如果信息的质量比较高,与一般原则的差别比较小,则学习部分比较容易处理。如果向学习系统提供的是杂乱无章的指导执行具体动作的具体信息,则学习系统需要在获得足够数据之后,删除不必要的细节,进行总结推广,形成指导动作的一般原则,放入知识库,这样学习部分的任务就比较繁重,设计起来也较为困难。
因为学习系统获得的信息往往是不完全的,所以学习系统所进行的推理并不完全是可靠的,它总结出来的规则可能正确,也可能不正确。这要通过执行效果加以检验。正确的规则能使系统的效能提高,应予保留;不正确的规则应予修改或从数据库中删除。
知识库是影响学习系统设计的第二个因素。知识的表示有多种形式,比如特征向量、一阶逻辑语句、产生式规则、语义网络和框架等等。这些表示方式各有其特点,在选择表示方式时要兼顾以下4个方面:
(1)表达能力强。
(2)易于推理。
(3)容易修改知识库。
(4)知识表示易于扩展。
对于知识库最后需要说明的一个问题是学习系统不能在全然没有任何知识的情况下凭空获取知识,每一个学习系统都要求具有某些知识理解环境提供的信息,分析比较,做出假设,检验并修改这些假设。因此,更确切地说,学习系统是对现有知识的扩展和改进。
执行部分是整个学习系统的核心,因为执行部分的动作就是学习部分力求改进的动作。同执行部分有关的问题有3个:复杂性、反馈和透明性。

5代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//在gcc-4.7.2下编译通过。
//命令行:g++-Wall-ansi-O2test.cpp-otest
#include<iostream>
usingnamespacestd;
voidinput(int&oper,constboolmeth)
{
//meth为true则只判断1,为false则判断1或0
while(true)
{
cin>>oper;
if(meth&&oper==1)
break;
elseif(oper==0||oper==1)
break;
cout<<"输入错误,请重新输入。"<<endl;//判断参数
cin.sync();//避免极端输入导致死循环
cin.clear();
}
}
intmain(void)
{
cout<<"1+1=2吗?那要看您怎么教我了,不要惊讶我会学习的"<<endl;
intladd,radd,aprs,rcnt(0),wcnt(0);//定义输入与结果,正确次数与错误次数
cout<<"开始学习……"<<endl;
for(inti(0);i!=10;++i)
{
cout<<"参数1(必须是1):"<<flush;//提示输入参数
input(ladd,true);
cout<<"参数2(必须是1):"<<flush;
input(radd,true);
cout<<"结果:"<<(ladd+radd)<<endl;//输出结果
cout<<"您对这满意吗(满意输入1,不满意输入0):"<<flush;//评价等级
input(aprs,false);
if(aprs)//判断用户评价
++rcnt;
else
++wcnt;
cout<<"正确次数:"<<rcnt<<"错误次数:"<<wcnt<<endl;//错误次数
}
if(rcnt>wcnt)//判断学习结果
cout<<"主人告诉我1+1=2。"<<endl;
else
if(rcnt<wcnt)
cout<<"主人告诉我1+1!=2。"<<endl;
else
cout<<"我不明白主人是什么意思。"<<endl;
intterm;//退出部分
cout<<"您对我的表现满意吗?满意请输入1不满意请输入0:"<<flush;
input(term,false);
if(term)
cout<<"谢谢我会继续努力学习"<<endl;
else
cout<<"谢谢我会继续努力学习D"<<endl;
//cin>>term;//在Windows上测试时启用
return0;
}
本程序将根据您的评价判断执行结果 "1+1=2"
  实际上仅用了最简单的 if else for 语句
  这就是一个机器学习的例子,通过环境影响来进行学习。
  通过本例我们不难看出,在人工错误的引导下,机器会给出错误的答案 1+1不等于2。
  所以此类学习方法,一定要在正确引导下实践,否则会得到最坏的结果。
  学习完毕后,计算机会记录本次学习结果,存入数据库,下次执行相应任务时,再将结果调出执行。


0 0
原创粉丝点击