机器学习基础:与Python关系和未来发展

目录

初识Python

Python的由来

自由软件运动

编译方式的演进

Python语言的特点

语法简单,易于理解

语法结构清晰,快速上手

丰富的第三方库

机器学习

监督学习

无监督学习

半监督学习


        欢迎回到我们的神经网络与深度学习Tensorflow实战学习,本篇为人工智能学习第三篇文章。前面的文章中我们学习安装了Tensorflow-GPU,在本文章开始我们将从理论课逐步进入编码的学习,了解人工智能为什么离不开python语言,再到人工智能的技术将为我们解决什么问题。

直通车:人工智能发展历程了解和Tensorflow基础开发环境构建-CSDN博客

直通车:Tensorflow-GPU工具包了解和详细安装方法-CSDN博客

初识Python

Python的由来

        Python是目前最受欢迎的程序设计语言之一,它结构清晰,简单易学,拥有丰富的标准库和第三方生态系统,非常适合作为机器学习、数据分析的编程语言。在这一章中,我们会简要的介绍python语言的历史和发展,由于篇幅的原因,对于基础知识学习可以从官网中学习,为后面的编程实践打下基础。

        1989年底,据说是为了打发无聊的圣诞节,荷兰人Guido Van Rossu编写了python语言,Gudio是喜剧Monty Python的飞行马戏团的一位粉丝,因此这个程序设计语言就被取名为python,是蟒蛇的意思。

        

        可以看到,python语言的logo就是两条缠绕在一起的蟒蛇,python是开源的语言。它由非营利组织python软件基金会拥有、管理,由社区驱动。Python的解释器源代码公开,属于自由软件,自有软件的英文名为free software,这个单词在英文中有自由、免费的双重含义,为此,自由软件运动的创始人理Richard Matthew Stallman给出了以下的定义,自由软件的重点在于自由权而非价格,这里的free应该是自由的话语权中的自由的意思,而不是免费的啤酒中的免费的意思,用户可以自由的运行、拷贝、分发、学习、修改和改进这些软件。

自由软件运动

        Stallman是一位坚定的自由软件运动的倡导者,正是在他所倡导的GUN运动中出现了linux操作系统。GUN是一种递归的写法,也就是gnoes not unix。Stallman认为,使用专利软件是非常不道德的事情,只有附带了源代码的程序才是符合道德标准的,但是公开源代码之后,为了防止一些商业公司利用自由软件的基础,在上面进行一些修改后,再把它私有化。Stallman别出心裁,创造了copyleft的授权办法,可以看出来这个词是copyright相对应的,他要求所有的GNU程序要遵循copyleft的原则,也就是说,你可以拷贝、修改甚至出售都是没有问题的,但是有一条对原本的源代码进行的所有改进和修改,必须是向每个用户公开,所有用户都可以获得修改后的源代码。copyleft保证了自由软件传播的延续性,在自由软件运动还创造出GPL通用公众许可协议,它的基本原则是你可以自由的运行、拷贝、修改和再发行使用GPL授权的软件,但是你也必须允许别人也能够自由的运行、拷贝、修改和再发行该软件,以及你在该软件的基础上加以修改而形成的衍生软件产品,而不允许修改后的衍生代码作为私有的商业软件发布和销售。GPL协议强调,只要在一个软件中使用了GPL协议的产品,包括类库的引用、修改后的代码或者衍生代码,则该软件产品也必须使用GPL协议,必须是开源和免费的。我们熟知的linux就是在GPL下发布的,自由软件运动从伦理学道德的高度强调,我们每个人都有自由的使用软件的权利,反对软件私有,明确反对以申请专利的形式将软件产品据为私有。

        不难发现,自由软件运动有点太极端、太理想化了,生活在商品化的社会,要完全如此的反商业还是很有难度的,因此也有很多人表示异议。发展到后面,又出现了开源软件,它既继承了自由软件所倡导的知识共享的理念,同时又允许人们以专利的形式从知识产品中盈利,从而保护了人们生产创造知识产品的积极性。因此,开源允许软件授权收费,或者软件本身可以以开源免费的形式提供,但是对软件的服务和维护可以收费。另外,开源社区也可以接受来自商业公司的资金支持,除此之外还有免费软件,这完全是另外一个范畴的问题了,免费软件是免费提供给用户的软件,但是通常都会有其他的限制,源代码不一定会公开,而且使用者也没有复制、研究、修改和再发布的权利,例如,我们现在使用的很多商业软件都提供了免费的版本或者试用期供用户使用。

