导航:首页 > 源码编译 > mooc学习算法

mooc学习算法

发布时间:2024-03-15 09:30:07

‘壹’ 如何从零开始学编程


在你学习编程之前思考一下你的目标,当你有最终目标时道路会更加的清晰。那么,你想要写什么?网站?游戏?iOS或者Android应用?或是你是想自动化完成一些乏味的任务让你有更多的时间看窗外的风景?也许你只是想更具有就业竞争力找个好工作。所有的这些都是有价值的目标,这些目标都是你编程学习推动力的一部分,没有推动力的人,是无法在略显枯燥的漫长学习之旅中走远的。


不要浮躁

Badprogrammingiseasy.EvenDummiescanlearnitin21days.,meswithit.

不管是在线下还是线上的书店,满目都是《21天学通java》这种速成书目,它们都承诺在很短一段时间内就让你能够学会相关技术。MatthiasFelleisen在他的着作HowtoDesignPrograms,SecondEdition一书中明确指出了这种“速成”的趋势并予以了以上的讽刺。

所谓的“捷径”或者说“银弹”是不存在的,智者说过,精通某个东西需要10年或10000个小时,也就是汉语中的“十年磨一剑”,所以不用着急,功不唐捐。

培养兴趣

ionbythepublic,butbecauseitisfuntoprogram.

_LinusTorvalds

沉醉于编程,编程更是为了兴趣。兴趣是推动力的不竭源泉,保持这种充满兴趣的感觉,以便于你能将其投入到你的10年/10000小时的编程时间中。编程很有趣,那是探索的喜悦。那是创造的喜悦。看到自己亲手完成的作品显示在屏幕上很有趣。有人为你的代码而惊叹很有趣。有人在公共场合称赞你的产品、邻居使用你的产品、以及在媒体上讨论你的产品很有趣。编程应该十分有趣,若并非如此,就找出导致编程无趣的问题,然后解决之。

在这里对于初学者有两个大坑:

如果初学者们只与预先构建好的“发动机和组件”接触(没有理解和思考它们构造的原理),这会严重限制他们在将来构建这些东西的能力,并且在诊断解决问题时无从下手。

第二个坑没有第一个那么明显:幼稚的“整体论”方法有些时候会显得很有效,这有一定的隐蔽性与误导性,但是一两年过后(也许没那么长),当你在学习路上走远时,再想回过头来“补足基础”会有巨大的心理障碍,你得抛弃之前自己狭隘的观念,耐心地缓步前进,这比你初学时学习基础知识困难得多。

但腊敏茄也不能矫枉过正,陷入还原论的大坑,初学时便一心试图做宏大的理论,这样不仅有一切流于理论的危险,枯燥和乏味还会让你失去推动力。这种情况经常发生在计算机科班生身上。

为了更好理解,可以将学习编程类比为学习厨艺:你为了烧得一手好菜买了一些关于菜谱的书,如果你只是想为家人做菜,这会是一个不错的主意,你重复菜谱上的步骤也能做出不赖的菜肴,但是如果你有更大的野心,真的想在朋友面前露一手,做一些独一无二的美味佳肴,甚至成为“大厨”,你必须理解这些菜谱背后大师的想法,理解其中的理论,而不仅仅是一味地实践。但拿猛是如果你每天唯一的工作就是阅读那些厚重的理论书籍,因为缺乏实践,你只会成为一个糟糕的厨子,甚至永远成为不了厨子,因为看了几天书后你就因为枯燥放弃了厨艺的学习。

总之,编程是连接理论与实践的纽带,是计算机科学与计算机应用技术相交融的领域。正确的编程学习方法应该是:通过自顶而下的探索与项目实践,获得编程直觉与推动力;从自底向上的打基础过程中,获得最重要的通用方法并巩固编程思想的理解。

作为初学者,应以后者为主,前者为轮察辅。

启蒙

“学编程应该学哪门语言?”这经常是初学者问的第一个问题,但这是一个错误的问题,你最先考虑的问题应该是“哪些东西构成了编程学习的基础”?

编程知识的金字塔底部有三个关键的部分:

算法思想:例如怎样找出一组数中最大的那个数?首先你得有一个maxSoFar变量,之后对于每个数

语法:我怎样用某种编程语言表达这些算法,让计算机能够理解。

系统基础:为什么while(1)时线程永远无法结束?为什么int*foo(){intx=0;return&x;}是不可行的?

启蒙阶段的初学者若选择C语言作为第一门语言会很困难并且枯燥,这是因为他们被迫要同时学习这三个部分,在能做出东西前要花费很多时间。

因此,为了尽量最小化“语法”与“系统基础”这两部分,建议使用python作为学习的第一门语言,虽然Python对初学者很友好,但这并不意味着它只是一个“玩具”,在大型项目中你也能见到它强大而灵活的身影。熟悉Python后,学习C语言是便是一个不错的选择了:学习C语言会帮助你以靠近底层的视角思考问题,并且在后期帮助你理解操作系统层级的一些原理,如果你只想成为一个普通(平庸)的开发者你可以不学习它。

下面给出了一个可供参考的启蒙阶段导引,完成后你会在头脑中构建起一个整体框架,帮助你进行自顶向下的探索。

完成Codecademy的Python部分。这只是热身部分,尽快完成它,因为你永远只是在浏览器里,你不会学到如何搭建开发环境。在Codecademy这类的编程学习网站学到的那点儿东西,哪怕你只想做一个小的不能再小的项目,你都不知道该从哪儿开始。

