1.计算机专业本科生做毕业论文一般用什么算法
一个程序的核心在于算法。比如说打开一个软件和运行一个软件的速度在计算机硬件性能相同情况下,软件的算法起到了几近决定性作用,所有的计算机软件和硬件的编程都是需要算法的,就算一个hello world程序虽然我们编时候没有用到算法但是在编译他和运行再屏幕显示的时候就是算法了。算法是计算机乃至自然界的核心,如果知道人脑的算法,就可以制造出人工智能的软件。
算法太多,也就不全部列举出来了,具体的还有用法,你自己看下书或去网上找下,都应该可以找到的:比如:贪心算法,蚁群算法,遗传算法,进化算法,基于文化的遗传算法,禁忌算法,蒙特卡洛算法,混沌随机算法,序贯数论算法,粒子群算法,模拟退火算法等等。
2.我准备如何完成毕业设计
毕业设计(graduation project)是指工、农、林科高等学校和中等专业学校学生毕业前夕总结性的独立作业。
是实践性教学最后一个环节。旨在培养学生综合运用所学理论、知识和技能解决实际问题的能力。
在教师指导下,学生就选定的课题进行工程设计和研究,包括设计、计算、绘图、工艺技术、经济论证以及合理化建议等,最后提交一份报告。应尽量选与生产、科学研究任务结合的现实题目,亦可做假拟的题目。
学生只有在完成教学计划所规定的理论课程、课程设计与实习,经考试、考查及格后始可进行。是评定毕业成绩的重要依据,学生通过毕业设计答辩,成绩评定及格才能毕业。
3.我准备如何完成毕业设计
前期工作 开题后不久就是圣诞节,我到荷兰度假了一趟,准备放松心情完回来之后大干一场。
然而剧情就在这里来了个一百八十度转弯。首先是算法A在我的数据库上运行起来有很多问题,开题时以为这部分很快就能完成,现在需要对数据库重新整理。
再者是算法B比我想象中的难实现得多,我从第一步搭配环境就卡住了。然而更悲剧的是,我的技术指导老师在开年后,因为家里有事,突然请假回国了,一直到三月底才回来。
另一位可以请教的学长石头也不在芬兰。毕设进度停滞不前。
再加上由于我还有最后两门课程在上,所以今年三月份之前,毕业设计的进度基本为零。和我同届的朋友们,一个叫豆豆,已经基本完成了毕设,开始了论文的撰写。
一个叫kiki,毕设也在进行中了。只有我,真正的算法部分还没开始。
当时的我已经有些焦虑了。在这个阶段虽然进度缓慢,但是我也有成果,一是把所有课程修完了,二是把毕业设计需要的这个数据库终于整理好。
因为这个数据库包含1800多个录像的片段,所以我处理起来花费了很久。相当于原本计划的ABC三个阶段的基础上,还突然增加了一个数据库处理阶段。
在三月份之前能处理好数据库,我觉得已经是万幸了。此外在二月份石头学长回来之后,我同时把算法A也向他请教学习了一下,提前熟悉改进,以便能快速实现阶段A。
正式开始 所以我的毕业设计正式开始算是三月份了。一方面我的课程全部上完了,另一方面我的技术指导老师也回来了。
然而五月底就要交论文了,所以我只有三个月的时间实现算法。留给我的时间很有限。
如果想毕业设计按时完成,我的压力就很大了。显然,我的技术指导老师也意识到了这个问题,也许是为了让我时间更充裕地完成论文,不让我压力那么大。
他从国内回到芬兰后不久,和我讨论的第一件事就是:我觉得你可以考虑延期毕业,你的时间太紧张了。你可以再多留个半年,我们从头开始好好做,考虑一下发个期刊。
我当时听到这个建议后,内心一阵翻腾,心情真可谓五味陈杂。既有面对自己可能要延毕的恐惧,也有点埋怨技术指导老师不愿意再想想办法‘救救‘我,更有恨自己能力不足,不敢肯定自己一定能按时完成毕业的恨意。
当然,因为可以卸去非要按时毕业的压力,心里竟也会产生一丝丝的延毕的轻松感。当时我因了这点延毕轻松感,真的有动摇,和家里商量做了延毕的打算。
因为延期毕业半年,我的压力确实会小很多,什么事情都可以暂且缓一缓。但是现在想想还是有点后怕。
如果我延毕了,那么现在的我,不可能来到意大利旅游,而是会继续苦逼的在芬兰写毕业论文。甚至不可能这么早拿到博士的位置。
如果真延毕,我的心理压力就大了。说到这一丝延毕的轻松感,其实有件事情一定要说一下,这件事情对我按时毕业起到了非同寻常的帮助,帮助我克服了这点轻松感。
因为早在我开始毕设之处,我的心中就有了一个念头,那就是一定要按时毕业。这个念头来自一丝遗憾:其实,我心中一直有一丝遗憾,我高考的时候,因为那时的我还很懵懂,虽然知道高考很重要,但是并没有为之全力地付出拼了命地去准备,我那时很叛逆,也很懒惰。
很多次都觉得,那时的我就是太玩世不恭,连高考这么重要的事情我都不能认真地去对待,后悔自己的不懂事。如果高中再重来一次,我绝对好好学习好好准备不迷茫不懒惰。
这些年来,我的人生观和价值观也慢慢变得成熟,慢慢学会了承担责任和认真地生活,但是很遗憾再没有一次高考给我来过。于是,借着这个机会,我暗自心想,把硕士毕业论文作为我的挑战,当成高考。
我对自己说,一定要尽全力去按时完成毕业设计,是时候认真一次了,一辈子,总要认真一次地做一件事情吧。如果做一件事情失败了,我总可以以不认真作为借口,但是我一辈子就在逃避和玩世不恭中过去了。
但是只有全力以赴了,不给自己各种理由各种借口,才能激发自己全部的能力,也才能认清自己真正的模样。所以技术指导老师和我提及延毕后,我也动摇了甚至险些放弃了,但是我脑子里还是会回响我对自己说的上面这段话。
而我最后确实因为了心中的这点不甘心,咬咬牙坚持了下去。所以最后拿到毕业证书的时候,我很感激当时的我能拥有这么矫情而伟大的想法,竟然能把毕业设计上升到这么高的价值。
傻笑脸。有时候,矫情也挺好的,自己给自己设计个英雄梦吧。
实验阶段 因为有了嘉炜学长的前期工作和石头学长的帮助,我很快在四月份之前把算法A在数据库上的结果跑出来了。最开始的准确度只有大约26%,这大概是个什么水平呢,我这个数据库有七个类别,所以随机猜测的概率是17%,可见算法A还是对准确度做出贡献了9%的贡献,虽然提升的空间还很大,但我觉得一个数据库加上实现了一个表现还凑合的算法,也算能混毕业了。
于是我找到了导师,和她汇报了我的毕设进度,同时强烈地表达了我想按时毕业的意愿。导师听说了这个数据库做到了26%的精度,表示说一个新的数据库能做到26%已经不错了。
我们组以前一个数据库五个分类,也只有30%左右的精度。不过导师希望我可以再把算法B做出来,同时进一步提高算法A的精度,这样。
4.计算机专业本科生做毕业论文一般用什么算法
一个程序的核心在于算法。
比如说打开一个软件和运行一个软件的速度在计算机硬件性能相同情况下,软件的算法起到了几近决定性作用,所有的计算机软件和硬件的编程都是需要算法的,就算一个hello world程序虽然我们编时候没有用到算法但是在编译他和运行再屏幕显示的时候就是算法了。算法是计算机乃至自然界的核心,如果知道人脑的算法,就可以制造出人工智能的软件。
算法太多,也就不全部列举出来了,具体的还有用法,你自己看下书或去网上找下,都应该可以找到的:比如:贪心算法,蚁群算法,遗传算法,进化算法,基于文化的遗传算法,禁忌算法,蒙特卡洛算法,混沌随机算法,序贯数论算法,粒子群算法,模拟退火算法等等。
5.如何研究学习一个机器学习算法
如何研究学习一个机器学习算法
1. 还记得我刚来算法组的时候,我不懂TFIDF是什么,更不要说什么SVD,LDA了听都没听过,不懂user-based和item-based的区别,甚至连贝叶斯公式都写不全。在最初的一段时间,我看别人的代码,半懂不懂地听组会分享,然后实现一个又一个现在看来很幼稚的算法,感觉进步是飞速的。接过来一个算法需求,我就去网上找篇paper,然后把算法给实现了就丢给产品线用。
这个时候,同事A对我讲,“算法工程师不是懂一些数学,会写些算法就行了,算法工程师最重要的技能,在于如何定义问题,然后接下来才是如何解决这个问题。”从那以后,当面临一个需求时,我更愿意分析这个需求的关键点在哪,然后从大脑里搜索已有的东西能不能解决这个问题,比如FM的算法缺乏多样性,那么我想一下我看过的解决多样性的paper都有什么?能不能用在这个上面。如果不能,我再对应去搜问题的关键字,而不是算法的关键字。
2. 转眼间一年过去了,虽说看过的paper不够多,但是可以应付大部分的需求了。但是我开始迷茫起来,我觉得自己在实现一个又一个的算法trick,知道一个算法可以用,我就去网上down一个对应的算法包,然后把数据丢进去。没了。。那么我的出路到底在哪?我的核心竞争力在哪?在于知道这么个东西,然后变成跑准备数据的么?
这个时候,同事B给我讲了到底博士是如何完成一个毕业设计的,几百篇论文作为基础。那是不是把几百篇论文全都和我以前一样一字不差的看完?PHD为什么很容易进入到一个他之前所未知的领域,在于在研究领域所积累的一套方法论。言归正传:
当接触到一个新的算法时要怎么去入手?用SVM举例吧:
第一,去找SVM的Survey,每一个成熟的算法分支必定有着survey这样的汇总性paper,通过这个paper,我们大致可以了解这个算法为什么出现,最基本的算法原型是什么样的,接下来后人对他做了什么样的改进,他到底还有什么问题。
第二,弄懂这个算法的来龙去脉,为什么出现,出现是因为改进了前面算法所不能做的什么事情?例如我们为什么不用基本的线性分类器?和用传统的分类算法找到一个超平面区别在于哪?
第三,知道了来龙去脉,我们还要知道这个算法的缺点在哪?不能适用于什么?我们怎么知道?这个就涉及到如何来快速地过一遍一篇paper。
第四,Abstract是最重要的,他告诉了我们这篇paper发的目的是什么?他想解决什么问题?然后是Future Work,之所以有着FutureWork是因为这个算法还有一些问题没有解决,这个就告诉了我们当前算法还有什么缺点?
第五,递归再去看这个缺点是否有其他的研究者已经解决掉了。
那么我们为什么看paper,为什么实现某算法,我归结为两点:
1. 学习目的,扩展思路,如果处于这种目的,理解paper的精髓是最重要的。
2. 解决实际问题。那么应该丢弃的观点是我最初那样拿过来一篇paper也没理解透彻也不知道能不能解决问题,也不知道到底是不是可行,就先实现了再说。劳民伤财~
3. 我自认为自己还算努力,看了很多书,看了很多算法,但是其实有时候说起来,比如用PCA还是SVD,他们到底有什么区别,我们如何选择,我其实还是不明白。
这时,同事C对我说,理解一个算法,最重要的是要理解这个算法的世界观,这个算法背后的哲学基础是什么?只有理解了这个,才算理解一个算法。
用Boosting来举例,他背后的世界观是PAC原则。那么Boosting为什么不能引入一个强分类器,因为这个做个类比就相当于Boosting原本是美国的民主政治,一旦引入了一个强势的领导,就一下子变成了当年毛爷爷时候的政治了。Boosting的世界观就崩塌掉了。至于说Boosting最终是如何调整数据集的权重,这些就都属于了细节的层面。
最后,补充一个同事D,无意间的话让我发觉自己要变得更优秀才行:
同事D在搜Resys,有一个快照上面写着:本科生Resys十佳论文。同事扭头对我说,靠,现在本科生都可以发Resys paper了。让我意识到了自己其实在原本上差距有多大,我要付出更大的努力才能弥补这些也许别人觉得无法跨越的鸿沟。