编译方式的演进

        我们知道,计算机只认识二进制的机器语言,用高级语言编写的源程序,计算机是不能够直接识别的。因此,当我们执行一个高级语言编写的程序时,需要首先把它编译成计算机能够执行的机器语言,传统的翻译方式有两种,编译和解释。

        编译型语言在程序执行之前,首先通过编译器把整个高级语言源程序翻译成计算机可以识别的机器语言,运行时,直接运行这个翻译好的可执行程序就可以了。例如C语言就是典型的编译型语,也如果使用我C语言的话,我们有这样的经验,即使最后一行少了一个符号,整个编译器就无法通过,必须编译完整个程序之后,才能够生成可执行文件执行程序。

        而解释型语言就没有这个编译的过程,在程序执行的时候,解释器对源程序逐条翻译并逐条执行,因此后面的出现错误不会影响到当前代码的执行。例如,Javascript就属于解释型语言。因此,我们在执行网页的时候会发现,虽然有时候网页出错了,但是页面的前面的一部分还会正常显示,只是从某个出错的地方才开始显示不出来了。

        对于编译型语言而言,由于已经提前将程序全部编译为机器语言,在运行时直接在处理器上执行机器语言,因此效率比较高。不同型号的cpu对应不同的机器语言,当程序需要运行在不同的平台上时,就需要使用不同的编译器,将源程序翻译成对应的机器语言。这就如同我们出国旅游,要根据所去的国家找不同的翻译,将我们的母语翻译成相应的语言。同样我们使用高级语言编写好的程序,如果要运行于不同平台的电脑上,就要使用不同的编译器,把它翻译成各种不同的机器语言,

        例如C语言就是这样,我们说C语言具有良好的跨平台性,是相对于汇编语言而言的,当编写好的源程序需要在不同的电脑系统中运行时,不需要重新编写源代码,只要使用不同的编译器,把它翻译成对应的机器语言就可以了,也就是说,C语言的这种跨平台的特性,是建立在多次编编译的基础上的。

        随着互联网的发展,大量的程序需要运行于网络中不同的电脑上,这些电脑的Cpu和操作系统平台各不相同,而且型号种类非常多。如果开发者要将自己的源程序编译成这么多种的机器语言,那是非常困难的。这种场景下,就促使了Java这样的虚拟机语言快速的发展起来。

        Java编译器并不直接将java的源代码编译为机器语言,而是首先把它编译成字节码文件,在程序运行时,再由java虚拟机将字节码翻译成机器语言。虚拟机是一台想象的机器,其实就是一种软件,他可以把字节码文件翻译成机器语言。因此,我们可以把字节码文件看成是能够在Java虚拟机上运行的可执行文件。或者说,字节码文件就是运行在Java虚拟机上的机器指令,这样开发者在发布软件时只需要进行一次编译,把它编译成成字节码文件就可以了,完全不用关心它实际上是在什么样的平台上运行。计算机在运行Java程序时,再由java虚拟机将字节码翻译成对应平台的机器语言,对于不同的cpu和操作系统的计算机都有专门的java虚拟机。这样java程序只要认识java虚拟机这一种平台就可以了。

        Java虚拟机屏蔽掉了平台之间的差异,实现了程序的跨平台运行。达到了一次编译到处运行的目的。相对于c语言的多次编译,多次运行,它的可移植性显然更强了。当然,要在某一计算机上运行java程序,必须首先给它安装对应这个平台的java虚拟机。

        在python语言中也采用了这种虚拟机指令的机制,当程序首次执行平时,python的解释器会首先将源文件中的源代码编译成字节码,字节码文件的扩展名是pyc。这些字节码比源代码的运行速度要快很多,并且与平台无关,当再次执行这个python源文件时,python解释器会加载pyc文件对字节码进行解释,执行python会自动的检查源文件和字节码文件的时间戳,如果源文件发生了改动,下次运行源程序时会自动的重新创建字节码文件。这种运行机制不仅使得python可以跨平台运行,而且避免了python每次运行时都重新解释源代码,从而加快了程序的运行。要注意的是,python中虽然出现了编译的过程,但是将源程序编译为字节码,这个过程仍然是在python的解释器中发生的。它并没有独立的编译系统,因此python仍然属于解释性语言,只是带有一些编译的特征而已。Python程序在运行时需要逐条的解释字节码,因此它的运行速度是略低于编译型语言的,但是由于采用了这种字节码的机制,它的效率是高于传统的解释语言的。