完成MIT6.00.1x(中文化)(如果你英语不过关,完成麻省理工学院公开课:计算机科学及编程导论。MOOC是学习编程的一个有效途径。虽然该课程的教学语言为Python,但作为一门优秀的导论课,它强调学习计算机科学领域里的重要概念和范式,而不仅仅是教你特定的语言。如果你不是科班生,这能让你在自学时开阔眼界;课程内容:计算概念,python编程语言,一些简单的数据结构与算法,测试与调试。支线任务:

完成Python核心编程

完成HarvardCS50(如果你英语不过关:完成哈佛大学公开课:计算机科学cs50。同样是导论课,但这门课与MIT的导论课互补。教学语言涉及C,php,JavaScript+SQL,HTML+CSS,内容的广度与深度十分合理,还能够了解到最新的一些科技成果,可以很好激发学习计算机的兴趣。支线任务:

阅读《编码的奥秘》

完成《C语言编程》

[可选]如果你的目标是成为一名Hacker:阅读Hacker'sDelight

PS:如果教育对象还是一个孩子,以下的资源会很有帮助:

5-8岁:TurtleAcademy

8-12岁:PythonforKids

12岁以上:MITScratch或KhanAcademy

入门

结束启蒙阶段后,初学者积累了一定的代码量,对编程也有了一定的了解。这时你可能想去学一门具体的技术,诸如Web开发,Android开发,iOS开发什么的,你可以去尝试做一些尽可能简单的东西,给自己一些正反馈,补充自己的推动力。但记住别深入,这些技术有无数的细节,将来会有时间去学习;同样的,这时候也别过于深入特定的框架和语言,现在是学习计算机科学通用基础知识的时候,不要试图去抄近路直接学你现在想学的东西,这是注定会失败的。

那么入门阶段具体该做些什么呢?这时候你需要做的是反思自己曾经写过的程序,去思考程序为什么(Why)要这样设计?,思考怎样(How)写出更好的程序?试图去探寻理解编程的本质:利用计算机解决问题。

设想:

X=用于思考解决方案的时间,即“解决问题”部分

Y=用于实现代码的时间,即“利用计算机”部分”

编程能力=F(X,Y)(X>Y)

要想提高编程能力,就得优化X,Y与函数F(X,Y),很少有书的内容能同时着重集中在这三点上,但有一本书做到了——(SICP)《计算机程序的构造和解释》,它为你指明了这三个变量的方向。在阅读SICP之前,你也许能通过调用几个函数解决一个简单问题。但阅读完SICP之后,你会学会如何将问题抽象并且分解,从而处理更复杂更庞大的问题,这是编程能力巨大的飞跃,这会在本质上改变你思考问题以及用代码解决问题的方式。此外,SICP的教学语言为Scheme,可以让你初步了解函数式编程。更重要的是,他的语法十分简单,你可以很快学会它,从而把更多的时间用于学习书中的编程思想以及复杂问题的解决之道上。

PeterNorvig曾经写过一篇非常精彩的SICP书评,其中有这样一段:

Touseananalogy,ifSICPwereaboutautomobiles,,howtheyarebuilt,andhowonemightdesignfuel-efficient,safe,.highway,justlikeeveryoneelse.

如果你是文中的前者,阅读SICP将成为你衔接启蒙与入门阶段的关键点

虽然SICP是一本“入门书”,但对于初学者还是有一定的难度,以下是一些十分有用的辅助资源:

):由上文提到的Google研究主管PeterNorvig主讲,教学语言为Python,内容有一定难度。

HowtoDesignPrograms,SecondEdition:HtDP的起点比SICP低,书中的内容循循善诱,对初学者很友好,如果觉得完成SICP过于困难,可以考虑先读一读HtDP。

UCBerkeleySICP授课视频以及SICP的两位作者给Hewlett-Packard公司员工培训时的录像(中文化项目)

ComposingPrograms:一个继承了SICP思想但使用Python作为教学语言的编程导论(其中包含了一些小项目)

SICP解题集:对于书后的习题,作为初学者应尽力并量力完成。

完成了这部分学习后,你会逐步建立起一个自己的程序设计模型,你的脑子里不再是一团乱麻,你会意识到记住库和语法并不会教你如何解决编程问题,接下来要学些什么,在你心里也会明朗了很多。这时候才是真正开始进行项目实践,补充推动力的好时机。

关于项目实践:对于入门阶段的初学者,参与开源项目还为时过早,这时候应该开始一些简单的项目,诸如搭建一个网站并维护它,或是编写一个小游戏再不断进行扩展,如果你自己的想法不明确,MegaProjectList中选取项目。总之,务必在这时拿下你项目实践的第一滴血。

与此同时,别忘了继续打好根基。为了将来的厚积薄发,在下面这几个方面你还要继续做足功课(注意:下面的内容没有绝对意义上的先后顺序):

计算机系统基础

有了之前程序设计的基础后,想更加深入地把握计算机科学的脉络,不妨看看这本书:《深入理解计算机系统》ComputerSystemsAProgrammer'sPerspective。这里点名批评这本书的中译名,其实根本谈不上什么深入啦,这本书只是CMU的“计算机系统导论”的教材而已。CMU的计算机科学专业相对较偏软件,该书就是从一个程序员的视角观察计算机系统,以“程序在计算机中如何执行”为主线,全面阐述计算机系统内部实现的诸多细节。

如果你看书觉得有些枯燥的话,可以跟一门Coursera上的MOOC:TheHardware/SoftwareInterface,这门课的内容是CSAPP的一个子集,但是最经典的实验部分都移植过来了。同时,可以看看TheCProgrammingLanguage,回顾一下C语言的知识。

完成这本书后,你会具备坚实的系统基础,也具有了学习操作系统,编译器,计算机网络等内容的先决条件。当学习更高级的系统内容时,翻阅一下此书的相应章节,同时编程实现其中的例子,一定会对书本上的理论具有更加感性的认识,真正做到经手的代码,从上层设计到底层实现都了然于胸,并能在脑中回放数据在网络->内存->缓存->CPU的流向。

此外,也是时候去接触UNIX哲学了:KISS-KeepitSimple,Stupid.在实践中,这意味着你要开始熟悉命令行界面,配置文件。并且在开发中逐渐脱离之前使用的IDE,学会使用Vim或Emacs(或者最好两者都去尝试)。

阅读《UNIX编程环境》

阅读《UNIX编程艺术》

折腾你的UN*X系统

数据结构与算法基础

如今,很多人认为编程(特别是做web开发)的主要部分就是使用别人的代码,能够用清晰简明的方式表达自己的想法比掌握硬核的数学与算法技巧重要的多,数据结构排序函数二分搜索这不都内置了吗?工作中永远用不到,学算法有啥用啊?这种扛着实用主义大旗的“码农”思想当然不可取。没有扎实的理论背景,遭遇瓶颈是迟早的事。

数据结构和算法是配套的,入门阶段你应该掌握的主要内容应该是:这个问题用什么算法和数据结构能更快解决。这就要求你对常见的数据结构和算法了熟于心,你不一定要敲代码,用纸手写流程是更快的方式。对你不懂的数据结构和算法,你要去搜它主要拿来干嘛的,使用场景是什么。

供你参考的学习资源:

《算法导论》:有人说别把这本书当入门书,这本书本来就不是入门书嘛,虽说书名是IntroctiontoAlgorithms,这只不过是因为作者不想把这本书与其他书搞重名罢了。当然,也不是没办法拿此书入门,读第一遍的时候跳过习题和证明就行了嘛,如果还觉得心虚先看看这本《数据结构与算法分析》

CourseraAlgorithms:DesignandAnalysis[Part1]&[Part2]:Stanford开的算法课,不限定语言,两个部分跟下来算法基础基本就有了;英语没过关的:麻省理工学院公开课:算法导论

入门阶段还要注意培养使用常规算法解决小规模问题的能力,结合前文的SICP部分可以读读这几本书:《编程珠玑》,《程序设计实践》

编程语言基础

.,.Additionally,,

-ThePragmaticProgrammer

此外还要知道,学习第n门编程语言的难度是第(n-1)门的一半,所以尽量去尝试不同的编程语言与编程范式,若你跟寻了前文的指引,你已经接触了:“干净”的脚本语言Python,传统的命令式语言C,以及浪漫的函数式语言Scheme/Racket三个好朋友。但仅仅是接触远远不够,你还需要不断继续加深与他们的友谊,并尝试结交新朋友,美而雅的Ruby小姑娘,Hindley-Milner语言家族的掌中宝Haskell都是不错的选择。但有这么一位你躲不开的,必须得认识的大伙伴—C++,你得做好与他深交的准备:

入门:C++Primer

[可选]进阶:

高效使用:EffectiveC++

深入了解:《深度探索C++对象模型》;C++Templates

研究反思:TheDesignandEvolutionofC++;对于C++这个NecessaryEvil,看这本书可以让你选择是成为守夜人还是守日人。

现实是残酷的,在软件工程领域仍旧充斥着一些狂热者,他们只掌握着一种编程语言,也只想掌握一种语言,他们认为自己掌握的这门语言是最好的,其他异端都是傻X。这种人也不是无药可救,有一种很简单的治疗方法:让他们写一个编译器。要想真正理解编程语言,你必须亲自实现一个。现在是入门阶段,不要求你去上一门编译器课程,但要求你能至少实现一个简单的解释器。

供你参考的学习资源:

《程序设计语言-实践之路》:CMU编程语言原理的教材,程序语言入门书,现在就可以看,会极大扩展你的眼界,拉开你与普通人的差距。

Coursera编程语言MOOC:课堂上你能接触到极端FP(函数式)的SML,中性偏FP的Racket,以及极端OOP(面向对象)的Ruby,并学会问题的FP分解vsOOP分解、ML的模式匹配、Lisp宏、不变性与可变性、解释器的实现原理等,让你在将来学习新语言时更加轻松并写出更好的程序。

:热热身,教你写一个简单的浏览器——其实就是一个javascript和html的解释器,完成后的成品还是很有趣的;接下来,试着完成一个之前在SICP部分提到过的项目:用Python写一个SchemeInterpreter

其他

编程入门阶段比较容易忽视的几点:

学好英语:英语是你获取高质量学习资源的主要工具,但在入门阶段,所看的那些翻译书信息损耗也没那么严重,以你自己情况权衡吧。此外英语的重要性更体现在沟通交流上,LinusTorvalds一个芬兰人,一口流利的英语一直是他招募开发者为Linux干活的的法宝,这是你的榜样。

学会提问:学习中肯定会遇到问题,首先应该学会搜索引擎的“高级搜索”,当单靠检索无法解决问题时,去StackOverflow或知乎提问,提问前读读这篇文章:Whathaveyoutried?

不要做一匹独狼:尝试搭建一个像这样简单的个人网站,不要只是一个孤零零的About页面,去学习Markdown与LaTeX,试着在Blog上记录自己的想法,并订阅自己喜欢的编程类博客。推荐几个供你参考:JoelonSoftware,PeterNorvig,CodingHorror

小结

以上的内容你不应该感到惧怕,编程的入门不是几个星期就能完成的小项目。期间你还会遇到无数的困难,当你碰壁时试着尝试“费曼”技巧:将难点分而化之,切成小知识块,再逐个对付,之后通过向别人清楚地解说来检验自己是否真的理解。当然,依旧会有你解决不了的问题,这时候不要强迫自己——很多时候当你之后回过头来再看这个问题时,一切豁然开朗。

此外不要局限与上文提到的那些材料,还有一些值得在入门阶段以及将来的提升阶段反复阅读的书籍。ThePragmaticProgrammer就是这样一本程序员入门书,终极书。有人称这本书为代码小全:从DRY到KISS,从做人到做程序员,这本书教给了你一切,你所需的只是遵循书上的指导。

后记

如果你能设法完成以上的所有任务,恭喜你,你已经真正实现了编程入门。这意味着你在之后更深入的学习中,不会畏惧那些学习新语言的任务,不会畏惧那些“复杂”的API,更不会畏惧学习具体的技术,甚至感觉很容易。当然,为了掌握这些东西你依旧需要大量的练习,腰还是会疼,走路还是会费劲,一口气也上不了5楼。但我能保证你会在思想上有巨大的转变,获得极大的自信,看老师同学和csdn的眼光会变得非常微妙,虽然只是完成了编程入门,但已经成为了程序员精神世界的高富帅。不,我说错了,即使是高富帅也不会有强力精神力,他也会怀疑自己,觉得自己没钱就什么都不是了。但总之,你遵循指南好好看书,那就会体验“会当凌绝顶”的感觉。


首先要想学编程,选一门合适的计算机语言就十分重要了,怎么去选择就显得尤为重要了,这要根据自己的兴趣爱好及每个语言的特性来选择,比如说PHP适合做web开发,易学习,易上手,非常流行的一门计算机语言了,我个人比较推荐php语言。

java可以做web开发,做安卓app开发也用的是java,在学习程度上上可能比php稍微难上手一点,不过也是没问题的,如果对java感兴趣可以尝试一下。

python是目前比较火的一门语言了,比较适合做人工智能领域,另外写网络爬虫类的程序,用python也是非常合适的了,看个人兴趣来选择了。

c,c++,c#这些语言就不推荐给了,特别是c#,已经是比较过时的一门语言了,即使学习好了,也不太适合去找工作,c与c++并不是十分适合初学者来学习,因此也是没必要进行考虑了,还有一些更小众的语言,更是没有必要去考虑,因此关于语言的学习就从上面3种语言去选择一门自己所感兴趣的吧!

研发搭建环境

如果选择好计算机语言,那么接下来就是研发环境的搭建了,因为只有研发环境搭建好了,才可以进行后续的编程工作,比如说PHP,那么就从网络上搜一下如何安装PHP环境,能搜出一些简单的教程,初学者按照教程一步一步来,顶多半天时间就可以把研发环境装好了,如果是java,就需要先安装jdk,进行环境变量的配置等,网上也有相关的教程,也是十分容易的,相信大家只要按照教程来做,都可以很轻易的把研发环境搭建起来的

选好视频和书籍,辅助学习。既然是零基础学习,就需要进行系统的学习,而不是到处网络零基础的知识点进行学习。

代码练习

跟随教程一个一个章节的进行学习,需要注意的一点就是不能只是去看,那样不行,要对每一个章节的知识点要亲自用代码敲一遍,运行一下试试效果才行,这样才能提高自己的动手能力,才开始会觉得有一点生疏,慢慢的就会熟练起来,逐渐会增加编程的兴趣。这个过程就是需要反复的进行练习,大量的代码练习才行。这个过程是5步中最关键的阶段了,重在代码亲自练习,对编程中有的章节不明白的地方,千万不要放过去,可以在网上找一些相关的编程交流群,参加进去,在线上咨询一些过来人,也许就可以轻松帮你解决疑问了,对你的学习十分帮助,并且整个过程也都是免费的。

项目实战

如果说基础教程都按部就班的都实践过一遍了,那么你就有一定的编程的基本功了,那么自己就可以尝试着做一些小项目,把学到的知识给串起来,进入项目实战阶段,比如说自己设计一个学生管理系统,并把它完成,如果不了解怎么设计,可以去网上搜索。慢慢就有思路了。

我也在学习这方面,视频书籍看过不少,最推荐的还是北京尚学堂的学习资料,Java.300集,Python400集,都是很经典的入门基础教程,而且是结合项目学习的,很有意思,干货满满,还都是免费的,推荐你可以去看看,相信可以带你走进变成的世界。


从零开始学编程,第一关就是要选择你所要学习的编程语言。面对着琳琅满目的编程语言,初学者常常一筹莫展,拿不定主意,不知该选哪

‘贰’ 有学者提出了"mooc可以逐步取代学校教育"的设想.然而,在线学习真的发生了吗

从MOOC到SPOC:两种在线学习模式成效的实证研究

▲马秀麟

内容提要:随着教育信息化的深入,MOOC、SPOC等新型教学理念深受教育工作者的关注。然而,基于MOOC和SPOC的学习成效到底如何?在线自主学习真的发生了吗?课题组从翻转课堂模式下的计算机公共课教学实践入手,通过采集学生在不同类型平台上学习成效的第一手数据,配以调查问卷及学习者的学习体验,论证了两种学习模式下学习成效的差异,并指出了MOOC型LSS及其学习模式的局限性,肯定了SPOC型LSS的优势。最后,结合研究结论,强调了在LSS中关注学生个性化、建构面向学生个体的实时反馈机制对在线学习效果的重要作用,并对在线学习的管理和LSS的建设提出了建议。
关 键 词:MOOC SPOC 在线学习 学习成效 学习支持系统
基金项目:本研究系教育部教改课题“面向未来教师计算思维能力培养的课程群建设”(项目编号:高教司2012-188-2-15)的系列成果之一,同时受2012年北京市共建项目“信息技术公共课教学模式改革与实践”的资助。
[中图分类号]G434 [文献标识码]A [文章编号]1672-0008(2016)04-0043-09
一、研究问题及其背景
(一)研究背景
教育信息化的深化,为教学模式的变革提供了很好的物质基础和支撑平台,基于因特网的各类新型教学模式如雨后春笋般快速萌芽并成长起来,MOOC(Massive Open Online Course,即大型开放式网络课程)教学、SPOC(Small Private Online Course,即小规模限制性课程)教学、FCM(Flipped Class Model,即翻转课堂)等不断地冲击着一线教师的大脑,迫使一线教师为适应教改目标而不断地调整着自己的教学方法和教学习惯[1]。
自2003年教育部启动国家精品课建设项目以来,国家已投巨资建设了2000多门国家级网络精品课程。与此同时,省市级精品课、校级精品课的建设数量更是不计其数,已经覆盖了学校教育的全部门类和学科。自MOOC概念出现后,哈佛公开课、耶鲁公开课等国外名校的MOOC课程开始进入国内,清华大学、北京大学和北京师范大学等名校都不约而同地启动了MOOC课程的建设。
从精品课程、MOOC课程的建设目标来看,其成果将会为全民提供最优质的学习环境和教育资源,实现“人人都能在家里上哈佛”的梦想,能够从根本上改变原有的教学模式,大幅度地提升公民受教育的水平。有的学者甚至提出了“MOOC可以逐步取代学校教育”的设想。然而,在线学习真如学者们预期的那样真实地发生了吗?
(二)在线学习真的发生了吗
随着MOOC教学模式的普及,MOOC的局限性也日益呈现出来。与精品课程建设、MOOC课程建设的轰轰烈烈相比,在线学习的效果却差强人意。从精品课程和MOOC课程的实际应用情况看,很多课程的点击率很低,大量课堂实录视频几乎无人问津。即便学籍隶属于网络教育学院,专门接受在线教育的学生,对其所在教育机构强制要求的网络课程,也远远达不到预期的访问量。这一现象导致的直接后果是:(1)学生们总是感觉基于在线学习环境习得的知识和技能不够扎实;(2)在参与招聘或职位竞争时,通过网络教育获得学历和学位的毕业生也常常遭受能力方面的质疑。
这不得不引起研究者的思考:网上的自主学习真的发生了吗?在线学习的成效到底如何?我们的学生到底需要什么样的在线学习环境?这是教学研究者必须正视的问题。在这种情形下,国外的学者又给出了一个与MOOC教学相对应的新概念——SPOC,提出了“一种面向学生个性特点的小规模私人化在线课程”理念[2]。这一理念能否解决当前在线学习所面临的困境?
(三)国内外研究现状
MOOC是以在线网络课程为基础,吸纳不同地域、不同类型和不同知识层次的学习者参与到网上学习环境中,并把这些学习者组织到一个共同的学习社区内,促使不同地域的学生通过Internet实现在不同时空的社会知识建构[3],MOOC为教育资源的共享和教育公平提供了一线曙光。因此,MOOC一经出现,就受到众多教育工作者的关注。MOOC概念于2009年开始出现,至2012年成为热点词汇。通过CNKI检索国内学术论文,发现了2000多篇与MOOC相关的文章,自2010年的2篇至2015年的1300多篇,论文的总量逐年上升,反映了MOOC在教育领域的热度。从已发表的论文看,探索以MOOC支持学科教学的研究占了很大的比例,大约占到4成;探索MOOC对当前教改所产生影响的研究大约占2成,分析MOOC应用技术的研究也有一些,大约占1成左右;还有学者从MOOC特色的视角分析了MOOC在学习支持方面的利与弊[4]。总之,多数学者都肯定了MOOC在教学中的价值,并从不同的视角开展了比较系统的研究。
SPOC则是近两年出现的新概念,它是在MOOC基础上,针对MOOC的不足而提出的在线学习形式。SPOC强调,要针对学生的个性化特点开展教学,向学生提供小规模且私人化的在线学习环境。它是以满足面向学生的个性化特征,并有针对性地对学生进行管理和控制的一种在线课程形式。对SPOC模式的探索,自2014年开始出现,在2014年至今的2年时间中,只有60多篇文章发表,而且多数文章都紧密地与MOOC概念结合在一起。其中,康叶钦于2014年发表的文章《在线教育的“后MOOC时代”——SPOC解析》[5]和徐葳等于2015年发表《从MOOC到SPOC——基于加州大学伯克利分校和清华大学MOOC实践的学术对话》[6]都产生了比较大的影响,反映了SPOC研究的主要观点、特征和研究视角。而贺斌、曹阳的论文《SPOC:基于MOOC的教学流程创新》则阐述了以MOOC为基础的SPOC的新特征[7]。
二、研究设计与实施
(一)研究流程的设计
思辨的方式不能论证MOOC和SPOC对在线学习效果影响水平的问题,只有基于一线学生的个体体验并借助其中学习资源,真正参与到学习活动中的质量与频次等客观数据,才能较科学地论证“学生是否已借助学习平台真正地开展了深度学习?”“学习平台(MOOC和SPOC)是以何种方式为学生实现知识建构提供支持的?”“学习平台的类型是否会对学生的最终学习效果产生较大的影响呢?”等问题。
为此,本研究制定了以下研究流程:首先,分别按照MOOC和SPOC规范,组建学习支持平台,并安排知识水平和学习风格没有显着性差异的两组教学班,分别基于这两类平台展开学习。然后,针对上述两组教学实践,从三种不同的渠道获得其第一手数据。其次,利用数据分析手段,探索影响学习效果的关键因素。最后,基于前述研究结论,总结其中存在的问题和疑惑,开展第二轮的教学实践,以便对研究结论进行验证,保证研究的严谨性和科学性。
在这一过程中,数据的采集非常关键,其覆盖面和客观性对研究结论具有重要影响。本研究所采集的数据主要包含三个方面的内容:(1)来自调查问卷的数据和访谈结论,获取学生对两种教学平台的主观体验;(2)采集两个年度的完课率数据,进行学习成效的总结性评价:利用平台跟踪学生使用教学视频和自测习题的情况,获得客观数据,以便进行学习成效的过程性评价;(3)采集学生们的考试成绩和学业作品,作为评测学习成效的最终客观数据。
(二)相关概念界定
1.LSS的概念
LSS即Learning Support System,也叫Learning Management System,即学习支持系统,泛指可以为学习活动提供支持的网络平台,此平台通常为“浏览器—服务器”模式,至少包括学习资源管理、学生管理、作业管理等功能。MOOC教学和SPOC教学的开展,都需要植根于LSS平台之中。在本研究中,把基于MOOC理念的LSS称为MOOC型LSS,而基于SPOC理念的LSS则简称为SPOC型LSS。
2.MOOC的概念
MOOC是Massive Open Online Course的缩写,其含义为大型开放式网络课程。MOOC以基于因特网的在线课程为基础。借助互联网的开放性为学生提供学习资源,从而为学生提供一个不限时间、不限地域的学习环境。由于,MOOC通过因特网进行传播,它对参与学习的学生是没有限制的,因此,MOOC是一种开放的教育形式。另外,处于MOOC平台中的学生多数采取异步学习模式,由学生自主选取学习资源并确定自己的学习进度,所以它又是一种典型的“以学为中心”的、基于e-Learning理论的学习模式[8]。在具体教学实践中,MOOC学习资源和MOOC教学活动的组织都必须借助于LSS平台,以MOOC理念为指导的LSS被简称为MOOC教学平台,或MOOC型LSS。
开放性是MOOC的最大优势。MOOC的出现,能够把世界范围内、想学习某一内容的学生组织到一个共同的学习社区中,从而促使他们超越地域障碍,通过因特网实现不同时空的社会性知识建构[9]。在基于MOOC课程的学习社区中,尽管参与者的身份千差万别,学习习惯和认知风格也很不相同,但他们都是基于对同一课程内容的兴趣而组织到这个虚拟共同体之中的。
3.SPOC的概念
伴随着MOOC教学实践的推广,MOOC的局限性也日益明显。对MOOC而言,以不设“先修条件”和不设“规模限制”为特征的开放性,既是MOOC的优势,又是其局限性所在。香港大学的苏德毅(Peter ESidorko)教授分析了MOOC不足,他指出,由于不设先修条件,导致在MOOC课程中,学生的知识基础参差不齐。如果有过多知识基础薄弱的学生参与到MOOC课程中,就会导致MOOC的完课率很低,这不仅损害了学生的自信心,也影响了教师的教学积极性[10]。
基于MOOC存在的问题,促使教育工作者进一步反思在线学习的组织模式和管理形式,“必备的知识基础”、“规模限制”和“个性化支持”成为在线课程开发者必须重新思考的问题。基于此,福克斯教授提出了SPOC的概念。SPOC是Small Private Online Course的简称,它是相对于MOOC概念而提出来的,其中“Small”相对于MOOC中的Massive,Small限制了学生的规模,要求每个学习社区的参与者不可过多,这有利于教师管理;而Private则相对于Open而言,是指课程内容与学生的匹配性、针对性,即对学生设置必要的准入条件,只有知识基础达到基本要求的申请者才可被纳入到SPOC课程中[11]。
梳理SPOC的成功教学案例,发现多数SPOC课程主要面向校园内的大学生,只有少量SPOC课程面向校外在线学习者。对校园内的大学生而言,SPOC课程主要以课堂教学与在线学习相结合的方式开展,通常借助讲座视频或微视频实施翻转课堂教学,并辅以实名的网上交互和在线评价;而面向社会的SPOC课程,需要预先明确设定的申请条件,并依据申请条件从申请者中选取学生。在这个过程中,还需要注意控制参与者的人数不能超过预设的规模。不论采用哪种模式,SPOC课程都强化了对入选者的管理和激励,要求入选者积极参与在线讨论,保证学习时间,认真完成各类习题和测试,并参与规定的考试等[12]。因此,SPOC教学,更强调学习支持的个性化、小众性,关注了对学习者的管理和激励[13]。
4.SPOC与MOOC的对比
虽然在技术平台、学习资源类型、课程体系组织结构等方面,SPOC和MOOC并无太大差异,但在教学设计与教学管理理念、教学流程组织、教学运行方式等方面,SPOC都发生了较大的变革[14]。因此,有学者认为,SPOC是对MOOC的继承、完善与超越。对比SPOC和MOOC的特点,发现两者的差异主要体现在以下几个方面,如表1所示。

(三)研究的实施过程
1.前期准备
首先,在“北师大计算机基础课教学服务平台(简称为BNUCEN-LSS)”中,为《动态网站设计与开发》课程开发完备的网络课程。在此网络课程中,除了向学生提供三类优质的视频资源(微视频、课堂实录视频、同行教师的同类视频)外,还向学生提供了自测与自诊断试题、操作素材等辅助性资源。与此同时,BNUCEN-LSS为学生提供了交流论坛、作业发布与管理等公共模块。另外,为了监控学生的学习效果,还专门在BNUCEN-LSS中开发了学习监控模块,其能够利用平台自动地记录学生每次观看视频资源的时间长度,以便掌握学生的实际学习时长。
其次,在相关文献和理论的指导下,设计面向学生的调查问卷。调查问卷以单选题为主,以五级量表的形式呈现,并借助小范围调查和德尔菲方法确保调查问卷的信度和效度。通过调查问卷获取学生对自身学习情况的自我评价。
2.具体的实施过程
在2013年开设《动态网站设计与开发》课程时,基本遵循MOOC的教学理念,组织整个教学过程。采取了“自由注册、匿名使用教学平台,向全校学生开放课程”的模式组织教学。而2014年的教学,则基本遵循SPOC的理念来组织教学活动。首先,对选课学生的专业和年级进行了限制,只允许理科专业(具有C语言设计基础)的大二学生选修本课程;其次,获得修读资格的学生必须在BNUCEN-LSS中实名注册,只有实名用户才能访问《动态网站设计与开发》课程的相关学习资源,并须借助BNUCEN-LSS进行自诊断或参与各类讨论。
对比两个年级的教学模式,其区别主要体现在三个方面:(1)指导理念的不同。2013年的教学强调开放性,“开门教学”,对注册成员的知识条件和专业条件不做任何限制;2014年的教学则强调内容的“适用性”,在选课阶段就关注了课程内容对注册学生的适用性水平,对于不适用本课程内容的学生,不予通过。(2)学习资源的针对性不同。2013年的教学活动以MOOC理念为指导,以课堂实录视频为主,并配套微视频组织教学,学习资源的数量非常丰富,能够适应不同类型、不同水平的学生选用。2014年的教学活动则以SPOC思路为指导,以当前正选学生为基准,对学习资源进行了筛选,剔除了难度过低和难度过高的资源,使资源的适应性和针对性较强。(3)教学过程中的管理模式不同。在2013年的教学过程中,对注册成员的学习过程不做任何约束,强调学生的自主性,鼓励学生们自主学习、开展自由组合的协作学习。因此,这些学生对LSS平台的使用是“匿名”的;而在2014年的教学过程中,要求学生实名使用LSS平台,而且教师也参与到LSS的论坛和讨论过程中[16]。
三、数据分析及结论
(一)不同类型学习模式下的完课率
在2013年的课程中,共有329名学生在教学平台申请注册,全体申请都被教师批准。至第3周,有192名学生退出(主要是中文、历史和哲学等纯文科院系的学生),获得正选学生137人;至第9周(期中),又有60名学生退出,期末共有39名学生参加了期末考试,除1名学生不及格以外,有38名学生完课。最终完课率仅为11.5%。
在2014年的课程中,由于事先规定“只允许理科大二学生选修此课程”,所以共有64名学生申请注册本课程,老师批准了59名(有5名体育学院的学生因为不具备选修课知识而没有获得批准),至选课周结束(第3周),有52名学生确定选修此课程。期末共有51名学生参加期末考试,51名学生都获得了及格以上的成绩,即有51名学生完课。所以,在正选学生中,完课率达到98%。
事后访谈发现,文科专业的很多学生都对网页设计和动态网页有很大的兴趣,有学习《动态网站设计与开发》课程的内在动机,因此其选课积极性很高。但在注册了该课程之后,就会发现由于先修课程不足,导致自己难以胜任课程内容,最后只能退选。另外,还有部分学生在选课开始时很有兴趣,积极性很高,但由于个体的时间管理能力不强,导致其前期在本课程上的投入不足,只能在期末考试前“临时抱佛脚”。这部分学生的最终退课率也非常高。
(二)不同类型学习模式下的视频点播率
有鉴于2013年的课程是以MOOC的思路来组织的,其特点为:(1)“资源丰富,尊重学生的个性化学习习惯”、“学生匿名使用学习平台”;(2)在学生管理方面,教师只是以公告的方式要求学生自主点播教学平台内的微视频或课堂实录视频,并没有把学生点播视频的质和量与期末的综合评价挂钩。
由于2013年的教学效果不好,所以本研究已在2014年改变了教学模式,主要做了以下调整:(1)在教学资源中剔除了过难和过易的资源,去掉了课堂实录型的长视频,仅保留了面向案例的微视频;(2)对选课学生进行了限选和资格审查,要求学生实名使用LSS,并且向学生明确指出:学生观看视频的时长、学生参与教学论坛的质与量均被LSS自动记录,而且作为期末综合评价的子指标使用。2013-2014年学生点播微视频的情况,如表2所示。

从表2可以看出,在2013年的教学中,课堂实录型视频的点播率很低,点播人次尚达不到每人一次(每个课堂实录视频被每个学生点播一次的总次数应大于2192次),而且完整点播整个45分钟长视频的总次数竟然为0,即在16讲的45分钟课堂实录视频中,137名正选学生竟然无人完整地看过1次课堂实录视频。而微视频的情况稍好,对101个面向案例的微视频中,137名学生的完整观看次数为2152次,超过50%播放时长的点播次数为6192次。而在2014年的教学中,该情况比2013年有了很大的好转,尽管正选学生数不到2013年学生数的一半,但“完整播放次数”和“超过50%时长的播放次数”都比2013年有很大提升。这说明:在总点播次数差距不大的情况下,2014年学生们的点播质量有较大的提升。
为了更好地对比两个年度的视频点播情况,本研究对表2中的点播次数进行了“均值化”处理,得到如表3所示的数据。均值化算法为:对于表2中的总点播人次,依次除以视频个数和正选学生的人数,就获得了如表3所示的点播均值数。

从表3的“均值化”数据可以看出,2014年学生的点播质量和总数量都比2013年有了很大的提高,特别是在微视频的“完整观看人次”项,接近2013年的5倍,在“超过50%时长的观看人次”指标项,达到了2013年的3倍有余。这说明:在较好的管理和监控机制下,如果辅以针对性较好的资源支撑,学生的学习积极性和学习质量都会有很好的提升。
(三)不同类型学习模式下有效交互的比率
协作、交流与分享是在线学习的重要手段,对于学生们实现社会性知识建构具有重要意义。对比2013年和2014年学生在BNUCEN-LSS中对《动态网站设计与开发》课程发帖与回帖的情况,可以从侧面反映出学生参与协同知识建构的层次和深度。
如果把与课程内容相关的主题帖和回复帖定义为“有效帖子”,其他类型的帖子称为“无效帖子”,那么。根据2013年和2014年学生参与在线讨论的情况。主要获得了如表4和表5的数据。

从表4可知,2013年内学生发帖的数量虽然也不少,但有效帖子所占的比重较低,仅有6.63%。而在2014年,有效帖子的数量已占发帖总量的93.96%,这表示在论坛的发帖中,绝大多数帖子都是与课程内容相关的有效帖子。另外,2013年主题帖的数量比较大,讨论的内容也非常分散。而在2014年帖子的聚焦性较高,每个主题帖的回复量都比较高。
为了进一步掌握两类教学模式下学生们在线交互的深度和质量,笔者对BNUCEN-LSS内部的深度帖(回复次数较高的帖子)进行了跟踪,分别提取了两类教学模式下回复量最高的3个帖子,获得的数据如表5所示。
从表5可知,在2013年中,回复量排在前3位的3个主题帖大多与课程内容关系不大,而且其回复人多为游客(不是本课程的学员),而且回复内容与课程内容基本无关。而在2014年的教学中,回复量排在前3位的帖子都与课程内容密切相关,而且教师发布的主题帖成为回复量最高的帖子,体现了教师在讨论中的主导作用[17]。
(四)通过问卷调查和访谈所获得的信息
针对2013年学生完课率低而且教学效果不佳的状况,通过两轮大范围的问卷调查,笔者掌握了学生对基于MOOC平台开展翻转课堂教学的看法,然后选择了10位于期末考试前退选的学生,邀请他们参与了访谈,了解他们对MOOC教学模式的看法及最终退选的原因。
1.问卷调查及其结论
通过问卷调查,收集学生对以MOOC平台开展教学的看法。在完成了数据分析之后,找到了得分最低的三个维度,如表6所示。

2.基于访谈所获得的信息
学生甲:我是学习中文的,对网页设计非常有兴趣,就想学会做出“高、大、上”的网页,哪里知道还要编程呢。我以前也没有学过C语言,到了编程部分,压力越来越大,最后就只能放弃了。
学生乙:之所以最后退选,就是怕挂科。选课时,看到老师的网站上有各种视频,心里特别有底。开课后,总觉得反正有视频可看,也不用太着急,加上您也没有督促。于是,每次上机实践课上都先忙其他的事情。突然就到了期末,实在赶不上了,就只能放弃了。
学生丙:没有压力,就没有动力。我是自己给耽误了。不过,如果老师多督促些,可能就过了。
学生丁:我原来的计算机底子比较薄,本想借这门课程来补补。但在学习中,我觉得最大的困难是在学习平台中找不到所需的东西。在机房做网页时,常常会因为一个很小的细节而导致网页出错,这时却很难找到纠正错误的办法。尽管平台中的资源很多,但不知道哪个是对症的,如果一个个地找,又没那个耐心。慢慢地,就失去信心了。
3.基于问卷和访谈所获得的主观性结论
通过调查问卷和访谈,笔者发现导致2013级大量学生不能完课的原因主要集中于五个方面:(1)在MOOC型LSS中,资源过多、过滥,资源的组织方式缺乏针对性。在学习过程中,学习者不易获得有效的学习支持;(2)因MOOC型LSS采用匿名系统,而疏于对学生有针对性地监督、激励。而缺乏教师监督和激励的大多数学生都不能持续地保持高水平的学习动机;(3)部分学生的自我管理、时间管理能力不强。在没有教师监督和提醒的匿名MOOC型LSS中,由于他们经常拖延学习,日积月累下来,就会跟不上正常学习进度;(4)在学生匿名、教师“隐性主导”的MOOC型LSS中,学生的班级归属感不强,参与交互和讨论的积极性不高,交互的质与量都较差;(5)部分学生因不了解课程的性质、知识要求而仅凭兴趣选课,在选课后则会因不能胜任课程对先修知识的基本要求而退课[18]。
四、研究结论与建议
(一)MOOC教学的不足与局限性
自2009年出现MOOC的概念,它就受到众多学者和教育管理者的重视。然而,随着MOOC教学的应用与普及,其不足也逐渐显现出来。

‘叁’ 人工智能之模式识别|北京理工大学|Mooc|笔记|更新中

识别的基础是认知
认知Cognition:获取某种事物的特征——概念抽象
识别Re-cognition:根据特征决定某个具体的事物是不是某种事物——概念归类
模式:一类事物的共同特征
识别:对事物进行概念归类
模式识别:依据事物的特征进行概念归类

特征
相似性

特征空间
向量空间
集合空间

通过训练(学习)得到分类器模型参数

两种模式:有监督学习和无监督学习——从训练集中学习

对于每一个类别都给定一些样本——形成一个具有类别标签的训练样本集——分类器通过分析每一个样本去寻找属于同一类样本具有哪些共同特征——从训练集中学习到具体分类决策规则——有监督的学习

分类器通过有监督学习模式学习到的每个类别样本的特征就是关于某个类别概念的知识—— 学习过程就是认知过程

样本标签如何得到?——人来给定

有监督学习——从人的经验中学习分类知识——智能水平有上限

给定训练样本集但没有给每一个样本贴上类别标签——属于同一个类别的样本之间的相似程度会大于属于不同类别的样本之间的相似程度——根据相似程度的大小,按照一些规则把相似程度高的一些样本作为同一类——将训练样本集的一些样本划分成不同的类别——再从每一个类别的样本中去寻找共同特征,形成分类决策规则——无监督学习

无监督学习——自主地从数据所代表的自然规律中学习关于类别划分的知识——分类器能达到更高的分类水平——未来模式识别发展的主要方向

属于同一个类别的样本之间的相似程度会大于属于不同类别的样本之间的相似程度——不同类样本之间的相似度越小,分类决策规则的裕量也就越大

这样可以作为评判用于监督学习的带标签训练样本集以及作为无监督学习结果的样本集,它的优劣程度的一个指标,称为“紧致性”准则,即:紧致性好的样本集样本的类内相似度远大于类间相似度。

若要进行定量评判——确定如何度量相似性——可以设置多种指标——如:距离指标(最常用,距离可以定义在任意集合上,只要去计算满足三条标准:1.正定性:距离是个大于等于0的正实数,当且仅当自己和自己计算距离时才为0;2.对称性:样本之间的距离值计算与计算顺序无关;3.传递性:满足三角关系——两个样本之间的距离一定小于等于分别于第三个样本之间的距离之和。||在向量空间中可以定义欧氏距离、曼哈顿距离、切比雪夫距离等|| 非向量空间也可以定义距离,如:两个字符串之间的编辑距离也是一种合法的距离定义)非距离的相似度量标准(如:余弦相似度——使用向量空间中两个向量之间的夹角来表达相似程度:cosθ=x T y/||x||·||y|| ;皮尔逊相关系数Pxy=cov(x,y)/∆x∆y;Jaccard相似系数)

如果我们希望有紧致性好的样本集——那么就希望能有有效的信息能够将不同类的样本很好地区分开——增加特征的种类==增加特征的维度——特征的维度越多,用于识别的信息就越丰富,就有越多的细节信息可以将不同的样本之间的相似度降低,提高样本集的紧致性

不需要无限制地增加,只要不断地增加模式识别问题中地特征维数会产生维数灾难(cruse of dimensionality)——当一个问题描述地维度不断增加时会带来计算量剧增与解法性能下降等严重问题——模式识别中的维数灾难:随着特征维度的增加分类器的性能将在一段快速增加的区域后急速地下降并且最终无法使用

当特征空间以同样密度能够容纳的样本总数呈指数增长时,而如果给定样本集中的样本数量没有同步按照指数规律增加的话,那么问题越往高维度特征空间映射时样本集中的样本就越稀疏,从而使得样本集的紧致性越来越差,因此分类器的性能越来越差。

要解决维数灾难问题或者要同步地大量增加样本集样本的数量,难以实现,或者尽可能减少问题所使用的特征维度。

在降低维度的同时尽可能地提升每一个维度在分类中的效能,从而使模式识别问题在较低的维度下解决。

特征生成+特征降维 重点领域——其结果直接影响分类器性能的好坏

我们期望分类器能够从训练集样本中发现所要分类的各个类别的普遍特点即找到最优的分类器,使分类器在经过训练后不仅能将训练集中的样本正确分类,而且对于不在训练集中的新样本也能够正确地分类

因为有误差所以不能同时满足【正确分类样本集】和【正确分类未知新样本】

采集数据时由于数据采集方法的问题或者存在噪声干扰得到的样本特征会存在误差甚至会出现“异常数据”

如果我们要求分类器必须正确分类则会在分类规则上出现“失真”,从而在面对新的未知样本进行分类时出现错误(使分类器泛化能力降低)====称为分类器训练过程中的“过拟合”

“结构风险最小化准则”

分类决策规则是从自动计算中获取的而不是人工设定的

设计模式识别系统就是设计分类器的模型、所使用的的特征和分类器参数的调整算法

通过采集转换得到计算机能接受和处理的数据

模式采集:传感器、变送器、模数转换

得到的数据:待识别样本的原始信息(包含大量干扰和无用数据)

通过各种滤波降噪措施降低干扰的影响,增强有用的信息,在此基础上生成在分类上具有意义的各种特征

得到的特征:可以仍然用数值来表示,也可以用拓扑关系、逻辑结构等其他形式表示

经过一、二环节获得的模式特征维数都是很大的

主要方法:特征选择和特征提取

特征选择:从已有的特征中选择一些特征,抛弃其他特征

特征提取:是对原始的高维特征进行映射变换,生成一组维数更少的特征

分类器训练是由计算机根据样本的情况自动进行的,分类有监督学习和无监督学习

在分类器训练结束后,对待分类的样本按照已建立起来的分类决策规则进行分类的过程,在待分类的样本在进行分类决策之前,与训练样本一样要完成模式采集、预处理与特征生成、特征降维等环节的处理,还要持续不断地对分类决策的结果进行评估,已改进分类器的性能。

模式识别算法:统计模式识别(主流)、结构模式识别

统计模式识别:将样本转换成多维特征空间中的点,再根据样本的特征取值情况和样本集的特征值分布情况确定分类决策规则。

线性分类器:是最基本的统计分类器,它通过寻找线性分类决策边界来实现特征空间中的类别划分

贝叶斯分类器:它的决策规则是基于不同类样本在特征空间中的概率分布以逆概率推理的贝叶斯公式来得到类别划分的决策结果

最近邻分类器:把学习过程隐藏到了分类决策中,通过寻找训练集中与待分类样本最相似的子集来实现分类决策

神经网络分类器:来源于对生物神经网络系统的模拟,它的本质是高度非线性的统计分类器并且随着计算机技术的发展从浅层网络向深层网络不断演化

统计聚类分析:是无监督学习的典型代表

聚类分析:是无监督学习的典型代表,目前多采用统计学习的方法。

模糊模式识别:不是一独立的方法,而是将模糊数学引入模式识别技术后对现有算法的模糊化改造,它在更精确地描述问题和更有效地得出模式识别结果方面都有许多有价值的思路。

特征降维:也不是独立的模式识别算法,但是是完成模式识别任务的流程中不可缺少的一个步骤,特征降维通过寻找数量更少对分类更有效的特征来提升整个模式识别系统的性能。

结构模式识别:

结构聚类算法:将样本结构上某些特点作为类别和个体的特征通过结构上的相似性来完成分类任务。

句法模式识别:利用了形式语言理论中的语法规则,将样本的结构特征转化为句法类型的判定,从而实现模式识别的功能。

一个典型的基于视觉的模式识别工程问题

多分类问题

模板匹配基本原理:为每一个类别建立一个或多个标准的模板,分类决策时将待识别的样本与每个类别的模板进行比对,根据与模板的匹配程度将样本划分到最相似的类别中。

建立模板时依赖人的经验所以适应性差

“分类决策边界”

判别函数G(x)=0

如果判别函数是线性函数则称为线性判别函数

线性判别函数+对应的分类规则=线性分类器

如果特征空间是一维的,线性分类器的分类决策边界就是一个点

如果特征空间是二维的,线性分类器的分类决策边界是一条直线

如果特征空间是三维的,线性分类器的分类决策边界是一个平面

如果维度很高,从数学上可以得到分类决策边界是一个超平面

是不是任何一个模式识别问题都可以找到线性分类决策边界呢?

给定一个样本集,它是线性可分的吗?

涉及问题:样本集的线性可分性

如果一个样本集,它的各个类别样本的分布区域是相交的,那么肯定是线性不可分的;如果各个类别样本的分布区域是互不相交的,并且都是凸集,那么它一定是线性可分的;如果互不相交但有的是凹集,也不一定是线性可分的,需要找出凹集区域最小的凸集包络线称为凸包,如果凸包都不想交,那么样本集才是可分的,否则不可分。

线性可分性——异或问题

非线性分类问题转化为线性分类问题:

当我们将一个模式识别问题从低维特征空间映射到高维特征空间时,就将一个非线性分类问题转化为一个线性分类问题。======》这种方法被称为“广义线性化”

需要多个线性判别函数——用二分类问题的组合来确定多分类的分类决策规则

根据一定的逻辑关系构成多分类的线性分类器

绝对可分:对于样本集中的每一个类都有一个线性判别函数,可以把属于这一类和不属于这一类的样本分开。——带来的不可识别区域很多,整体分类器的性能不好。

两两可分:判别函数并不是用于判别属于某一个或者不属于某一个类的样本,而是在两个特定的类别中选边站。减少了不可识别区域,提升了线性分类器的性能。

如果有k个分类,两两可分的线性判别一共需要C2k个判别函数,绝对可分的线性判别需要k个判别函数

最大值可分:样本集中每一个类别对应有一个判别函数,而一个样本将被划分到取值最大的那个判别函数所对应的类别中。——不可识别区域消失,判别函数的数量也仅仅与样本集中的类别数量一样。

如何求最大值可分的判别函数?——工作量大

判别函数是样本到决策超平面距离远近的一种度量

样本x到决策边界的距离r正比于判别函数G(x)的值,判别函数的符号代表了距离r的符号,表示该模式位于决策边界的正侧还是负侧

权向量w仅代表决策超平面的法向方向,长度不会影响决策边界在特征空间中的位置,可以取w为1,此时判别函数的值就是样本到决策边界的距离。

线性分类器——由线性判别函数及相应道德分类决策规则构成的

线性判别函数如何得到?——如何设计线性分类器?——训练问题

线性分类器学习/训练的一般思路:

G ij (x)=w T x+w 0

w T 权向量

w 0 偏置量

解区域中寻找最优解

1.设定一个标量的准则函数J(w,w 0 ),使其值能够代表解的优劣程度,准则函数值越小,说明解越符合要求,越好。

2.通过寻找准则函数J(w,w 0 )的极小值,就能找到最优的一个解,是准则函数取得极小值的增广权向量w,这就是最优解。 (w,w 0 *

训练集数据的规范化

1.了解感知器模型

感知器(perception)模型是一种神经元模型

多路输入+单路输出

将所有输入信号加权求和后于一个阈值相比较,如果大于阈值,则神经元输出为1;小于等于阈值,则神经元输出为0

没有反馈与内部状态

只能依靠输入信号是否超过阈值来决定是否激活神经元的输出

如果把感知器的输入信号看作是一个待识别样本的特征向量,感知器的数学模型就构成了一个典型的线性分类器,可以做出非常明确的二分类决策

通过样本集使感知器能够学习到输入权重值和输出的阈值

感知器是一个通过输入加权和与阈值的比较来决定是否激活输出的神经元模型,这是一个线性分类器,输入的权构成了线性分类决策边界的权向量,激活输出的阈值 heta就是分类决策边界的偏置量w 0

求解目标:对所有样本,都有w T x > 0

感知器算法设定准则函数的依据:最终分类器要能正确分类所有的样本

所以J设定为所有错分样本的判别函数值之和

X 0 是所有错分样本的集合

只要存在错分样本,准则函数一定大于0,只有当所有样本正确分类了,准则函数值才能取得极小值0

梯度下降法

w(k+1)=w(k)-p(k+1)∆J(w(k))

对于线性可分的两类问题其分类决策边界为一n维特征空间中的超平面H

一般情况下会有无穷多个解,当我们确定一个解所对应的权向量w,超平面的斜率和朝向就是确定的了,可以在一定范围内平移超平面H,只要不达到或者越过两类中距离H最近的样本,分类决策边界都可以正确地实现线性分类,所以任何一个求解得到的权向量w都会带来一系列平行的分类决策边界,其可平移的范围具有一定的宽度,称为分类间隔(Marigin of Classification)。

当我们改变w,使分类决策边界的斜率和朝向随之变化时,我们得到的分类间隔是不同的。

分类间隔越大,两类样本做决策时的裕量也就越大

找到可以使分类间隔最大的最优权向量 w*——支持向量机的出发点

分类间隔是由距离分类决策边界最近的少量样本决定的,这些样本被称为“支持向量 support vector”_支撑起了线性分类器在最大分类间隔意义下的最优解

支持向量机的优化求解目标是求取能带来最大分类间隔的权向量w

分类间隔是支持向量到分类决策边界的2倍

Max d = max 2|G ij (x)|/||w|| 支持向量机采用令|G ij (x)|=1 =>min ||w|| 将求取最大的d的问题转化为求取权向量的长度最短的问题——为了方便进行二次优化——=>min 1/2 ||w|| 2

求取优化目标要求两类中的所有样本到分类决策边界的距离都应该比支持向量更大,其他样本的判别函数绝对值都需要大于1,即不等式约束条件为:图

支持向量机采用拉格朗日乘子法将其转化为无约束优化问题来求解,即通过将所有约束条件与拉格朗日乘子相乘后添加到优化目标中,在求取拉格朗日乘子最大值的条件下,求取最短的权向量w——凸规划问题——存在唯一解——其充要条件可以通过拉格朗日函数分别对权向量w和偏置值w0求偏导来得到,即满足这样的条件——得到权向量的表达公式

KKT条件

经验风险:训练之后的分类器的错误分类样本比例

经验风险最小化 R_emp==o

只有当训练集的样本数趋近于无穷,训练集中样本的分布趋近于样本的真实分布时,经验风险才会趋近于真实样本分类的风险

为了从根本上解决“过拟合”问题——提出“结构风险最小化SRM”min(R(w))

结构风险:在一个训练好的分类器面对未知样本时分类错误的概率

泛化误差界:R(w)<=Remp(w)+φ(h/l) 置信风险 l是训练集中的样本数,h为分类器形式的vc维,而φ置信风险的具体计算公式:图

如果分类器函数形式已经确定,则样本数越大,置信风险也就越小;如果训练集中的样本数量不够多,那么结构风险的大小就受置信风险大小的很大影响,而此时置信风险的大小取决于分类器函数形式本身具有的VC维,函数的VC维h越大,则置信风险也就越大,则相应的结构风险也就越大,分类器的泛化能力越差。

什么是VC维?一类函数所具有的分类能力

它的值是一类函数能打散两类样本集中最大样本数量

分类器函数形式的阶次越低,其VC维也就越小,在样本集数量有限的情况下,训练后的分类器结构风险就越小,泛化能力越强。

(支持向量机是阶次最低的线性函数)——是支持向量机在不需要大量训练样本的情况下也能取得泛化能力特别强的分类器训练结果的主要原因

所以支持向量机是应用结构风险最小化准则的一个结果

线性不可分问题:1.异常点干扰 2.非线性分类

线性支持向量机是把具有最大分类间隔的最优线性判别函数的求解转化为求解最短权向量的二次规划问题

异常点的判别函数值距离一定小于1

可以在约束条件中减去一项正数kesei,使判别函数的绝对值允许小于1,kesei就称为松弛变量

把kesei也作为优化目标,希望kesei越少越好,越小越好。

最理想的情况:绝大多数支持向量外侧的样本包括支持向量对应的松弛变量都该为0.只有少数支持向量内侧才有一个尽可能小的松弛变量。

因此,可以把所有松弛变量的和值也作为优化目标的一个分项,即在原来的最短权向量的二次优化目标基础上再加上一项C乘以所有松弛变量的和。C为惩罚因子,表示对分类器中存在异常点的容忍程度。C越小,松弛变量的存在对整体优化过程的影响越小,对异常点的容忍度越高。如果C取0,约束条件被破坏。

软间隔的支持向量机:使用松弛变量和惩罚因子的支持向量机

采用——广义线性化(把低维空间中的非线性问题往高维映射,从而转化为一个线性分类问题)

阅读全文

与mooc学习算法相关的资料

热点内容
有pdf却打不开 浏览:460
七星彩软件app怎么下载 浏览:217
32单片机的重映射哪里改 浏览:816
为什么前端不用刷算法题 浏览:708
对称加密系统和公钥加密系统 浏览:428
历史地理pdf 浏览:606
物联网云服务器框架 浏览:648
sybaseisql命令 浏览:183
android权威编程指南pdf 浏览:663
哪些软件属于加密软件 浏览:646
文件夹75丝什么意思 浏览:470
最便宜sop8单片机 浏览:966
图解周易预测学pdf 浏览:420
c盘莫名奇妙多了几个文件夹 浏览:171
贵州花溪门票优惠app哪个好 浏览:803
如何说话不会让人有被命令的感觉 浏览:440
哪里可下载湘工惠app 浏览:265
福特python 浏览:312
pdf转换成word表格 浏览:353
无线远端服务器无响应是什么意思 浏览:672