-
对于完全没有编程经验的初学者,在学习python的时候,面对的不仅仅是python这门语言,还需要面临“编程”的一些普遍问题,而有特别明显的两个错误认知是:错误认知一:一些初学者认为python很简单,就以为编程很简单。错误认知二:没有学好基础知识,听说django很火,就开始学django开发web。种种迹象表明,这些从零开始的学习者,普遍不知道从何入手,找了本编程教材发现第二章开始就看不懂了缺少计算机基础知识,被一些教程略过的“常识性”问题卡住遇到问题不知道怎么寻找解决方案。看懂语法之后不知道拿来做什么,学完一阵子就又忘了缺少数据结构、设计模式等编程基础知识,只能写出小的程序片段。学习Python有点入门的时候期望过高,进门开始的时候发现并没有那么美好,而多数人就停留在了知道好不知道如何学,知道好但是学起来很费力的情况,一筹莫展。在这里有几点看似心灵鸡汤,但是非常重要的学习建议是:首先要有信心。虽然可能你看了几个小时也没在屏幕上打出一个三角形,或者压根儿就没能把程序运行起来。但相信我,几乎所有程序员一开始都是这么折腾过来的。建议没有任何编程经验者,象学C语言那样来训练学习python,当然有可能你也不知道c是怎么学的!!!选择合适的教程。有些书很经典,但未必适合你,可能你写了上万行代码之后再看它会比较好,推荐以下基本入门书:《父与子编程》《Learning Python》python学习手册第五版(入门)python核心编程第二版(深入学习)写代码,然后写更多的代码。光看教程,编不出程序。从书上的例程开始写,再写小程序片段,然后写完整的项目。互补补强学习基础。除了学习编程语言,也兼顾补一点计算机基础,和英语。敲代码。不但要学写代码,还要学会看代码,更要会调试代码。读懂你自己程序的报错信息。再去找些github上的程序,读懂别人的代码。查文档。学会查官方文档,用好搜索引擎和开发者社区。下面是Python入门学习分四个阶段:一.看视频,选一套完整视频,要快速浏览一遍,不要细纠,目的是对 python 形成整体的认识,估计半个月时间吧,建立认知框架,边看边把从语句、表达式、顺序结构、判断结构、循环结构基本理论搞定,最后过度到函数抽象,类抽象。二.选一本覆盖面比较全的教材,我看的是深入python3和廖雪峰老师的教程,你可以选一本或者其他的,把例子敲一遍,看明白即可,看完肯定会忘…… 但是也不要回头再看, 通通看一遍就好, 目的是巩固掌握基础知识和查找位置,这本教材就是之后的参考书了。三、基于打好的基础后,再玩高级的应用:生成器、装饰器、类的一些属性的高级用法、正则、多线程、多进程等,学习框架文档。四、尽快利用python做点事情。前面三阶段要快,都是为这个阶段做铺垫,这时就可以利用所学解决下身边的事情了,比如看新闻说每年存一万五,四十年可以变亿万富翁,你可以验证下,我们要学以致用。学python是件开心的事,这时可能遇到各种困难,这时回头复习参考书上对应知识点,同时去谷歌百度,如果自己写不出来也可以参考别人的项目去做点事情,过一阵子对python了解后自己就知道该学啥了,是web开发,还是爬虫,或者数据分析,机器学习。我们拿Python自动化开发工程师为例,一个资深的系统运维工程师在北京工资7000到1万左右,如果会python编程,工资可以到达1.5万。好多系统运维工程师对学习python有动力和需求,但学习的方法都很惨,不知道学Python的你怎么样?
-
每次版本结束都描述这着同样的错误,相似的问题,但始终没见解决。所以今天,我就来总结下Python的错误与异常!异常与错误错误语法错误可以通过IDE或者解释器给出提示的错误opentxt('a.jpg','r')逻辑错误语法层面没有问题,但是自己代码的逻辑有问题if age>18: print('未成年')异常多指在程序执行过程中,出现的未知错误,语法和逻辑本身是正确的。可以通过代码进行处理或修复异常分类除零异常(ZeroDivisionError):1/0名称异常(NameError):if age>5,age未定义类型异常(TypeError): 1+'abc'索引异常(IndexError):a=[1,2,3] a[4]键异常(KeyError):a={'a':1,'b':2} a['c']值异常(ValueError)int('abcd')属性异常(AttributeError)name='Dracular' print(name.age)迭代器异常(StopIteration)a=iter([1,2]) print(next(a)) print(next(a)) print(next(a))系统异常类继承树(BaseException所有内建的异常基类) SystemExit由sys.exit(0函数引发,当他不处理时,python解释器退出)KeyboardInterrupt当用户中断操作引发(ctrl +c)GeneratorExit当调用一种generator的close()方法引发Exception所有内置的、非系统退出异常是从该类派生的,因为该类派生所有用户定义的异常异常处理格式多种异常捕获刚才介绍了很多异常的分类,也看到了异常处理的格式,那么针对多种异常如何更简洁的捕获呢?将多个异常通过元组归类到一起 except (ZeroDivisionError,NameError) as error:使用Exception这个基类全部捕获 except Exception as errorinfo:使用with处理异常用于执行一段代码前,进行预处理,执行完成这段代码后,进行清理操作with content_expression[as target(s)]: withbody大家用到最多的莫过于在读写文件时,使用with open为什么说他是一个上下文处理器呢?首先咱们在文件读写的时候主要分三个步骤:打开文件操作文件的内容关闭文件正常情况下,我们使用的方式为:那么如果我们在操作文件的时候,出现了异常导致系统退出,就无法正常的关闭文件但使用with的上下文管理器,就可以达到异常退出时的清理操作!可是没有论证,空口在这里吹逼不太好啊,举个例子来验证with自带的异常清理。先看下这段代码:我们在写文件的时候,手动触发一个异常,然后在except捕获异常后,去重命名该文件。然后由于没有正常的关闭,此时你去重命名会给出文件正在占用的提示那同样的方式,我们使用with操作看看效果:此时正常执行完成,程序没有抛出异常,为什么?因为在上下文处理器中,with捕获异常后,自动的执行了文件的关闭操作,溜不溜?上下文管理器原理所谓上下文管理器的原理,其实就是以下三点调用enter 方法,进行预处理操作执行用户操作调用exit方法,完成清理操作知道了原理,让我们通过自己编写的上下文管理器,重构一下open的方法,让它装逼即耀眼又安全吧完美结束….了解下刚才的__exit__刚才看到在定义__exit__方法时,自带了三个参数exctype, excval, exc_tb这是什么呢?分别为:异常类别,异常值,追踪信息,怎么看他的值呢?把上面代码中raise ValueError改为1/0在`__exit`方法中加入print(exc_type, exc_val, exc_tb)得到如下结果:<class 'ZeroDivisionError'> division by zero <traceback object at 0x00000000032BADC8>大家会问到追踪信息是什么呢?其实大家天天见….当你代码错误了,提示哪一行有问题的时候,这个帮你定位的东西,就是追踪信息。想看到追踪信息需要引入一个模块,traceback继续在__exit__中添加这两行信息import tracebackprint(traceback.extract_tb(exc_tb))output:[('E:/Python/xxxx/b.py', 21, '<module>', 'raise ValueError')]上面个list什么意思呢?错误的文件,错误的行号,文件类型,错误的语句是不是吊炸天?好了今天就学到这里,碎觉…..
-
编者按本文翻译整理自最新发布的 Python开发者调查。该调查由Python基金会与JetBrains于2019年秋季发起,调查对象来自150个不同国家的24000多名Python开发者。此调查结果可以作为学习、求职及了解Python语言生态的参考,希望对你有帮助。以下是该调查的一些基本情况(主要取各指标前三项或份额比重大于10%的项)Python基本使用情况Python作为主要语言及次要语言的比例作为主要语言:84%作为次要语言:16%与Python一起使用的其他语言(取前三位)主要:JavaScript、Bash/Shell、HTML/CSS次要:JavaScript、C/C++、HTML/CSS综合:JavaScript、Bash/Shell、HTML/CSS使用Python从事Web开发及数据科学的开发者对其他语言的使用情况数据科学:SQL、Bash/Shell、JavaScript、C/C++Web开发:JavaScript、HTML、SQL、Bash/ShellPython使用场景使用Python的主要场合工作及个人使用:58%个人、教育及业余项目:21%工作:21%Python的主要使用场景主要:数据分析、Web开发、机器学习次要:数据分析、DevOps/系统管理/自动化脚本综合:数据分析、Web开发、DevOps/系统管理/自动化脚本最常使用Python的场景主要:Web开发、数据分析、机器学习次要:DevOps/系统管理/自动化脚本、数据分析、Web开发综合:Web开发、数据分析、机器学习Python各版本使用情况Python3 vs Python2Python3:90%Python2:10%Python各版本对应场景分布:主要场景中使用比例(Python3 :Python2)数据分析:61% vs 42%Web开发:51% vs 45%机器学习:42% vs 20%Python3 各版本分布3.7:53%3.6:26%3.8:11%3.5:4%3.9:3%其他:3%安装及升级途径操作系统自带:35%(比如apt-get,yum,homebrew等)Python.org:31%Anaconda:20%Docker:17%pyenv:15%Python虚拟环境Virtualenv:56%Docker:33%Conda: 23%Pipenv:21%主要框架及库Web框架Flask:48%Django:44%Tornado:5%数据科学框架及库NumPy:63%Pandas:55%Matplotlib:46%SciPy:36%SciKit-Learn:33%TensorFlow:26%Keras:20%Seaborn:17%PyTorch:15%NLTK:14%大数据工具Apache Spark: 13%Apache Kafka: 9%Apache Hadoop/MapReduce: 7%其他框架及库Requests:56%Pillow:32%Asyncio:21%Scrapy:17%Tkinter:17%PyQT:15%Six:13%aiohttp:12%单元测试框架pytest:49%unittest:30%mock:15%#其他技术及云设施使用情况ORMSQLAlchemy:36%Django ORM:32%SQLObject:4%数据库PostgreSQL:47%MySQL:39%SQLite:39%MongoDB:20%Redis:20%MS SQL Server:10%云平台使用AWS:55%谷歌云:33%DigitalOcean: 22%Heroku:20%微软Azure:19%PythonAnywhere:12%如何在云端运行Python代码(生产环境)使用容器:47%使用虚拟机:46%使用PaaS服务:25%Serverless:24%开发环境本地使用virtualenv:56%使用容器:41%使用虚拟机:22%使用本地系统自带解释器:18%使用远程开发环境:17%#开发工具操作系统Linux:68%Windows:48%MacOS:29%持续集成系统(CI)Jenkins/Hudson:24%Gitlab CI:23%Travis CI:15%配置管理工具Ansible:20%个性化解决方案:9%Puppet:5%编辑器及IDE主要:PyCharm(33%)、VS Code(24%)、Vim(9%)数据科学:PyCharm(28)、VS Code(23%)、Jupyter Notebook(13%)Web开发:PyCharm(42%)、VS Code(26%)、Vim(10%)使用IDE的主要特性使用版本管理代码refactoring使用自动补全使用Python虚拟环境使用静态检查工具使用SQL数据库编写测试代码使用调试器使用问题跟踪在远程机器上运行、调试及编辑代码使用可选的类型提示使用代码覆盖检查就业市场工作状态全职:67%学生:10%在职学生:6%自主创业:6%自由职业者:5%职位开发者/程序员:73%Team Lead:19%数据分析:19%架构师:18%使用Python的经验3-5年:30%1-2年:23%少于1年:21%6-10年:17%11年以上:10%开发工作经验少于1年:29%1-2年:20%3-5年:20%11年以上:17%6-10年:14%团队工作 vs 独立工作在团队中工作:53%独立为自己的项目工作:44%咨询及培训:4%在多个项目工作的情况在多个项目中工作:45%在一个项目或者几个业余项目:40%只为一个项目工作:15%团队大小2-7人:75%8-12人:17%13-20人:5%21-40人:2%多余40人:2%公司规模51-500人:24%11-50人:19%多余5000人:18%2-10人:13%1001-5000人:10%公司所处行业信息技术/软件开发:42%科学:7%教育/培训:6%目标行业信息技术/软件开发:45%会计/财务/保险:4%销售/分销/商业拓展:4%年龄分布21-29岁:42%30-39岁:32%40-49岁:12%18-20岁:7%50-59岁:5%60岁以上:2%————————————————版权声明:本文为CSDN博主「nevercoder;」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/xiaochun41/java/article/details/105966540
-
译者 | 刘畅来源 | AI科技大本营(ID:rgznai100) 将早期的编程语言(例如COBOL)的代码库迁移到现在的编程语言(例如Java或C++)是一项艰巨的任务,它需要源语言和目标语言方面的专业知识。COBOL如今仍在全球大型的系统中广泛使用,因此公司,政府和其他组织通常必须选择是手动翻译其代码库还是尽力维护使用这个可追溯到1950年代的程序代码。 FaceBook公司开发了一个工具TransCoder,这是一个完全自我监督的神经编译器系统,它可以使代码迁移变得更加轻松和高效。本文的方法是第一个能够将代码从一种编程语言转换为另一种编程语言而无需并行数据进行训练的AI系统。本文已经证明TransCoder可以成功地在C++,Java和Python 3之间进行翻译功能。TransCoder的性能优于开源的代码和基于商业规则的翻译程序。在本文的评估中,该模型正确地将90%以上的Java函数转换为C++,将74.8%的C++函数转换为Java,并将68.7%的函数从Java转换为Python。相比之下,市售工具只能正确地将61.0%的功能从C++转换为Java,而开源的翻译器仅能准确地将38.3%的Java函数转换为C++。 自我监督训练对于在编程语言之间进行翻译特别重要。传统的有监督学习方法依赖于大规模的并行数据集进行训练,但是对于COBOL到C++或C++到Python来说,这些数据根本不存在。TransCoder只依赖于仅用一种编程语言编写的源代码,而不需要源代码和目标语言中的相同代码示例。它不需要编程语言方面的专业知识,并且可以很容易地将TransCoder的方法推广到其他编程语言中。本文还创建了专门为此领域设计的新的评估指标。 TransCoder对于将遗留代码库更新为现代编程语言可能很有用,现代编程语言通常更高效且易于维护。它还展示了一个神经机器翻译技术应用的新领域。与Facebook AI以前使用神经网络解决高级数学方程式的工作一样,本文认为NMT可以帮助完成通常与翻译或模式识别任务无关的其他任务。特意为编程语言建立序列到序列模型 在自然语言中,即使在越来越依赖自动化机器翻译系统的专业翻译人员群体中,神经机器翻译的最新结果也被广泛认可。但是,由于代码翻译领域中缺少并行数据,因此它们在该方面的应用受到了限制。程序员仍然依赖于基于规则的代码转换工具,这需要专家复查和调试输出,或者手动翻译代码。TransCoder通过利用无监督机器翻译到编程语言翻译取得的成功来克服这些挑战。 本文构建了一个带有注意力机制的序列到序列(seq2seq)模型,该模型由具有转换结构的编码器和解码器组成。TransCoder使用单个共享模型,部分基于Facebook AI以前在XLM上针对所有编程语言所做的工作。本文按照Facebook AI先前的研究中详细介绍的无监督机器翻译的三个原则进行了训练:初始化,语言建模和反向翻译。本文首先利用开源GitHub项目中的源代码使用蒙版语言模型(MLM)对本文的模型进行了预训练。就像自然语言处理中的上下文一样,这种预训练会创建跨语言的嵌入:在相似上下文中使用来自不同编程语言的关键字在嵌入空间(例如catch和except)中非常接近。这些嵌入的跨语言性质来自存在于多种语言中的大量通用的标记(锚点)。锚点的示例包括C++,Java和Python通用的关键字(例如,for,while,if,try),以及源代码中出现的数学运算符,数字和英语字符串。 使用MLM进行预训练使TransCoder可以生成输入序列的高质量表示。然而,由于从未训练过解码器基于源表示对序列进行解码,因此解码器缺乏翻译能力。为了解决此问题,本文训练了该模型使用降噪自动编码(DAE)对序列进行编码和解码。DAE的工作方式类似于有监督的机器翻译算法,在该算法中,模型被训练为在给定序列存在损坏的情况下预测该序列。作为输入给解码器的第一个符号是指示输出编程语言的特殊标记。在测试时,该模型可以对Python序列进行编码,并使用C++起始符号对其进行解码以生成C++翻译器。C++翻译的质量将取决于模型的“跨语言”:如果编码器将Python函数和有效的C++翻译映射到相同的潜在表示,则解码器将成功翻译成C++。 仅预训练的跨语言模型和自动降噪就足以进行翻译。但是,这些翻译的质量往往很低,因为从未训练过该模型在测试时应该完成什么样的工作,即从一种语言翻译为另一种语言的功能。为了解决此问题,本文使用反向翻译,这是在弱监督的情况下利用单语数据的最有效方法之一。对于每种目标语言,本文使用一个模型和一个不同的开始标记。它经过训练可以从源到目标以及从目标到源并行转换。目标到源版本用于将目标序列翻译成源语言,从而产生与标记目标(GT)序列相对应的嘈杂源序列。然后以弱监督的方式训练模型,让模型可以从嘈杂的源序列中重建目标序列,并学习从源到目标的转换。直到收敛为止。 为了评估该模型,以前对源代码翻译的大多数研究都依赖于自然语言中使用的度量标准,例如BLEU分数或其他基于标记之间相对重叠的方法。但是,这些类型的指标不太适合编程语言。语法差异小的两个程序在执行代码时可能会获得很高的BLEU分数,但会产生非常不同的结果。相反,具有不同实现方式的语义等效程序将具有较低的BLEU分数。另一种度量标准是参考匹配,或与GT完全匹配的翻译百分比,但这通常会低估翻译的质量,因为它无法识别语义上等效的代码。 为了更好地衡量TransCoder和其他代码翻译技术的性能,本文创建了一个称为计算精度的新指标,该指标可评估假设函数在给定相同输入时是否生成与参考相同的输出。我们还将发布测试集以及用于计算该指标的脚本和单元测试。下面的示例显示了TransCoder如何将示例代码从Python转换为C++。我们使用以上的代码作为模型输入:TransCoder成功将Python输入函数SumOfKsubArray转换为C++。它还可以推断参数的类型,返回类型和函数的参数。该模型将Python dequeue()容器附加到C++实现dequeue <>。下面是该模型在C++中的输出:最新研究并在实际应用中提供的帮助 自动代码翻译有可能使在公司或开源项目中工作的程序员更加高效,因为他们可以更轻松地集成公司内其他团队或其他开源项目的各种代码,还可以大大减少更新用早期语言编写的代码库的工作量和成本。 反编译的进步可能会促使公司和其他机构更新到最新的语言并促进未来的创新,这可能让使用服务的人们以及机构本身受益。编程语言机器翻译的进步也可以帮助那些没有时间学习多种语言编程的人。 更广泛地说,人工智能有潜力帮助其他编程任务。例如,Facebook AI以前共享了神经代码搜索,这是一种在查询代码中使用自然语言的方法。以及Getafix,该工具可学习自动为编码错误提供建议修复。虽然TransCoder并非旨在帮助调试或提高代码质量,但它可以帮助工程师迁移旧代码库或使用以其他语言编写的外部代码。 为了促进使用深度学习进行代码翻译的研究,本文还发布了一个测试集,该测试集使其他研究人员可以使用计算精度而不是语义盲模型来评估代码翻译模型。我们期待看到其他人如何在我们与TransCoder的合作基础上继续前进,并为新的翻译任务推进自我监督学习。转载自:CSDN论坛
-
问题描述:ubuntu18.04.1源码编译安装python3.7.5后,使用pip3.7.5 install xx,提示如下信息Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available解决方法:编译选项中,增加--with-ssl./configure --prefix=/usr/local/python3.7.5 --enable-shared --with-sslPython3.7.5源码安装完整流程:1.安装依赖sudo apt-get install -y gcc make cmake unzip zlib1g zlib1g-dev libsqlite3-dev openssl libssl-dev libffi-dev pciutils net-tools2.下载、解压、编译安装wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgztar -zxvf Python-3.7.5.tgzcd Python-3.7.5 ./configure --prefix=/usr/local/python3.7.5 --enable-shared --with-ssl make sudo make install3.将编译后的文件libpython3.7m.so.1.0复制到/usr/lib64sudo cp /usr/local/python3.7.5/lib/libpython3.7m.so.1.0 /usr/lib644.执行如下命令设置软链接:sudo ln -s /usr/local/python3.7.5/bin/python3 /usr/bin/python3.7 sudo ln -s /usr/local/python3.7.5/bin/pip3 /usr/bin/pip3.7 sudo ln -s /usr/local/python3.7.5/bin/python3 /usr/bin/python3.7.5 sudo ln -s /usr/local/python3.7.5/bin/pip3 /usr/bin/pip3.7.55.执行上述软链接时如果提示链接已经存在,则可以先执行如下命令删除原有链接然后重新执行。sudo rm -rf /usr/bin/python3.7.5 sudo rm -rf /usr/bin/pip3.7.5 sudo rm -rf /usr/bin/python3.7 sudo rm -rf /usr/bin/pip3.76.安装完成之后,执行如下命令查看安装版本,如果返回相关版本信息,则说明安装成功。python3.7.5 --version pip3.7.5 --version
-
【转载华为云社区】最近,TIOBE更新了7月的编程语言榜单,常年霸榜的C、Java和Python依然蝉联前三位。万万没想到的是,R语言居然冲到了第八位,创下了史上最佳记录。而且后续随着业内对数据统计和挖掘需求的上涨,R语言热度颇有些势不可挡的架势然而作为程序员吃饭的工具,编程语言之间也形成了某种鄙视链,各大论坛里弥漫着剑拔弩张的气氛,众口难调。也难怪有很多初学者会有疑惑,为什么会有这么多编程语言,我到底应该学什么语言?回顾编程语言几十年来的兴衰起伏,似乎也折射了整个信息产业的变迁消亡,想要在技术的洪流里激流勇进,找准并学精一两门编程语言更加显得至关重要。编程语言的黄金时代“有人不喜欢花括号,开发了Python;有人在一个周末设计了出了JavaScript;有人因为上班太无聊,于是发明了C语言”。关于编程语言的八卦轶事很多,但归根结底,一个编程语言的诞生一定是需求的推动。从面向机器的语言、面向过程的语言到面向对象的语言,编程语言的历史也经历了由繁到简。而互联网崛起的90年代,无疑也是编程语言的黄金时代。套用维基百科的总结,“1990年代未见到有什么重大的创新,大多都是以前构想的重组或变化。”但就是这样的一个时代,却是各种编程语言大放异彩的开始。彼时最主流的编程语言是贝尔实验室两位大佬发明的C/C++语言,互联网的载体计算机的基础设施,都是用这套语言来编写的,包括Linux操作系统、数据库、编译器等等。这也奠定了C语言在IT领域的地位,只要有计算机的存在,C/C++肯定会有它们的一席之地。但后来者居上的故事也随时在发生,这里的主角是已经落幕的昔日巨头网景和Sun。1994年,网景发布了一款真正的网络浏览器Navigator,但受限于当时的技术限制,Navigator更像是一个本地展示页面,不具备任何交互功能。巧的是,Sun公司在1995年正式向市场推出他们开发的Java(即Oak语言),特点是“一次编写,到处运行”,网景看中了这个潜力股,选择与Sun结盟。当时的Java可以作为脚本嵌入到网页中实现交互功能,即我们所熟知的Java Applet。然而,网景认为Java作为网页脚本还是过于复杂,程序员Brendan Eich就在10天内,集百家之长,开发了Javascript,如今所有浏览器前端库都需要基于JavaScript实现。计算机的普及、互联网的崛起,Web应用的出现,Ruby、PHP等语言也悉数登场。如知乎作者“强哥学堂”述,“这段时间,虽然没有创造编程语言,但是由于大量企业的参与,编程语言得到了空前的发展,形成了今天的编程语言的基本形态。也使得软件开发越来越标准化,规模化。”与此同时,还有一些“小众”的编程语言,正蓄势待发中,等待着“爆红”的机会。苹果的搅局,生态很关键2010年iPhone 4问世,乔布斯用智能手机改写了之后的互联网发展轨迹。iOS和Android支撑起的智能手机市场,让移动互联网成为绝对的舞台主角。苹果开创了一个全新的生态,作为iOS的应用开发语言,始于1984年的Objective-C从籍籍无名走向声名大噪,依托各种iPhone、iPad应用程序的开发,Objective-C曾一度挺进TIOBE排行榜的Top 3。不过,苹果在2014年的WWDC上推出了新的编程语言Swift,支持编写macOS/OS X、iOS、iPadOS、watchOS和tvOS的软件应用,并在第二年宣布开源、支持Linux。自此之后,Objective-C的市场份额逐年递减,从2014年的12%下降到2016年的1%。从下图也可以看出,新语言Swift从0开始,这几年一直处于稳定增长中,今年1月也冲进了TIOBE榜单的第九位。虽然一门计算机语言从编译器、语法、基础库到在程序员的圈子中普及,并不是短时间可以一蹴而成,但苹果仍然以一己之力将Objective-C和Swift带入了编程语言的主流市场,由此可见,编程语言和一个产品的生态规模息息相关。微软和Visual Basic的关系也是如此,移动互联网时代之前,VB曾经依靠可视化的开发环境,成为最炙手可热的桌面开发工具,并一度拥有300万开发者。而且借助Windows操作系统市场优势,VB如今也一直保持着居高不下的热度(遗憾的是,微软表示不打算继续演化 Visual Basic了)。回到移动互联网时代,另一边的Android选择的是Java,随着Android阵营的越来越庞大,Java一直是TIOBE榜单上的第一,成绩最差也能拿个第二。一个编程语言的长盛不衰,除了它本身的优势之外,其生态的建设也至关重要,毕竟用的人多了,也就能自成一派,这一点在Python的流行中体现的淋漓尽致。大数据+AI时代,Python一骑绝尘当学Python要从娃娃抓起的口号开始流行时,编程语言从IT圈子进入到大众圈。大数据、AI的时代,Python可以说是一骑绝尘,从数据分析、机器学习、Web开发到爬虫开发都可以在Python的帮助下非常轻松的解决。统计分析人员可以用Python解决数据爬取和分析的问题,大学生可以用Python解决租房的问题……最关键的是,Python的学习门槛比C++,Java都要低,简洁的语法、成熟的第三方库,即使是非程序员群体,也能在短时间内速成。用于统计分析、绘图、数据挖掘的R语言也是如此,赶上了数据应用分析的潮流,自然能从众多编程语言中脱颖而出。针对今年7月榜单R语言创纪录的成绩,TIOBE的 CEO Paul Jansen 明确表示有两大趋势起着关键作用:一是商业统计语言和软件包(如 SAS、Stata 和 SPSS)的时代已经结束,大学和研究机构采用Python和R进行统计分析;二是与COVID-19相关的研究需要进行大量统计和数据挖掘,所以易于学习和使用的统计编程语言热度上升。再比如诞生于2010年,由Mozilla主导开发的Rust语言,其更加强调安全性、存储器配置、以及并发处理等特性。去年Facebook推出的区块链项目Libra,就选择了Rust语言来构建,因为它足够安全。Rust的排名也从2012年的200名开外,在最新一期TIOBE榜单上冲进了Top20。我们以互联网的崛起为分界线,可以看到各个编程语言的此消彼长,必然伴随着新的产品和技术。顺应新技术发展的编程语言,即便时隔几十年,也可以重新焕发光彩。而且随着开源社区的壮大,一门优秀的编程语言可以博采众家之长,成长为后起之秀。结语如果你想以编程语言立生,建议你先学习Java,然后是Python和C++,因为这三种编程语言,基本上可以解决我们工作中遇到的大部分问题。所以,不妨先试试华为云推出的Java开发全栈成长计划,让你0基础入门,构建Java技能体系,向全栈工程师迈进!最后,如C#之父Anders Hejlsberg曾总结:如果要我概括在未来十年编程语言会变成什么样,首先,我认为编程语言应该变得更加“声明式”,我们需要设法为语言引入一些如元编程,函数式编程的能力,同时可能也要寻找让用户有办法扩展语法,使他们可以构造领域特定语言等等。不过总体来说我想强调的是,对于编程语言,新的范式则是“多范式”编程语言。本文部分内容有参考以下文章:1、《IT行业激荡30年->编程语言变迁史》https://zhuanlan.zhihu.com/p/1068080452、《计算机和编程语言的发展历史》https://blog.csdn.net/abc6368765/article/details/83990756
-
-
开!奖!啦!领奖方式见论坛私信,反馈朋友圈分享截图凭证与收货地址~截止到活动结束(7月12日24:00)总楼层为33,向下取整,获奖用户如下:抽取本帖总楼层数的30%:9.9层 即第9层 获得优质评论奖 100元京东卡抽取本帖总楼层数的60%:19.8层 即第19层 获得幸运奖 华为云定制双肩包抽取本帖总楼层数的90%:29.7层 即第29层 获得参与奖 华为云定制鼠标垫————————————————————————————————————(文!末!有!惊!喜!)这届应届生实在太难了!云毕业照、云授学位、云拨穗、云毕业典礼……疫情之下,2020年的毕业季显得有些特别。这一届毕业生们,既不能和同学们集体狂欢到天明,也面临着非常严峻的就业环境。疫情之下,从毕业到求职、租房,社会新鲜人又该如何苦中作乐,弥补遗憾,度过这个特殊的毕业季呢?且看以下疫情毕业生求生技术指南。【指南一:AI换脸,拍一张个人专属毕业照】如果问毕业季最有仪式感的事情是什么?非毕业照莫属。学士服穿上身,pose摆起来,大学四年才能算圆满。但疫情之下,不少人在朋友圈里感叹失去了可能是唯一一次穿学士服的的机会。那么试试AI换脸技术,拍一张个人专属的毕业照吧!先上最后的效果: 想要多人合照,安排:还能更换背景、樱花树下、未名湖畔,任意切换:这一套 “云拍照”系统便是基于华为ModelArts平台操作的。实现过程很简单:1、人脸检测;2、人脸融合;3、模型部署成在线服务是的,只要这三步,人人都可以成为云毕业照的掌镜师。展开来说,我们先使用dlib库中的shape_predictor方法,通过68个可以显著代表人脸特征的特征点采集人脸信息,得到换脸人像和被换脸人像的人脸掩模,最后通过泊松融合合成换脸后的毕业照。稍微有点复杂的是多人合照,因为它涉及到对上传照片中每一张人脸位置的检测,主流的方法是用神经网络检测,但编写难度、硬件要求较高。华为云ModelArts自动学习中的“物体检测”和“一键训练部署”功能可以轻松解决这个问题。打开华为云ModelArts控制台,点击【自动学习】,就进入了配置界面。选定数据集输出和输出位置之后,点击创建项目,进入到【数据标注】界面中。在数据标注界面,可以很方便地上传数据,通过鼠标框选的方式进行人脸数据的标注,完成数据集的标注后,点击【开始训练】按钮。训练完成时,会自动部署在线预测服务,通过调用在线服务,就可以实现人脸检测功能。整个项目的流程其实很简单,感兴趣的同学可以去ModelArts上动手DIY一个。也可以点击右边链接,直接生成自己的专属毕业照:http://119.3.249.156:32123/部分内容参考自:https://bbs.huaweicloud.com/blogs/174983 【指南二:技术党上线,租房神器合理规划最佳租房地点】租房,往往是比求职更让应届毕业生痛苦的事情。对租房新手来说,一没钱,二不熟悉交通,三对中介一无所知。想要快速找到工作地点附近性价比最高的租房点和房源,基本不可能。但知识就是力量,有人就通过高德API+Python爬虫解决了这个租房难题(https://bbs.huaweicloud.com/blogs/147439)。原理也很简单,先分析需要爬取的页面,提取房源的名称、地址、租金等信息,然后编写运行Python脚本,生成rent.csv,再借助高德的JavaScript API示例搭建页面,调用相关API。实验中会用到三个文件:crawl.py、rent.csv和index.html,其中rent.csv由crawl.py生成,是房源文件,crawl.py是一个非常简单的爬取网页的脚本,index.html是最重要的显示地图的部分。大功告成后,选择你的工作地点,页面会自动标记一小时的通勤范围,导入爬取的房源文件,任选一处房源便可以自动规划路径。下面我们以在北京望京SOHO附近租房为例,首先输入地址,地图中蓝色块就是距离望京SOHO一小时车程(地铁+公交)的范围。确定好地点后,导入爬取的房源文件(这里我们使用的原博主提供58同城的租房信息),地图上显示的蓝色地点标记就是所有的房源。在蓝**域里任意点击一个蓝色地点标记,可以获取房源所在的小区,点击小区名称会自动跳转到58同城的页面,列出房源的详细信息(地址、租金、环境),同时自动规划出从房源到公司的路径。由于只爬取了58同城上的公寓,所以房源数量较少。大家可以按需制作Python脚本,比如根据租房区域、价格、类型等要求来筛选房源,同时抓取我爱我家、贝壳租房、自如、豆瓣小组等租房平台的数据。这样就轻松迈出了租房的第一步:在海量数据中快速筛出最合适的房源。最后,再顺便安利一个公交辐射地图https://bus.daibor.com/,可以定位查询直达公司的公交线路,顺着图中的彩色线条,或许也能发现性价比高的的房源。【指南三:最难就业季,Classroom助你拿下大厂offer】求职和租房,一直是毕业生的两大难。尤其是在今年的就业形势下,应届生想要拿到满意的offer更是难上加难。那么,最难就业季,初出茅庐的大学生如何能够拿下大厂offer?华为高校教育解决方案专家张宇最近就在直播中分享了他的几点心得,核心点就是从学校到企业的蜕变,关键在于突破个人瓶颈,提升自己的技术能力。如果想短期内获得大幅提升,只有一条路:站在巨人的肩膀上。华为云Classroom平台就是这个“巨人”。在Classroom上(https://classroom.devcloud.huaweicloud.com/),华为工程师依托海量企业级项目,总结了他们的实战经验和技术方案,制作成通俗易懂的体系化课程免费提供给大家,帮助提升技术能力。比如张宇老师主讲的WEB前端全栈成长计划,让你0基础入门、3个月构建前端技能体系,课程覆盖HTML/JavaScript/Node.js等核心知识点,助力你向全栈工程师迈进。Classroom上还有诸如Python、Java、AI相关的基础课程、习题库和实验,满足入门到进阶的巩固学习提高,以及云端实验室,让你直接动手完成网站搭建、人脸识别、实时对战游戏开发等一系列有趣又好玩的项目。比如上文提到的AI毕业照,就可以在这个实验室轻松get。同时,华为云Classroom还会举办面试培训会,比如之前为湖南师范大学开设的Java专场,就请到了拥有12年IT教育工作经验的华为高级培训专家鲍国钰,分享了毕业生在Java面试过程中需要着重准备以及注意的相关知识点,并在华为云Classroom平台上线了大厂招聘的笔试真题供同学们自测。【指南四:刷题神器:一个月从入门到offer,你值得拥有】对于准备一脚踏入程序员职业生涯的毕业生来说,面试前的刷题也很重要,所以程序员最爱逛的网站上刷题攻略常年排在首页推荐,GitHub上更是有无数个刷题攻略,最高有5000颗星的标记。以斩获最高星的项目为例(https://github.com/greyireland/algorithm-pattern),作者表示该项目是自己找工作时,从 0 开始刷 LeetCode 的心得记录,最终通过各种刷题文章、专栏、视频等总结了一套自己的刷题模板。在内容划分方面,入门篇分为go语言和算法,数据结构主要包括二叉树、链表、栈和队列等,往下是算法相关,比如二分搜索、排序算法、递归思维等。至于刷题路径,总结起来很简单,首先来一套高频知识点的练习题,不会就直接跳过;然后再刷LeetCode的探索卡片巩固知识点;第三步就是有针对性地练习大厂的面试题。作者总结,刷完这些练习题,基本对数据结构和算法有自己的认识体会,他从4月份找工作开始,从0刷LeetCode,中间大概花了一个半月左右时间刷完240题,成功拿下一线互联网大厂的offer。至于面试到底要刷多少题,作者表示取决于你想进什么样公司,如果是BAT、华为这样的大厂,200至300题就基本满足大部分面试需要了。所以,面试前临时抱佛脚的最佳选择:刷题模板走一套。【衷心的祝福】初入社会的小可爱们,AI毕业照、租房神器、面试技能速成、刷题神器,总有一款适合你,帮你顺利度过这个略有些黯淡的毕业季。最后,诚挚的祝愿所有毕业学子长风破浪会有时,直挂云帆济沧海,前程似锦!【互动有奖】参与方式一:直接在本帖回复(选其中一个话题即可,不少于20字)1、疫情之下,你所在的公司裁员了吗?缩紧预算了吗?如何提高职场竞争力 / 技术能力才能抵抗住裁员大潮?2、这届毕业生太难了!疫情之下,你中招了吗?求职路上遇到了何种难题?又是如何化解的呢?参与方式二:分享本文到朋友圈,设置全体可见并保留至开奖日(7月13日,下周一),并截图回复本帖即可参与抽奖~加上自己的评论和见解更佳!注:开奖时若出现朋友圈删除的情况,华为云有权取消中奖资格并顺延至下一楼层哦【活动时间】即日起至7月12日24:00【奖品设置】· 优质评论奖 100元京东卡· 幸运奖 华为云定制双肩包· 参与奖 华为云定制鼠标垫【评奖规则】抽取本帖总楼层数的30%,60%, 90%,可分别获得奖励(向下取整,例如总楼层为61层,61*30%为18.3层,即第18层)注:1、按对应楼层的评论内容质量评定获奖等级。2、只抽取有效回帖,无关内容则顺延到下一楼层。3、三种礼品不可重复由同一人获取且不接受更换。
-
【转载华为云社区】这篇文章有很大的意义这样避免了花钱的音乐 希望大家喜欢~5月和朋友聊天,决定开设一个公众号,以博客的方式每天记载Python知识和有趣的内容。之后经过前期准备与摸索终于在5月31号,首次在公众号尝试发文,而今已过两月时间。刚开始每天下班就期待着开始自己所谓的创作,而现在每晚发愁该写些什么来满足大家的口味;起初媳妇儿大力支持我学习,如今因为写公众号没时间陪家人,时而会引发矛盾。细数两个月更新56篇的文章,用一位简书朋友的评论高产似母猪,哈哈….由于做公众号的初衷,是整理学习内容,而非多数人那样的想将自媒体作为副业,所以没有找过大号求推荐,也没有主动向其他公众号推荐文章。起初让朋友帮忙发个朋友圈扩散下,之后就是每天清晨转发下自己的文章,偶尔将文章转载至公司内网博客。大家都说东西再好不宣传也没人知道,但两个月下来收获了800粉丝,还是让我很感动。不知道还能这样每周五篇的坚持更新多久,因为自从开了公众号,每天都是2、3点睡觉,两个月下来严重缺乏睡眠,而且经常熬夜最近胃病又犯了。但对比之前每天回来刷刷抖音、看小说、做做饭的日子充实多了。只希望能得到家人和朋友们更多的支持,谢谢大家。不知道什么时候开始,中国出现了南抖音、北快手的互文格局(东市买骏马,西市买鞍鞯…)。刚才提到了,之前比较喜欢刷抖音,对于我这种佛系程序猿,看网上这些整容妹子基本一个样。喜欢抖音主要是两个初衷,学做菜听音乐。朋友之前常说,人家抖音看妹子看的乐呵呵,你看人家做菜也能津津有味,一个人在那儿傻笑…民以食为天,我看到色香味俱全的菜,做的那么好吃的乐呵乐呵还不行么。抖音捧红了很多人,也让很多本不怎么让大家熟知的歌曲、BGM,经过翻唱、混剪与视频搭配,从而传播大街小巷。什么“若不是你,突然闯进我心里…”亦或者“也许未来遥远在光年之外,我愿守候未知里为你等待…”,成了大家闲时在嘴边哼唱的调调。那么,有没有想过将这些好听的剪辑批量下载下来呢?python下载抖音内容的帖子网上有一些,但都比较麻烦,需要通过adb连接安卓手机后,模拟操作。我这么懒,这种事儿玩不来…那么,该如何获取抖音内容呢?网上搜了下大概有两种方式,一个是浏览器插件快抖,另外一个是我今天要说的抖音网页版。其实这两者差别不是很大,都是先将抖音内容下载至服务器后,通过开发简单网站配置域名后,让大家访问。让我们来看看抖音网页版:哎哟吼,居然看到了昨天爬虫的“乔奶奶”…当然今天的重点不是视频,而是下载它全站所有的音乐!大家先开看看这个抖音热歌榜歌曲,每页20首歌曲,一个55页。但细不细心大家都能发现,很多歌曲存在重复的问题。所以,等下爬虫的时候,我们需要先准备一个music_list,用来识别这首歌曲是否已经下载过了…网页解析网页比较简单,一个div中包裹了一个ul>li*20,我们是不是该这样获取:soup.find('div',{"class":"pull-left"}).find('ul').findAll('a')如果你说是,那么一定没有好好看我前天整理的文章通过哪吒豆瓣影评,带你分析python爬虫快速入门:https://www.jianshu.com/p/ae38f7607902,我在文章中专门提到了一个小技巧,通过使用attr的属性进行快速解析,那么最快速的获取方式是:soup.findAll('a', attrs={'onclick': True})我们只需要获取所有的a标签,切这些标签中包含onclick这个属性即可。巧用eval我们解析到的内容通过attr[‘onclick’],可以得到他的属性open1(‘夜’,’http://p9-dy.byteimg.com/obj/61a20007a98954b0831d),如何能快速获取歌曲名字和url呢?这里我们需要用到一个eval的小技巧:index = "open1('夜','http://p9-dy.byteimg.com/obj/61a20007a98954b0831d','')"index[5:]"('夜','http://p9-dy.byteimg.com/obj/61a20007a98954b0831d','')"index_tuple = eval(index[5:])print(index_tuple, type(index_tuple))('夜', 'http://p9-dy.byteimg.com/obj/61a20007a98954b0831d', '') <class 'tuple'>index_tuple[0]'夜'index_tuple[1]'http://p9-dy.byteimg.com/obj/61a20007a98954b0831d'ps:今天一个朋友说我写代码没注释,我这是现身说法的告诉你,如何能写出让别人压根看不懂的代码,就是不写注释啊,哈哈!其实,代码我都在文章中一点一点的讲解了,所以没有写,但秉承着害怕大佬们取关的心态,我还是把注释加上吧…总体来说实现比较简单,全部代码如下:# -*- coding: utf-8 -*-# @Author : 王翔# @JianShu : 清风Python# @Date : 2019/7/31 23:25# @Software : PyCharm# @version :Python 3.7.3# @File : DouYinMusic.pyimport osimport requestsfrom bs4 import BeautifulSoupimport threadingimport timeclass DouYinMusic: def __init__(self): self.music_list = [] self.path = self.download_path() @staticmethod def download_path(): """ 获取代码执行目录,并在目录下创建Music文件夹 :return Music文件夹全路径 """ base_dir = os.path.dirname(os.path.abspath(__file__)) _path = os.path.join(base_dir, "Music") if not os.path.exists(_path): os.mkdir(_path) return _path def get_request(self, url): """ 封装requests.get方法 如果为网页请求,返回网页内容 否则,解析音乐地址,并返回音乐二进制文件 :param url: 请求url(分网页、音乐两类) :return: 网页内容 & 音乐二进制文件 """ r = requests.get(url, timeout=5) if url.endswith('html'): return r.text else: return r.content def analysis_html(self, html): """ 根据获取的网页内容,解析音乐名称、下载地址 调用音乐下载方法 :param html: 网页内容 """ soup = BeautifulSoup(html, 'lxml') # 根据关键字onclick查找每个下载地址 for tag_a in soup.findAll('a', attrs={'onclick': True}): # 下载格式'("name","link","")',通过eval将str转化为tuple类型 link_list = eval(tag_a['onclick'][5:]) music_name, music_link = link_list[:2] # 因为存在部分重复音乐,故设置判断下载过的音乐跳过 if music_name in self.music_list: continue self.music_list.append(music_name) t = threading.Thread(target=self.download_music, args=(music_name, music_link)) time.sleep(0.5) t.start() def download_music(self, music_name, music_link): """ 解析音乐文件,完成音乐下载 :param music_name: 音乐名称 :param music_link: 下载地址 """ _full_name = os.path.join(self.path, music_name) with open(_full_name + '.mp3', 'wb') as f: f.write(self.get_request(music_link)) print("抖音音乐:{} 下载完成".format(music_name)) def run(self): """ 主方法,用于批量生成url """ for page in range(1,55): url = "http://douyin.bm8.com.cn/t_{}.html".format(page) html = self.get_request(url) self.analysis_html(html)if __name__ == '__main__': main = DouYinMusic() main.run()来看看效果:网站是通过nginx负载均衡搭建的,有一些链接已经失效了。最终下载了不重复的592首抖音音乐。
-
目前pypi官方提供的支持aarch64的预编译whl包非常少,自己编译安装又慢又麻烦,鲲鹏官方有计划提供常用的预编译whl包吗?
-
【文章的来源(华为云社区)】一、jQuery动画效果jQuery提供的一组网页中常见的动画效果,这些动画是标准的、有规律的效果;同时还提供给我们了自定义动画的功能。1、显示动画方式一:无参数,表示让指定的元素直接显示出来。其实这个方法的底层就是通过display: block;实现的。$("div").show();方式二:通过控制元素的宽高、透明度、display属性,逐渐显示,例如:3秒后显示完毕。$('div').show(3000);方式三:和方式二类似,也是通过控制元素的宽高、透明度、display属性,逐渐显示。$("div").show("slow");参数说明:slow 慢:600ms normal 正常:400ms fast 快:200ms方式四:动画执行完后,立即执行回调函数。//show(毫秒值,回调函数; $("div").show(5000,function () { alert("动画执行完毕!"); });总结:上面的四种方式几乎一致:参数可以有两个,第一个是动画的执行时长,第二个是动画结束后执行的回调函数。2、隐藏动画方式参照上面的show()方法的方式。如下: $(selector).hide(); $(selector).hide(1000); $(selector).hide("slow"); $(selector).hide(1000, function(){});练习 : 实现点击按钮显示盒子,再点击按钮隐藏盒子实现点击按钮显示盒子,再点击按钮隐藏盒子:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> #box{ width: 200px; height: 200px; background-color: green; border: 1px solid red; display: none; } </style> </head> <body> <div id="box"> </div> <button id="btn">隐藏</button> </body> <script src="jquery-3.3.1.js"></script> <script type="text/javascript"> //jquery 提供了一些方法 show() hide() 控制元素显示隐藏 var isShow = true; $('#btn').click(function(){ if(isShow){ $('#box').show('slow',function(){ $(this).text('盒子出来了'); $('#btn').text('显示'); isShow = false; }) }else{ $('#box').hide(2000,function(){ $(this).text(''); $('#btn').text('隐藏'); isShow = true; }) } }) </script> </html>3、开关式显示隐藏动画$('#box').toggle(3000,function(){});显示和隐藏的来回切换采用的是toggle()方法:就是先执行show(),再执行hide()。代码如下:$('#btn').click(function(){ $('#box').toggle(3000,function(){ $(this).text('盒子出来了'); if ($('#btn').text()=='隐藏') { $('#btn').text('显示'); }else{ $('#btn').text('隐藏'); } }); })4、滑入和滑出1、滑入动画效果:(类似于生活中的卷帘门):下拉动画,显示元素。$(selector).slideDown(speed, 回调函数);注意:省略参数或者传入不合法的字符串,那么则使用默认值:400毫秒(同样适用于fadeIn/slideDown/slideUp)2、滑出动画效果: 上拉动画,隐藏元素。$(selector).slideUp(speed, 回调函数);3、滑入滑出切换动画效果:$(selector).slideToggle(speed, 回调函数);代码如下:示例:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> div { width: 300px; height: 300px; display: none; background-color: green; } </style> <script src="jquery-3.3.1.js"></script> <script> $(function () { //点击按钮后产生动画 $("button:eq(0)").click(function () { //滑入动画: slideDown(毫秒值,回调函数[显示完毕执行什么]); $("div").slideDown(2000, function () { alert("动画执行完毕!"); }); }) //滑出动画 $("button:eq(1)").click(function () { //滑出动画:slideUp(毫秒值,回调函数[显示完毕后执行什么]); $("div").slideUp(2000, function () { alert("动画执行完毕!"); }); }) $("button:eq(2)").click(function () { //滑入滑出切换(同样有四种用法) $("div").slideToggle(1000); }) }) </script> </head> <body> <button>滑入</button> <button>滑出</button> <button>切换</button> <div></div> </body> </html>5、淡入淡出动画1、淡入动画效果:让元素以淡淡的进入视线的方式展示出来。 $(selector).fadeIn(speed, callback);2、淡出动画效果:让元素以渐渐消失的方式隐藏起来$(selector).fadeOut(1000);3、淡入淡出切换动画效果:通过改变透明度,切换匹配元素的显示或隐藏状态。$(selector).fadeToggle('fast', callback);参数的含义同show()方法。代码如下:示例:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> div { width: 300px; height: 300px; display: none; /*透明度*/ opacity: 0.5; background-color: red; } </style> <script src="jquery-3.3.1.js"></script> <script> $(function () { //点击按钮后产生动画 $("button:eq(0)").click(function () { // //淡入动画用法1: fadeIn(); 不加参数 $("div").fadeIn(); // //淡入动画用法2: fadeIn(2000); 毫秒值 // $("div").fadeIn(2000); // //通过控制 透明度和display //淡入动画用法3: fadeIn(字符串); slow慢:600ms normal正常:400ms fast快:200ms // $("div").fadeIn("slow"); // $("div").fadeIn("fast"); // $("div").fadeIn("normal"); //淡入动画用法4: fadeIn(毫秒值,回调函数[显示完毕执行什么]); // $("div").fadeIn(5000,function () { // alert("动画执行完毕!"); // }); }) //滑出动画 $("button:eq(1)").click(function () { // //滑出动画用法1: fadeOut(); 不加参数 $("div").fadeOut(); // //滑出动画用法2: fadeOut(2000); 毫秒值 // $("div").fadeOut(2000); //通过这个方法实现的:display: none; // //通过控制 透明度和display //滑出动画用法3: fadeOut(字符串); slow慢:600ms normal正常:400ms fast快:200ms // $("div").fadeOut("slow"); // $("div").fadeOut("fast"); // $("div").fadeOut("normal"); //滑出动画用法1: fadeOut(毫秒值,回调函数[显示完毕执行什么]); // $("div").fadeOut(2000,function () { // alert("动画执行完毕!"); // }); }) $("button:eq(2)").click(function () { //滑入滑出切换 //同样有四种用法 $("div").fadeToggle(1000); }) $("button:eq(3)").click(function () { //改透明度 //同样有四种用法 $("div").fadeTo(1000, 0.5, function () { alert(1); }); }) }) </script> </head> <body> <button>淡入</button> <button>淡出</button> <button>切换</button> <button>改透明度为0.5</button> <div></div> </body> </html>6、自定义动画语法:$(selector).animate({params}, speed, callback);作用:执行一组CSS属性的自定义动画。第一个参数表示:要执行动画的CSS属性(必选)第二个参数表示:执行动画时长(可选)第三个参数表示:动画执行完后,立即执行的回调函数(可选)代码如下:示例:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> div { position: absolute; left: 20px; top: 30px; width: 100px; height: 100px; background-color: green; } </style> <script src="jquery-3.3.1.js"></script> <script> jQuery(function () { $("button").click(function () { var json = {"width": 500, "height": 500, "left": 300, "top": 300, "border-radius": 100}; var json2 = { "width": 100, "height": 100, "left": 100, "top": 100, "border-radius": 100, "background-color": "red" }; //自定义动画 $("div").animate(json, 1000, function () { $("div").animate(json2, 1000, function () { alert("动画执行完毕!"); }); }); }) }) </script> </head> <body> <button>自定义动画</button> <div></div> </body> </html>7、停止动画$(selector).stop(true, false);参数说明:第一个参数: true:后续动画不执行。 false:后续动画会执行。 第二个参数: true:立即执行完成当前动画。 false:立即停止当前动画。PS:参数如果都不写,默认两个都是false。实际工作中,直接写stop()用的多。示例:鼠标悬停,弹出下拉菜单:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> * { margin: 0; padding: 0; } ul { list-style: none; } .wrap { width: 330px; height: 30px; margin: 100px auto 0; padding-left: 10px; background-color: pink; } .wrap li { background-color: green; } .wrap > ul > li { float: left; margin-right: 10px; position: relative; } .wrap a { display: block; height: 30px; width: 100px; text-decoration: none; color: #000; line-height: 30px; text-align: center; } .wrap li ul { position: absolute; top: 30px; display: none; } </style> <script src="jquery-3.3.1.js"></script> <script> //入口函数 $(document).ready(function () { //需求:鼠标放入一级li中,让他里面的ul显示。移开隐藏。 var jqli = $(".wrap>ul>li"); //绑定事件 jqli.mouseenter(function () { $(this).children("ul").stop().slideDown(1000); }); //绑定事件(移开隐藏) jqli.mouseleave(function () { $(this).children("ul").stop().slideUp(1000); }); }); </script> </head> <body> <div> <ul> <li> <a href="javascript:void(0);">一级菜单1</a> <ul> <li><a href="javascript:void(0);">二级菜单2</a></li> <li><a href="javascript:void(0);">二级菜单3</a></li> <li><a href="javascript:void(0);">二级菜单4</a></li> </ul> </li> <li> <a href="javascript:void(0);">二级菜单1</a> <ul> <li><a href="javascript:void(0);">二级菜单2</a></li> <li><a href="javascript:void(0);">二级菜单3</a></li> <li><a href="javascript:void(0);">二级菜单4</a></li> </ul> </li> <li> <a href="javascript:void(0);">三级菜单1</a> <ul> <li><a href="javascript:void(0);">三级菜单2</a></li> <li><a href="javascript:void(0);">三级菜单3</a></li> <li><a href="javascript:void(0);">三级菜单4</a></li> </ul> </li> </ul> </div> </body> </html>上方代码中,关键的地方在于,用了stop函数,再执行动画前,先停掉之前的动画。
-
常用降维方法-常用降维方法解读1. 引言 机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达,目前最多使用向量表达形式。 y是数据点映射后的低维向量表达,通常y的维度小于x的维度(当然提高维度也是可以的)。f可能是显式的或隐式的、线性的或非线性的。 目前大部分降维算法处理向量表达的数据,也有一些降维算法处理高阶张量表达的数据。之所以使用降维后的数据表示是因为在原始的高维空间中,包含有冗余信息以及噪音信息,在实际应用例如图像识别中造成了误差,降低了准确率;而通过降维,我们希望减少 冗余信息 所造成的误差,提高识别(或其他应用)的精度。又或者希望通过降维算法来寻找数据内部的本质结构特征。 在很多算法中,降维算法成为了数据预处理的一部分,如PCA。事实上,有一些算法如果没有降维预处理,其实是很难得到很好的效果的。2. 主成分分析算法(PCA) Principal Component Analysis(PCA)是最常用的线性降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中表示,并期望在所投影的维度上数据的方差最大,以此使用较少的数据维度,同时保留住较多的原数据点的特性。 通俗的理解,如果把所有的点都映射到一起,那么几乎所有的信息(如点和点之间的距离关系)都丢失了,而如果映射后方差尽可能的大,那么数据点则会 分散开来,以此来保留更多的信息。可以证明,PCA是丢失原始数据信息最少的一种线性降维方式。(实际上就是最接近原始数据,但是PCA并不试图去探索数 据内在结构) 设 n 维向量w为目标子空间的一个坐标轴方向(称为映射向量),最大化数据映射后的方差,有: 其中 m 是数据实例的个数, xi是数据实例 i 的向量表达, x拔是所有数据实例的平均向量。定义W为包含所有映射向量为列向量的矩阵,经过线性代数变换,可以得到如下优化目标函数: 其中tr表示矩阵的迹,A是数据协方差矩阵。 容易得到最优的W是由数据协方差矩阵前 k 个最大的特征值对应的特征向量作为列向量构成的。这些特征向量形成一组正交基并且最好地保留了数据中的信息。 PCA的输出就是Y = W‘X,由X的原始维度降低到了k维。 PCA追求的是在降维之后能够最大化保持数据的内在信息,并通过衡量在投影方向上的数据方差的大小来衡量该方向的重要性。但是这样投影以后对数据 的区分作用并不大,反而可能使得数据点揉杂在一起无法区分。这也是PCA存在的最大一个问题,这导致使用PCA在很多情况下的分类效果并不好。具体可以看下图所示,若使用PCA将数据点投影至一维空间上时,PCA会选择2轴,这使得原本很容易区分的两簇点被揉杂在一起变得无法区分;而这时若选择1轴将会得 到很好的区分结果。 Discriminant Analysis所追求的目标与PCA不同,不是希望保持数据最多的信息,而是希望数据在降维后能够很容易地被区分开来。后面会介绍LDA的方法,是另一 种常见的线性降维方法。另外一些非线性的降维方法利用数据点的局部性质,也可以做到比较好地区分结果,例如LLE,Laplacian Eigenmap等。优点:它是无监督学习,完全无参数限制的。在PCA的计算过程中完全不需要人为的设定参数或是根据任何经验模型对计算进行干预,最后的结果只与数据相关,与用户是独立的。用PCA技术可以对数据进行降维,同时对新求出的“主元”向量的重要性进行排序,根据需要取前面最重要的部分,将后面的维数省去,可以达到降维从而简化模型或是对数据进行压缩的效果。同时最大程度的保持了原有数据的信息。各主成分之间正交,可消除原始数据成分间的相互影响。计算方法简单,易于在计算机上实现。缺点:如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高。贡献率小的主成分往往可能含有对样本差异的重要信息。特征值矩阵的正交向量空间是否唯一有待讨论。在非高斯分布的情况下,PCA方法得出的主元可能并不是最优的,此时在寻找主元时不能将方差作为衡量重要性的标准。3. LDA Linear Discriminant Analysis(也有叫做Fisher Linear Discriminant)是一种有监督的(supervised)线性降维算法。与PCA保持数据信息不同,LDA是为了使得降维后的数据点尽可能地容易被区分! 假设原始数据表示为X,(m*n矩阵,m是维度,n是sample的数量) 既然是线性的,那么就是希望找到映射向量a, 使得 a‘X后的数据点能够保持以下两种性质:同类的数据点尽可能的接近(within class)不同类的数据点尽可能的分开(between class) 所以PCA用的这张图,如果图中两堆点是两类的话,那么我们就希望他们能够投影到轴1去(PCA结果为轴2),这样在一维空间中也是很容易区分的。优点在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识;LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优;缺点LDA不适合对非高斯分布样本进行降维,PCA也有这个问题。LDA降维最多降到类别数k-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。当然目前有一些LDA的进化版算法可以绕过这个问题;*LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好;LDA可能过度拟合数据4. 局部线性嵌入 (LLE) Locally linear embedding(LLE)是一种非线性降维算法,它能够使降维后的数据较好地保持原有 流形结构 。LLE可以说是流形学习方法最经典的工作之一。很多后续的流形学习、降维方法都与LLE有密切联系。 见图,使用LLE将三维数据(b)映射到二维(c)之后,映射后的数据仍能保持原有的数据流形(红色的点互相接近,蓝色的也互相接近),说明LLE有效地保持了数据原有的流行结构。 但是LLE在有些情况下也并不适用,如果数据分布在整个封闭的球面上,LLE则不能将它映射到二维空间,且不能保持原有的数据流形。那么我们在处理数据中,首先假设数据不是分布在闭合的球面或者椭球面上。 LLE算法认为每一个数据点都可以由其近邻点的线性加权组合构造得到。算法的主要步骤分为三步:(1)寻找每个样本点的k个近邻点;(2)由每个 样本点的近邻点计算出该样本点的局部重建权值矩阵;(3)由该样本点的局部重建权值矩阵和其近邻点计算出该样本点的输出值。5. Laplacian Eigenmaps 拉普拉斯特征映射 Laplacian Eigenmaps,看问题的角度和LLE有些相似,也是用局部的角度去构建数据之间的关系。 它的直观思想是希望相互间有关系的点(在图中相连的点)在降维后的空间中尽可能的靠近。Laplacian Eigenmaps可以反映出数据内在的流形结构。 使用时算法具体步骤为: 1.构建图 使用某一种方法来将所有的点构建成一个图,例如使用KNN算法,将每个点最近的K个点连上边。K是一个预先设定的值。 2.确定权重 确定点与点之间的权重大小,例如选用热核函数来确定,如果点i和点j相连。 见上图所示,左边的图表示有两类数据点(数据是图片),中间图表示采用Laplacian Eigenmap降维后每个数据点在二维空间中的位置,右边的图表示采用PCA并取前两个主要方向投影后的结果,可以清楚地看到,在此分类问题 上,Laplacian Eigenmap的结果明显优于PCA。 上图说明的是,高维数据(图中3D)也有可能是具有低维的内在属性的(图中roll实际上是2D的),但是这个低维不是原来坐标表示,例如如果要保持局部关系,蓝色和下面黄色是完全不相关的,但是如果只用任何2D或者3D的距离来描述都是不准确的。
-
常用降维方法-常用降维方法的目的 正所谓每一个结果的出现都是一系列的原因导致的,当构建机器学习模型时候,有时候数据特征异常复杂,这就需要经常用到数据降维技术,下面主要介绍一些降维的主要原理。1. 降维的目的 在实际的机器学习项目中,特征选择/降维是必须进行的,因为在数据中存在以下几个 方面的问题:数据的多重共线性:特征属性之间存在着相互关联关系。多重共线性会导致解的空间不稳定, 从而导致模型的泛化能力弱;高纬空间样本具有稀疏性,导致模型比较难找到数据特征;过多的变量会妨碍模型查找规律;仅仅考虑单个变量对于目标属性的影响可能忽略变量之间的潜在关系。通过特征选择/降维的目的是:减少特征属性的个数确保特征属性之间是相互独立的 当然有时候也存在特征矩阵过大, 导致计算量比较大,训练时间长的问题 因为篇幅有限,本次实验主要介绍以下两种降维方法:PCALDA2. 常见两大降维方法2.1 PCA 主成分析(PCA):将高纬的特征向量合并称为低纬度的特征属性,是一种无监督 的降维方法。 算法目标是通过某种线性投影,将高维的数据映射到低维的空间中表 示,并且期望在所投影的维度上数据的方差最大(最大方差理论),以此使用较 少的数据维度,同时保留较多的原数据点的特性。主成分选择 假设原来的特征数据是n维数据,首先选着方差最大方向为第一维数据。第二个坐标轴选择和第一个坐标轴垂直或者正交 的方向;第三个坐标轴选择和第一个、第二个坐标轴都垂直或者正交的方向;该 过程一直重复,直到新坐标系的维度和达到给定的值。 而这些方向所表示的数据特征就被称为“主成分”。2.2 LDA 线性判断分析(LDA):LDA是一种基于分类模型进行特征属性合并的操作,是一 种有监督的降维方法。 LDA的原理是,将带上标签的数据(点),通过投影的方法,投影到维度更低的 空间中,使得投影后的点,会形成按类别区分,一簇一簇的情况,相同类别的点, 将会在投影后的空间中更接近。用一句话概括就是:“投影后类内方差最小,类 间方差最大” 比较:相同点:两者均可以对数据完成降维操作两者在降维时候均使用矩阵分解的思想两者都假设数据符合高斯分布不同点:LDA是监督降维算法,PCA是无监督降维算法LDA降维最多降到类别数目k-1的维数,而PCA没有限制LDA除了降维外,还可以应用于分类LDA选择的是分类性能最好的投影,而PCA选择样本点投影具有最大方差的方向
-
常用降维方法-机器学习数学预备知识1.机器学习简介 机器学习的特点就是:以计算机为工具和平台,以数据为研究对象,以学习方法为中心;是概率论、线性代数、数值计算、信息论、最优化理论和计算机科学等多个领域的交叉学科。2. 机器学习预备数学知识2.1 线性代数2.1.1 标量 一个标量就是一个单独的数,一般用小写的的变量名称表示。2.1.2 向量 一个向量就是一列数,这些数是有序排列的。用过次序中的索引,我们可以确定每个单独的数。通常会赋予向量粗体的小写名称。当我们需要明确表示向量中的元素时,我们会将元素排列成一个方括号包围的纵柱,我们可以把向量看作空间中的点,每个元素是不同的坐标轴上的坐标。2.1.3 矩阵 矩阵是二维数组,其中的每一个元素被两个索引而非一个所确定。我们通常会赋予矩阵粗体的大写变量名称,比如A。 如果一个实数矩阵高度为m,宽度为n,那么我们说。2.1.4 张量 几何代数中定义的张量是基于向量和矩阵的推广,通俗一点理解的话,我们可以将标量视为零阶张量,矢量视为一阶张量,那么矩阵就是二阶张量。 例如,可以将任意一张彩**片表示成一个三阶张量,三个维度分别是图片的高度、宽度和色彩数据。将这张图用张量表示出来,就是最下方的那张表格: 其中表的横轴表示图片的宽度值,这里只截取0~319;表的纵轴表示图片的高度值,这里只截取0~4;表格中每个方格代表一个像素点,比如第一行第一列的表格数据为[1.0,1.0,1.0],代表的就是RGB三原色在图片的这个位置的取值情况(即R=1.0,G=1.0,B=1.0)。2.1.5 范数 有时我们需要衡量一个向量的大小。在机器学习中,我们经常使用被称为范数(norm) 的函数衡量矩阵大小。Lp 范数如下:2.1.6 特征分解 许多数学对象可以通过将它们分解成多个组成部分。特征分解是使用最广的矩阵分解之一,即将矩阵分解成一组特征向量和特征值。 方阵A的特征向量是指与A相乘后相当于对该向量进行缩放的非零向量:2.1.7 奇异值分解 矩阵的特征分解是有前提条件的,那就是只有对可对角化的矩阵才可以进行特征分解。但实际中很多矩阵往往不满足这一条件,甚至很多矩阵都不是方阵,就是说连矩阵行和列的数目都不相等。这时候怎么办呢?人们将矩阵的特征分解进行推广,得到了一种叫作“矩阵的奇异值分解”的方法,简称SVD。通过奇异分解,我们会得到一些类似于特征分解的信息。 它的具体做法是将一个普通矩阵分解为奇异向量和奇异值。比如将矩阵A分解成三个矩阵的乘积:2.2 概率论2.2.1 随机变量 随机变量可以随机地取不同值的变量。我们通常用小写字母来表示随机变量本身,而用带数字下标的小写字母来表示随机变量能够取到的值。 对于向量值变量,我们会将随机变量写成X,它的一个值为x。就其本身而言,一个随机变量只是对可能的状态的描述;它必须伴随着一个概率分布来指定每个状态的可能性。 随机变量可以是离散的或者连续的。2.2.2 概率分布 给定某随机变量的取值范围,概率分布就是导致该随机事件出现的可能性。 从机器学习的角度来看,概率分布就是符合随机变量取值范围的某个对象属于某个类别或服从某种趋势的可能性。2.2.3 条件概率 很多情况下,我们感兴趣的是某个事件在给定其它事件发生时出现的概率,这种概率叫条件概率。 我们将给定X=x时Y=y发生的概率记为,这个概率可以通过下面的公式来计算:2.2.4 贝叶斯公式 先看看什么是“先验概率”和“后验概率”,以一个例子来说明: 假设某种病在人群中的发病率是0.001,即1000人中大概会有1个人得病,则有: P(患病) = 0.1%;即:在没有做检验之前,我们预计的患病率为P(患病)=0.1%,这个就叫作"先验概率"。 再假设现在有一种该病的检测方法,其检测的准确率为95%;即:如果真的得了这种病,该检测法有95%的概率会检测出阳性,但也有5%的概率检测出阴性;或者反过来说,但如果没有得病,采用该方法有95%的概率检测出阴性,但也有5%的概率检测为阳性。用概率条件概率表示即为:P(显示阳性|患病)=95% 现在我们想知道的是:在做完检测显示为阳性后,某人的患病率P(患病|显示阳性),这个其实就称为"后验概率"。 而这个叫贝叶斯的人其实就是为我们提供了一种可以利用先验概率计算后验概率的方法,我们将其称为“贝叶斯公式”。 这里先了解条件概率公式: 由条件概率可以得到乘法公式: 将条件概率公式和乘法公式结合可以得到: 再由全概率公式: 代入可以得到贝叶斯公式: 在这个例子里就是: 贝叶斯公式贯穿了机器学习中随机问题分析的全过程。从文本分类到概率图模型,其基本分类都是贝叶斯公式。期望、方差、协方差等主要反映数据的统计特征,机器学习的一个很大应用就是数据挖掘等,因此这些基本的统计概念也是很有必要掌握。另外,像后面的EM算法中,就需要用到期望的相关概念和性质。2.2.5 期望 在概率论和统计学中,数学期望是试验中每次可能结果的概率乘以其结果的总和。它是最基本的数学特征之一,反映随机变量平均值的大小。2.2.6 方差 概率中,方差用来衡量随机变量与其数学期望之间的偏离程度; 统计中的方差为样本方差,是各个样本数据分别与其平均数之差的平方和的平均数。2.2.7 协方差 在概率论和统计学中,协方差被用于衡量两个随机变量X和Y之间的总体误差。数学定义式为:
-
常用降维方法--机器学习简介1. 机器学习简介 机器学习的萌芽诞生与19世纪60年代,20年前开始逐渐兴起,他是一门跨学科的交融。这里面包含了概率论、统计学等等学科。随着计算机硬件的提升,计算机运算速度的不断提高,它真正开始计入我们的日常生活当中。而在不久的将来,我相信它会成为我们生活中必不可少的组成元素。我们说说日常生活中机器学习的应用。第一个提到的最具代表性的公司应该就是google,它们所研发的GOOGLE NOW,GOOGLE PHOTOS 都是基于机器学习的产物。同样在百度,图片识别也是应用到机器学习中的视觉处理系统。于此同时,各种各样的企业都开始尝试把自己的产品往机器学习上靠拢。比如金融公司的汇率预测,股票涨跌。房地产公司的房价预测等等。2. 常见机器学习算法2.1 监督学习算法 如果在学习过程中,我们不断的向计算机提供数据和这些数据对应的值,比如说给计算机看猫和狗的图片,告诉计算机那些图片里是猫,那些是狗,然后在让它学习去分辨猫和狗。通过这种指引的方式,让计算机学习我们是如何把这些图片数据对应上图片所代表的物体。也就是让计算机学习这些标签可以代表那些图片。这种学习方式叫做“监督学习”。预测房屋的价格,股票的涨停同样可以用监督学习来实现。大家所熟知的神经网络同样是一种监督学习的方式。2.2 非监督学习算法 同样在这种学习过程中,我只给计算机提供猫和狗的图片,但是并没有告诉它那些是猫那些是狗。取而代之的是,我让它主机去判断和分类。让它自己总结出这两种类型的图片的不同之处。这就是一种“非监督学习”,在这种学习过程中,我们可以不用提供数据所对应的标签信息,计算机通过观察各种数据之间的特性,会发现这些特性背后的规律。这些规律也就是非监督方法所学到的东西。2.3 半监督学习算法 还有一种方法,综合了监督学习和非监督学习的特征,这种叫作“半监督学习”,它主要考虑如何利用少量有标签的样本和大量的没有标签样本进行训练和分类。在规划机器人的行为准则方面,一种机器人学习方法叫作“强化学习”,也就是把计算机丢到一个对于它完全陌生的环境或者让它完成一项从未接触过的任务。它自己回去尝试各种手段。最后让自己成功使用这一个陌生的环境。或者学会完成这件任务的方法途径。比如我想训练机器人去投篮,我们只需要给它一个球。并告诉它你投进了我给你记一分,让它自己去尝试各种各样的投篮方法。在开始阶段,它的命中率可能会非常低。不过它回像人类一样主机总结和学习投篮失败或成功的经验。最后达到很高的命中率。GOOGLE 开发的ALPHAGO 也就是应用了之一种学习方式。2.4 遗传算法 还有一种和强化学习类似的学习方法,叫做遗传算法。这种方法是模拟我们熟知的进化理论,淘汰弱者,适者生存。通过这样的淘汰机制去选择最优的设计或模型。比如开发者所开发的计算机学会超级玛丽,最开始的马里奥1代可能不久就牺牲了,不过系统会基于1代的马里奥随机生成2代。然后在保存这些代里面最厉害的马里奥。淘汰掉比较弱的马里奥代,然后再次基于强者“繁衍和变异”,生出更强的马里奥,这也就是遗传算法的基本思想。3. 机器学习的历史 1950年,计算机科学家 Alan Turing发明了所谓的图灵测试,计算机必须通过文字对话一个人,让人以为她在和另一个人说话。图灵认为,只有通过这个测试,机器才能被认为是“智能的”。1952年,Arthur Samuel创建了第一个真正的机器学习程序——一个简单的棋盘游戏,计算机能够从以前的游戏中学习策略,并提高未来的性能。接着是Donald Michie 在1963年推出的强化学习的tic-tac-toe程序。在接下来的几十年里,机器学习的进步遵循了同样的模式--一项技术突破导致了更新的、更复杂的计算机,通常是通过与专业的人类玩家玩战略游戏来测试的。 它在1997年达到巅峰,当时IBM国际象棋电脑深蓝(Deep Blue)在一场国际象棋比赛中击败了世界冠军加里·卡斯帕罗夫(Garry Kasparov)。最近,谷歌开发了专注于古代中国棋类游戏围棋(Go)的AlphaGo,该游戏被普遍认为是世界上最难的游戏。尽管围棋被认为过于复杂,以至于一台电脑无法掌握,但在2016年,AlphaGo终于获得了胜利,在一场五局比赛中击败了Lee Sedol。 机器学习最大的突破是2006年的深度学习。深度学习是一类机器学习,目的是模仿人脑的思维过程,经常用于图像和语音识别。深度学习的出现导致了我们今天使用的(可能是理所当然的)许多技术。你有没有把一张照片上传到你的Facebook账户,只是为了暗示给照片中的人贴上标签?Facebook正在使用神经网络来识别照片中的面孔。或者Siri呢?当你问你的iPhone关于今天的棒球成绩时,你的话语会用一种复杂的语音解析算法进行分析。如果没有深度学习,这一切都是不可能的。4. 机器学习的应用场景4.1 市民出行选乘公交预测 基于海量公交数据记录,希望挖掘市民在公共交通中的行为模式。以市民出行公交线路选乘预测为方向,期望通过分析广东省部分公交线路的历史公交卡交易数据,挖掘固定人群在公共交通中的行为模式,分析推测乘客的出行习惯和偏好,从而建立模型预测人们在未来一周内将会搭乘哪些公交线路,为广大乘客提供信息对称、安全舒适的出行环境,用数据引领未来城市智慧出行。2、基于运营商数据的个人征信评估运营商作为网络服务供应商,积累了大量的用户基本信息及行为特征数据,如终端数据、套餐消费数据、通信数据等等。实名制政策保证了运营商用户数据能与用户真实身份匹配,并真实客观的反映用户行为。广泛覆盖的网络基础设施提供了积累大量实时数据的条件,这些用户数据实时反馈着用户的各个维度的信息及特征。在我国,个人征信评估主要通过引用央行个人征信报告,但对于很多用户没有建立个人信用记录的用户,金融机构想要了解他们的信用记录成本又较高,传统征信评估手段难以满足目前多种多样的新兴需求。金融业务不同于其他大数据业务,对数据的真实性、可信度和时效性要求较高,而这正是运营商数据的价值所在。期望利用运营商用户数据,提供完善的个人征信评估。4.3 商品图片分类 京东含有数以百万计的商品图片,“拍照购”“找同款”等应用必须对用户提供的商品图片进行分类。同时,提取商品图像特征,可以提供给推荐、广告等系统,提高推荐/广告的效果。希望通过对图像数据进行学习,以达到对图像进行分类划分的目的。4.4 广告点击行为预测 用户在上网浏览过程中,可能产生广告曝光或点击行为。对广告点击进行预测,可以指导广告主进行定向广告投放和优化,使广告投入产生最大回报。希望基于100万名随机用户在六个月的时间范围内广告曝光和点击日志,包括广告监测点数据,预测每个用户在8天内是否会在各监测点上发生点击行为。4.5 基于文本内容的垃圾短信识别 垃圾短信已日益成为困扰运营商和手机用户的难题,严重影响到人们正常生活、侵害到运营商的社会形象以及危害着社会稳定。而不法分子运用科技手段不断更新垃圾短信形式且传播途径非常广泛,传统的基于策略、关键词等过滤的效果有限,很多垃圾短信“逃脱”过滤,继续到达手机终端。希望基于短信文本内容,结合机器学习算法、大数据分析挖掘来智能地识别垃圾短信及其变种。4.6 大数据精准营销中搜狗用户画像挖掘 “物以类聚,人以群分”这句古语不仅揭示了物与人的自组织趋向,更隐含了“聚类”和“人群”之间的内在联系。在现代数字广告投放系统中,以物拟人,以物窥人,才是比任何大数据都要更大的前提。在现代广告投放系统中,多层级成体系的用户画像构建算法是实现精准广告投放的基础技术之一。其中,基于人口属性的广告定向技术是普遍适用于品牌展示广告和精准竞价广告的关键性技术。在搜索竞价广告系统中,用户通过在搜索引擎输入具体的查询词来获取相关信息。因此,用户的历史查询词与用户的基本属性及潜在需求有密切的关系。希望基于用户历史一个月的查询词与用户的人口属性标签(包括性别、年龄、学历)做为训练数据,通过机器学习、数据挖掘技术构建分类算法来对新增用户的人口属性进行判定。4.7 基于用户位置信息的商业选址 随着信息技术的快速发展,移动设备和移动互联网已经普及到千家万户。在用户使用移动网络时,会自然的留下用户的位置信息。随着近年来GIS地理信息技术的不断完善普及,结合用户位置和GIS地理信息将带来创新应用。如百度与万达进行合作,通过定位用户的位置,结合万达的商户信息,向用户推送位置营销服务,提升商户效益。希望通过大量移动设备用户的位置信息,为某连锁餐饮机构提供新店选址。4.8 中文地址标准化处理 地址是一个涵盖丰富信息的变量,但长期以来由于中文处理的复杂性、国内中文地址命名的不规范性,使地址中蕴含的丰富信息不能被深度分析挖掘。通过对地址进行标准化的处理,使基于地址的多维度量化挖掘分析成为可能,为不同场景模式下的电子商务应用挖掘提供了更加丰富的方法和手段,因此具有重要的现实意义。3、非人恶意流量识别 2016年第一季度Facebook发文称,其Atlas DSP平台半年的流量质量测试结果显示,由机器人模拟和黑IP等手段导致的非人恶意流量高达75% . 仅2016上半年,AdMaster反作弊解决方案认定平均每天能有高达 28% 的作弊流量。低质量虚假流量的问题一直存在,这也是过去十年间数字营销行业一直在博弈的问题。基于AdMaster海量监测数据,50%以上的项目均存在作弊嫌疑;不同项目中,作弊流量占广告投放5%到95%不等;其中垂直类和网盟类媒体的作弊流量占比最高;PC端作弊流量比例显著高于移动端和智能电视平台。广告监测行为数据被越来越多地用于建模和做决策,例如绘制用户画像,跨设备识别对应用户等。作弊行为,恶意曝光,网络爬虫,误导点击,甚至是在用户完全无感知的情况下被控制访问等产生的不由用户主观发出的行为给数据带来了巨大的噪声,给模型训练造成了很大影响。 希望基于给定的数据,建立一个模型来识别和标记作弊流量,去除数据的噪声,从而更好的使用数据,使得广告主的利益最大化。
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签