Python语言的特点

        它是由Guido Van Rossu创建的一种脚本语言,解释器的源代码是公开的,属于自由软件。也是开源的软件,当python程序第一次被执行时,解释器会首先将源代码翻译成字节码。当再次执行这个python文件的时候呢?Python解释器就会加载这个已经存在的字节码文件,并对它进行逐行的解释。执行python程序的这种字节码机制不但使得它可以跨平台运行,而且由于字节码比源代码的运行速度要快很多,因此,python的运行速度也比传统的解释型语言要快。 1991年,奇多范罗苏姆公布了python的第一个公开发行版0.9版本的解释器源代码,它是用c语言实现的,并且能够调用c语言的库文件这个版本已经有了类函数异常处理,实现了包括类列表、字典、字符串等在内的核心数据类型。并且集成了模块系统,范罗苏姆将模块描述为Python的主要编程单元。

        1994年,python1.0发布新增了函数式工具。

        2000到2002年期间,python2.0中加入了内存回收机制,并集成了列表推导式,构成了现在的python语言的框架基础。

        2008年12月,python3.0发布,相对于早期的版本,这是一个很大的升级,为了追求语言上的完美,不带入过多的累赘,python3.0在设计的时候采用了非兼容的方式升级,没有考虑到像python2.x兼容,因此很多早期的python2版本设计的程序是无法在python3上正常运行的。我们在学习python的时候,就需要特别的注意。

        Python的版本在网络和参考书中有很多早期的代码和历程是基于python2编写的。如果在python3下运行,就会出现错误。在python3.0发布的时候,同期的python2的版本是200008年10月2日发布的python2.6,在此之后的python2的版本呢,也直接或者间接的使用了python3的一些特性,但不是完全兼容的,为了照顾到之前大量的使用python2编写的程序,2010年发布了一个python2.7的过渡版本,这个版本使用python2语法库的基础上,考虑了像python三的迁移。允许使用一部分python3的语法和函数,但是python软件基金会宣布2020年元旦之后将不再为python2提供任何技术支持。因此,作为新手来说,建议我们直接开始学习python3以上的版本,我们文章中全部的实例都是基于python3来做的。

<python_root>/tools/scripts/2to3-script.py

例:python2to3.py -w 文件路径

        另外,在python3中提供了一个版本转化工具,可以将python2的语法直接转换成python3的语法,这个工具在python的安装目录中的scripts目录下名称为2to3-script,是一个python文件。

        目前python已经成为国际上最受欢迎的程序设计语言之一。在顶级编程语言排行榜中,python在2017、2018年连续高居榜首,并且逐渐与第二名拉开差距。不仅如此,他还在年度发展最快的编程语言开源项目,钟爱的编程语言工作环境、使用的编程语言设计自由度等多个榜单中稳获第一。在TIOBE编程语言排行榜中,python语言也在2018年9月进入了TIOBE前三,并且获得了2018年度编程语言的称号。那么,python为什么会在诞生快30年之后才忽然获得这么高的青睐呢?带着这个问题,我们来看一下python有哪些过人之处?

语法简单,易于理解

        首先,python的语法非常简单,而且很容易理解,是目前最接近人类自然语言的通用编程语言。

        例如,这里分别是使用python、 c和java实现的输出hello world的源代码可以看出来,代码最简单,只需要一行就是告诉计算机打印这句话"Hello word",而在c语言中,除了要使用函数标准库之外,还需要注意到一些细节,比如print这个单词后面要加f,句子后面要有表示换行的转义字符,每条语句后面都要有分号等等,而在java中,你还需要掌握类、静态方法、字符串、数组参数等更加复杂的知识。

语法结构清晰,快速上手

        Python语法简洁清晰,易于理解,对于初学者,特别是对于非计算机专业的同学,可以在短时间内快速上手。而且他将底层的技术封装起来,这样在编程的时候呢,就可以把更多的注意力放在高层次的程序逻辑方面,而不用花费太太多的精力去关注底层的细节问题。因此,python作为一门入门的编程语言,适合于所有专业的开发者,帮助他们快速编写程序,去解决自己领域的问题。

丰富的第三方库

        另外,python拥有着丰富的标准库和出色的第三方库生态系统,以及对底层操作系统的良好的兼容性,借助他们可以极大的缩短开发周期,更加高效的解决问题。而且代码简洁,易于阅读。python本身提供了丰富的、跨平台的标准库,包括网络文件、图形、用户界面、数据库、文本加密、爬虫、机器学习等等,而且能够很好的兼容unix、 windows和mac等主流的操作系统,这些功能强大的标准库被形象的称为python的内置电池。

        除此之外,python还有庞大的第三方库,截至2017年底,python语言已经拥有超过12万个第三方库,几乎覆盖了所有的计算领域。通过调用这些库,可以非常轻松的实现强大的功能,而避免了重复造轮子。因此,学习python不仅仅是掌握一门新的编程语言,更重要的是理解和应用它的计算生态,充分发挥这些第三方库强大的威力。使得程序中错误更少、更健壮、开发周期更短。例如,在本篇文章中,就会用到Numpy、MatPlotlib、Pandas PIL、tensorflow等多种科学计算、绘图、图像处理、机器学习和深度学习的库。凭借简洁的语法和丰富的库函数实现同样的功能,python的代代码行数只有C语言程序的十分之一。因此,作为一名python,是相相当于相当幸福的,正所谓人生苦短,我用python。

        目前,python语言已经形成了世界上最大的针对单一编程语言的开源开放体系。这种计算生态没有顶层设计,全部是由全世界各地的公司、组织或者个人工程师开发啊,以开源免费的形式分享出来,对于重要的计算资源,一般都存在着多个第三方库进行支持,我们可以根据自己的偏好进行选择,而很多第三方库呢,又是在其他库的基础上建立起来的,这样这些第三方库之间竞争发展、相互依存、快速更迭,使得整个计算生态系统迅速发展。

        python的这种出色的生态系统是建立在自由软件的基础之上的。1983年,以Stallman为代表的一批软件工程师开启了自由软件的探索之路。经过近30年的发展,在软件领域,已经逐步建成了由全球工程师自发维护的、覆盖几乎所有信息技术领域的、由协议保护但是,免费获得的开源软件体系,使得软件产业的创新模式从刀耕火种、产权独立的发展模式向产权清晰的开源软件利用模式转变,这种模式可以避免重复造轮子,快速集成已有软件和功能,实现产品的快速开发和迭代,极大的推动了信息技属的创新和发展。例如AlphaGO。在全球产生巨大影响的同时,谷歌公司也开源了其背后的tensorflow技术,现在tensorflow已经被迅速的应用于计算机视觉、语音识别、机器翻译、自动驾驶等多个领域,这种快速的创新风、丰富的生态系统,都是受益于自由软件的开发模式。

        通过上个章节,我们知道,作为一门解释型语言,python程序运行的效率不如java或者c,但是在python的代码中可以方便的调用。使用c、c++、java、 .net等多种语言编写的模块,因此python有胶水语言的称号,可以使用python将其他语言编写的程序快速的进行集成,例如,在产品开发时,可以首先使用python语言编写原型程序,快速实现调整和验证算法,在算法确定后,再逐步使用c语言去重写那些被频繁调用或者特别强调性能的模块,从而改善程序的性能,由于是开源的python具备高可移植性,可以兼容很多平台。Python程序几乎无需进行任何修改,就可以在多种平台上运行。

        总结来说,python语言的特点就是简洁、高效,具备丰富的生态系统。既然python有这么多的优点,那么为什么在诞生30年之后才忽然火起来呢?这其实和计算机技术的演进是密切相关的。

        在早期的计算机系统结构年代,计算机主要服务于科学计算和商业数值计算,而在这个时期,计算机的性能和功能都比较有限,因此催生了执行效率高的C语言,在此之后,进入计算机网络和视窗时代,由于windows操作系统在个人计算机领域的高度普及,所见即所得的开发发需求,产生了vc/vb这样的视窗编程语言,而java语言的虚拟机机制可以很好的满足网络的跨平台需求,因此得到了迅速的发展。

        2008年以后,以android开源移动操作系统为起点,计算机技术进入复杂信息系统阶段。面对日益复杂的功能和紧迫的迭代周期,需要更高级别的程序设计语言来表达高层次的编程逻辑,这就使得一批高效的脚本语言得到了青睐。其中,python已经成为这个阶段的主流编程语言。

        2016年之后,随着深度学习、开源硬件、智能机器人等技术的迅速发展,计算机技术将逐步进入人工智能时代,越来越多的非计算机专业人员也开始需要编写程序来处理数据、建立模型、分析结果。python设计的初衷就是为了更高效、更简洁的解决问题,它轻量级的语法,对底层逻辑的封装和庞大的生态系统非常适合作为数据分析、机器学习、深度学习的编程语言。使用python语言编写程序,可以将注意力更多的放在算法的选择和优化上,快速调整、试错、迭代,高效的编写代码。谷歌公司开发维护的深度学习框架tensorfow就是以python作为首写语言python加tensorfow的组合,使得深度学习的门槛大大降低。

        因此,python迅速流行起来,是计算机技术发展演进的结果,也是时代的选择。

机器学习

        通过前面文章的学习,我们已经能够使用python语言来编写程序,并且能够综合运用Numpy/Matplotlib/Pandas/Pillow应用等第三方库来创建和操作高维数组访问数据集,并实现数据集可视化等操作。在上个章节中,我们介绍了tensorflow2.0的框架特点和一些常用的低阶api,以上这些都为我们编写机器学习和深度学习的应用程序打下了编程的基础,在后面的文章中,我们将会从机器学习的概念开始,循序渐进的介绍回归、分类、人工神经网络、深度学习和卷积神经网络的相关知识,并且使用tensorflow2.0来实现典型的算法和模型。

        我们人类总是不断的从过去的经验中学习,例如看云时,天气就是人们通过长期的观察和经验的积累。根据云彩、云朵的形状、厚度、颜色、移动方向等的变化,总结出他们和天气之间的关系,并且把这些经验编成谚语和口诀来预测以后的天气,我们去看病的时候,也总是更加信任那些老大夫,这也是因为我们认为他们有更多的经验。其实在日常的生活、学习和工作中,我们对待很多事情的看法、做事情的方式方法,很多也都是基于之前的经验做出的。反应那么计算机是否也能够基于经验做出判断呢?答案是肯定的,这就是人工智能中的一个重要分支,机器学习对计算机而言,机器就是历史数据,机器学习就是从数据中学习,通过算法使机器能够从大量的数据中学习规律,从而能够对新的数据做出识别,或者对未来做出预测。例如,在这个表中记录了商品房销售的价钱,我们知道商品房的价钱和很多因素都有关系,例如面积、户型、地段、当地的经济情况等等。

        为了简单起见,在这个例子中,我们假设房价只和面积有关,这里一共有16条记录,每条记录中包括房屋面积和对应的房价。如果我们现在想卖一套100m²的房子,可以在这张表中查到93万元左右是比较合理的报价。现在假设我们有一套120m²的房子,但是在这个表中没有120m²的数据,那么应该报价多少比较合理呢?很容易想到,我们可以根据其他相近的面积,近似的估计出这个面积的房价和它比较相似的面积是124m²,再稍微远一点,还有114、138等。

        那么应该怎样综合应用这些信息,来尽可能合理的估计出这个120m²的房价呢?首先第一步,我们可以根据这个表中的数据做出房屋面积和房价之间的散点图,这里x轴是面积,y轴是房价图中的每一个点。对应销售表中的一条记录,因此一共有16个点,现在观察这些点的分布,可以发现它们大致上是一种线性的分布。我们可以试着去找一条直线,使它尽可能去靠近这些数据。也就是说,这条线尽可能经过比较多的点,或者和所有点的距离尽可能的接近所找到的这条直线就可以反映出房屋面积和房价之间的规律。如果以后再出现新的面积,就可以根据这条直线来估计房价,例如现在要估计120m²房子的房价,只要找到横坐标120在这条直线上对应的点,这个点的纵坐标就是对应的房价。这样我们就实现了对未知房价的估计,可以看出来大概是110万元左右。在这个过程中,大家觉得最重要、最关键的一步是什么呢?对,就是找到这根直线,它是我们能够预测未来的关键,就好像女巫手里的水晶球,这根直线就是我们的水晶球,我们通过它来预测未来、洞察一切!

        这条直线称为模型,通过这些已知的数据点找到这根直线的过程称作拟合,也就是机器通过数据进行学习的过程。在平面直角坐标系中,直线的定义是y=wx+b,一旦参数w和b确定了,这条直线就被唯一的确定了,因此,寻找这条直线的问题就转换为寻找参数w和b。我们来总结一下机器利用数据进行学习的过程,第一步,建立模型,假设房价和面积之间存在线性关系,y=wx+b,直线的参数,w和b未知。第二步学习模型就是根据销售记录确定直线的参数w和b。第三步,运预测或识别使用上一步得到的这根直线。根据面积计算房价,在这三步中,最关键的就是第二步,如何从数据中产生模型是机器学习的主要研究内容。

        从数据中学习到模型的算法成为学习算法,机器学习实际上是引出了一种新的编程范式。在经典的程序设计中,我们是首先确定好规则,然后将数据和规则作为输入,通过程序计算给出答案。而在机器学习中,我们是已知一些数据和答案,而去推测他们的规则,这些x和y并不是严格的满足某一个函数映射。例如,在这个例子中,这些点并不是严格的在同一条直线上,因此无法通过两点确定直线的规则去求解它,只能够通过对这些数据的学习和研究,寻找其中的统计规律,找到一根尽可能总体误差最小的直线。机器学习就是通过学习算法从数据中学习到模型的过程,有了学习算法,我们把数据提供给他,他就能够从这些数据中学习到模型,然后我们就可以使用这个得到的模型进行预测和识别。在机器学习中,这些用来学习的数据称为数据集或样本集。

        我们前面介绍的波士顿房价数据集、鸢尾花数据集、手写数字数据集就是一些被整理好的、可以用来训练模型的数据集。

监督学习

 y = wx+b

        数据集中的每一条记录称为样本样本由属性和标记组成,属性也称为特征,反映样本的表现或者性质。标记,也称作标签,是预测或者分类的结果。例如,房价、鸢尾花品种都是标记,对这种有标记的数据集进行的学习称为监督学习,监督学习的过程就是对数据的学习。总结出属性和标记之间的映射关系,也就是模型。在监督学习中,模型也称为假设或者学习器,通常用一个估计函数来表示,学习到的模型应该尽可能的逼近真实存在的规律,这个真实存在的规律称为ground truth,我们把它翻译译为真相,或者真实。

        监督学习可以分为回归问题分类问题,在回归问题中预测的是一个连续值,例如房价。而在分类问题中,预测的是一个离散值,例如将鸢尾花分类识别出手写数字,都是典型的分类问题。这个图描述了监督学习的过程,首先给出样本集,学习算法会根据样本集自动归纳和总结样本的属性和标记之间的关系,从而找到输入和输出之间的映射模型。得到一个估计函数之后,就可以使用这个函数对没有见过的的新数据进行预测或者分类输出结果。

无监督学习

        除了监督学习,还有无监督学习。无监督学习是在样本数据没有标记的情况下,挖掘出数据内部蕴含的关系,例如这里有一些样本。他们没有标记,我们不知道他们是什么,但是我们可以根据这些点之间的距离把它们分为三类,这就是聚类,聚类就是把相似的东西聚在一起,也就是物以类聚,人以群分,聚类并不关心这一类是什么,因此不需要标记,只要能够对抽取出的特征计算距离就可以了,距离描述了特征值之间的相似度。

        对于同样的样本,抽取出来的特征不同,聚类的结果也会不同,例如我们对小伙伴们进行聚类,按照年龄、身高、性别、基贯、专业等不同的特征进行聚类,结果也是不一样的,这是我们学习过的鸢尾花的例子,假设现在这个数据集没有标记,我们仅仅根据鸢尾花花瓣的长度和宽度,也可以对它们进行聚类。例如花瓣比较短,比较窄这是第一类。花瓣比较宽大,这是第二类。那么在这一大类里面是不是还包括有不同的品种,在没有标记的情况下就不太好区分了。在有标记的数据中,我们知道这里还包含了两种不同的类别,有标记的数据需要人工标注,成本很高,因此数据量非常的有限,而在我们日常生活和生产过程中积累了大量的无标记数据,数据量是远远多于有标记数据的。

半监督学习

        为了更好的利用这些数据,就出现了。半监督学习半监督学习是一种将有监督学习和无监督学习相结合的学习方法,它可以综合使用大量的没有标记的数据和少量的标记的数据来共同学习

        这样就可以充分的发挥有标记数据和无标记数据各自的优势,得到更高的效率和精度。因此,这种方法现在也正受到越来越多的重视。机器学习是人工智能领域中的一个分支,从历史上看,机器学习是人工智能中发展最快的分支之一,也是现阶段最活跃、最重要的一个分支。在人工智能发展的早期阶段,符号学习是机器学习的主流,然而在现实世界中,很多问题都无法用符号精确的定义和表示,然后去建立精确的模型。

        20世纪80年代到90年代,统计机器学习横空出世。比起过去基于人工规则的专家系统,它在很多方面都显示出极大的优越性,迅速压倒并且取代了符号学习的地位,成为了机器学习的主流方向。可以这样认为,从早期的符号学习发展到统计机器学习,反映了人工智能从纯粹的理论验研究和模型研究,发展到以解决现实生活中的实际问题为目的的应用研究。这些年来,随着移动计算和物联网的迅速发展,在各个领域都产生和积累了海量的数据,如何解释、分析和处理这些数据,从中抽取到有价值的信息也变得越来越重要,机器学习能够从已有的数据出发,抽取出其中有价值的信息,彰显数据背后的规律,实现大规模的数据识别、分类和预测。

        在日常生活中,推荐系统、购物网站、垃圾邮件过滤、物流配送、汉字输入、美图工具、天气预测,这些场景中都有机器学习软件的存在。在商务领域,越来越多的公司也开始使用机器学习软件分析数据、辅助商业决策、预测市场等;在医疗卫生领域,机器学习被用来辅助诊疗、手术、检测疾病等;在教育领域,机器学习可以应用于自动改卷、学生行为建模、预测学习表现、学习支持和评测以及资源推荐等方面。机器学习的应用可以说已经无处不在了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/736531.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 虚拟环境 requirements.txt 文件生成 ;pipenv导出pip安装文件

搜索关键词: Python 虚拟环境Pipenv requirements.txt 文件生成;Pipenv 导出 pip requirements.txt安装文件 本文基于python版本 >3.9 文章内容有效日期2023年01月开始(因为此方法从这个时间开始是完全ok的) 上述为pipenv的演示版本 使用以下命令可精准生成requirement…

thrift接口调用工具

写了一个thrift接口调用工具 导入thrift文件就可以直接调用相应接口 工具会根据thrift文件中接口的参数名&#xff0c;参数类型&#xff0c;返回值等等&#xff0c;自动生成接口参数&#xff0c;和结果json化显示。 https://github.com/HuaGouFdog/Fdog-Kit

Java启动jar设置内存分配详解

在微服务架构越来越盛行的情况下&#xff0c;我们通常一个系统都会拆成很多个小的服务&#xff0c;但是最终部署的时候又因为没有那么多服务器只能把多个服务部署在同一台服务器上&#xff0c;这个时候问题就来了&#xff0c;服务器内存不够&#xff0c;这个时候我们就需要对每…

1.3 Sqoop 数据同步工具详细教程

Apache Sqoop 是一个开源工具&#xff0c;用于在 Apache Hadoop 和关系型数据库&#xff08;如 MySQL、Oracle、PostgreSQL 等&#xff09;之间高效传输数据。Sqoop 可以将结构化数据从关系型数据库导入到 Hadoop 的 HDFS、Hive 和 HBase 中&#xff0c;也可以将数据从 Hadoop …

DIVE INTO DEEP LEARNING 50-55

文章目录 50. semantic segmentation50.1 Basic concepts50.2 Major application 51. Transposed convolution51.1 Basic concepts51.2 Major role51.3 Implementation steps and application areas51.4 Transposed convolution51.5 Transposed convolution is a type of convo…

物联网系统运维——移动电商应用发布,Tomcat应用服务器,实验CentOS 7安装JDK与Tomcat,配置Tomcat Web管理界面

一.Tomcat应用服务器 1.Tomcat介绍 Tomcat是- -个免费的开源的Ser Ivet容器&#xff0c;它是Apache基金会的Jakarta 项目中的一个核心项目&#xff0c;由Apache&#xff0c; Sun和其他一 些公司及个人共同开发而成。Tomcat是一一个小型的轻量级应用服务器&#xff0c;在中小型…

从零入手人工智能(5)—— 决策树

1.前言 在上一篇文章《从零入手人工智能&#xff08;4&#xff09;—— 逻辑回归》中讲述了逻辑回归这个分类算法&#xff0c;今天我们的主角是决策树。决策树和逻辑回归这两种算法都属于分类算法&#xff0c;以下是决策树和逻辑回归的相同点&#xff1a; 分类任务&#xff1…

[SAP ABAP] 排序内表数据

语法格式 整表排序 SORT <itab> [ASCENDING|DESCENDING]. 按指定字段排序 SORT <itab> BY f1 [ASCENDING|DESCENDING] f2 [ASCENDING|DESCENDING] ... fn [ASCENDING|DESCENDING].<itab>&#xff1a;代表内表 不指定排序方式则默认升序排序 示例1 结果显…

Nikto一键扫描Web服务器(KALI工具系列三十)

目录 1、KALI LINUX 简介 2、Nikto工具简介 3、信息收集 3.1 目标IP&#xff08;服务器) 3.2kali的IP 4、操作实例 4.1 基本扫描 4.2 扫描特定端口 4.3 保存扫描结果 4.4 指定保存格式 4.5 连接尝试 4.6 仅扫描文件上传 5、总结 1、KALI LINUX 简介 Kali Linux 是一…

抛弃Mybatis,拥抱新的ORM 框架!【送源码】

背景 转java后的几年时间里面一直在寻找一个类似.net的orm&#xff0c;不需要很特别的功能&#xff0c;仅希望90%的场景都可以通过强类型语法来编写符合直觉的sql&#xff0c;来操作数据库编写业务。 但是一直没有找到&#xff0c;Mybatis-Plus的单表让我在最初的时间段内看到…

告别繁琐邀请码,Xinstall助你轻松搭建高效App推广体系!

随着互联网流量的不断变迁&#xff0c;App推广和运营面临着前所未有的挑战。如何快速搭建起满足用户需求的运营体系&#xff0c;成为众多企业亟待解决的问题。在这个背景下&#xff0c;Xinstall凭借其强大的功能和灵活的解决方案&#xff0c;成为了App推广的得力助手。 一、传…

全面理解-Flutter(万字长文,深度解析)

1、Web 性能差&#xff0c;跟原生 App 存在肉眼可见的差距&#xff1b; 2、React Native 跟 Web 相比&#xff0c;支持的能力非常有限&#xff0c;特定长场景问题&#xff0c;需要三端团队一个一个处理&#xff1b; 3、Web 浏览器的安卓碎片化严重&#xff08;感谢 X5&#x…

Django 模版转义

1&#xff0c;模版转义的作用 Django模版系统默认会自动转义所有变量。这意味着&#xff0c;如果你在模版中输出一个变量&#xff0c;它的内容会被转义&#xff0c;以防止跨站脚本攻击&#xff08;XSS&#xff09;。例如&#xff0c;如果你的变量包含HTML标签&#xff0c;这些…

K8s部署高可用Jenkins

小伙伴们大家好呀&#xff01;断更了近一个月&#xff0c;XiXi去学习了一下K8s和Jenkins的相关技术。学习内容有些庞杂&#xff0c;近一个月的时间里我只学会了一些皮毛&#xff0c;更多的内容还需要后面不断学习&#xff0c;不断积累。最主要的是云主机真得很贵&#xff0c;为…

MySQL----利用Mycat配置读写分离

首先确保主从复制是正常的&#xff0c;具体步骤在MySQL----配置主从复制。MySQL----配置主从复制 环境 master(CtenOS7)&#xff1a;192.168.200.131 ----ifconfig查看->ens33->inetslave(win10)&#xff1a;192.168.207.52 ----ipconfig查看->无线局域网适配器 WLA…

java的输出流File OutputStream

一、字节输出流FileOutput Stream 1、定义 使用OutputStream类的FileOutput Stream子类向文本文件写入的数据。 2.常用构造方法 3.创建文件输出流对象的常用方式 二、输出流FileOutputStream类的应用示例 1.示例 2、实现步骤 今天的总结就到此结束啦&#xff0c;拜拜&#x…

基于STM32的智能家居安防系统

目录 引言环境准备智能家居安防系统基础代码实现&#xff1a;实现智能家居安防系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景&#xff1a;智能家居安防管理与优化问题解决方案与优化收尾与总结 1. 引言 智能家居安防系统通过使…

如何看待鸿蒙HarmonyOS?

鸿蒙系统&#xff0c;自2019年8月9日诞生就一直处于舆论风口浪尖上的系统&#xff0c;从最开始的“套壳”OpenHarmony安卓的说法&#xff0c;到去年的不再兼容安卓的NEXT版本的技术预览版发布&#xff0c;对于鸿蒙到底是什么&#xff0c;以及鸿蒙的应用开发的讨论从来没停止过。…