我与Python | 从Hacker到探索Deep Learning

为什么是Python

人生苦短,我用Python...

'Life is short, you need Python!'

进入大学之后,我们逐渐“被教授”了C、C++、Java等编程语言,但为什么我会选择python作为最喜欢的编程语言呢?

Python是最好的编程语言之一,在科学计算中用途广泛:计算机视觉、人工智能、数学、天文等。它同样适用于机器学习也是意料之中的事。

总之:简短[库多]、不用自己造轮子[库多]、能解决各种问题[库多多...]

python是一种简单但功能强大的解释性编程语言,便与交互编程,作为一种动态语言,允许程序运行时候才被添加到对象,变量自动类型转换,提高开发效率。 最重要的一点:python自带强大的标准库,而且可以很方便的使用其它的第三方库,这就大大的简化了我们编程的复杂度。

依稀记得大学期间,我对Hacke相关的技术非常着迷,觉得面对漆黑的终端界面,快速的输入一些奇怪的命令,啪啪啪...女神的QQ密码搞到手了,想想还有点小激动!(纯属意淫),经常捣鼓一下XSS、SQL注入这些“高级”技巧来意淫一番。

就喜欢这个feel的壁纸...

作为一个梦想成为Hacker的男人,总不能一直玩'儿童玩具',所以想参与一些网络安全的竞赛玩玩,探索中发现比赛中用的比较多的语言是Python,逛FreeBuf的时候看到一遍文章这样推荐使用Python:

“如果你热爱漏洞研究、逆向工程或者渗透测试,我强烈推荐你使用 Python 作为编程语言。它包含大量实用的库和工具......”

拥有大量的库以及工具,意味着只需要自己写少许的代码,就可以实现那些看似很厉害的Hacker姿势,这不正是我这类小白梦寐以求的东西嘛!

遥想当年,怀揣着Hacker梦想的我,一直希望自己能够有机会向FreeBuf提交一个自己发现的漏洞......

本着入门新语言“7天”就够了的原则,开始了学习python之路,这一路从追逐Hacker梦想开始,一直到现在探究Deep Learning的深渊。进入研究生阶段后,跟随实验室的研究方向,未来的职业定位也随之改变,Hacker梦渐行渐远.....但是Python却从未离开过我,因为在研究深度学习中,Python仍旧还是我的左膀右臂。

深度学习界的屠龙刀—Python

深度学习无疑是最近几年最炙手可热的研究领域之一,从2012年ImgNet上的一鸣惊人,到AlphaGo的横扫围棋界...深度学习的成果不断的从实验室走到了工业界,逐步融入进我们的日常生活。

深度学习的深渊

为什么说Python是深度学习界的屠龙刀呢?额.....因为倚天剑是属于灭绝师太的!综其原因,我认识还是:库多。如果自己手动完成一个机器学习的算法,代码量还是挺多的,这对于刚入门的新手来说,毫无疑问是当头喝棒,而借助于第三方库,其封装了一些好用的算法,大大简化我们需要做的工作,我们可以把更多的精力放在解决问题本身上。

研究生阶段,我逐渐的开始接触深度学习,开始尝试自己动手基于深度学习模型尝试解决一些NLP领域的问题,这时候python又成为了我的首选编程语言。

我的研究方向是NLP,此外个人对机器学习以及其它的子领域也非常浓厚的兴趣,例如:数据挖掘、推荐系统等,而这些兴趣爱好的相关编程工作,Python基本都可以很好的胜任。

Python语言作为一个多面手,我认为它的核心竞争力就体现在它拥有丰富多彩的库:

我常用的Python库

深度学习界Java、C++、Scala等语言也是各有千秋,自己用啥兵器顺手,就选什么兵器呗,反正,最终目的都是要能解决手头的问题!

如果你不了解Python但是很擅长其他语言?不要绝望!Python(还有其他)的一个强项就是它是一个完美的胶水语言,你可以使用自己常用的编程语言,通过Python来访问这些库。以下适合各种编程语言的包可以用于将其他语言与Python组合到一起:

  • R -> RPython
  • Matlab -> matpython
  • Java -> Jython
  • Lua -> Lunatic Python
  • Julia -> PyCall.jl

获取数据—编写爬虫

数据决定了模型所能达到的最终高度,而不断优化的模型不过是为了逼近这个目标而已!

做数据分析【爬取电商某种商品的评价】、文本分类【爬取新闻网站】时需要获取部分原始的数据,这时可能需要自己写一个简单的爬虫。此时,python就可以登场了,配合一些自带的模块或者第三方的库:requests、urllib等,简单的coding就可以很好的完成这个小任务,如果需要实现一个较复杂的爬虫,则可以利用Python的第三方库--Scrapy,利用工程模板简单的配置一下mongodb数据库地址以及初始URL地址等参数,就可以很好的完成数据搜集的任务。

机器学习界常用的库

1、Scikit-Learn-实现了传统的机器学习算法

Scikit-Learn[简称sklearn] 是一个 Python 的 科学计算库,我们用它进行分类、特征选择、特征提取和聚集等,是比较常用的机器学习库之一。

numpy、scipy 是 Python 的科学运算库,matplotlib 是图形库,用于绘图,经常与Sklearn库配合使用。

Scikit-Learn包含的算法流程图

由图中,可以看到算法有四类,分类,回归,聚类,降维。

其中 分类和回归是监督式学习,即每个数据对应一个 label。

聚类是非监督式学习,即没有 label

另外一类是降维,当数据集有很多很多属性的时候,可以通过降维 算法把属性归纳起来。例如 20 个属性只变成 2 个,注意,这不是挑出 2 个,而是压缩成为 2 个,它们集合了 20 个属性的所有特征,相当于把重要的信息提取的更好,不重要的信息就不要了。

此外,在NLP领域中,它还包含有限的自然语言处理特征提取能力,以及词袋(bag of words)、tfidf(Term Frequency Inverse Document Frequency算法)、预处理(停用词/stop-words,自定义预处理,分析器)等。

Sklearn 包含了很多种机器学习的算法,几乎覆盖了实现一个机器学习算法的整个流程:

  • Classification 分类
  • Regression 回归
  • Clustering 非监督分类
  • Dimensionality reduction 数据降维
  • Model Selection 模型选择
  • Preprocessing 数据预处理

介绍sklearn包中各种机器学习模型的实现(含代码)(http://python.jobbole.com/81721/)

2、Gensim-NLP界的利器

Gensim被定义为“人们的主题建模工具(topic modeling for humans)”。它的主页上描述,其焦点是狄利克雷划分(Latent Dirichlet Allocation, LDA)及变体。不同于其他包,它支持自然语言处理,能将NLP和其他机器学习算法更容易组合在一起。如果你的领域在NLP,并想进行聚集和基本的分类,你可以看看。目前,它们引入了Google的基于递归神经网络(Recurrent Neural Network)的文本表示法word2vec,在NLP中词的词向量的分布式表示方法用的比较多的就是word2vec。

3、TensorFlow-炙手可热的计算框架

说到深度学习+Python,就不得不提TensorFlow,我也在积累素材准备专门写一下关于TensorFlow的使用感悟,这里就先简单的介绍一下。

TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。TensorFlow可以说是当前最流行的深度学习框架【我就不写之一了】。

借助TensorFlow,我们不需要自己去实现反向传播、随机梯度下降、损失函数等较复杂的函数,新手也可以实现常见的深度学习模型:CNN、RNN、LSTM、Seq2Seq等[使用Keras实现起来更简单]。

什么是tensorflow:   官网的定义中并未将TensorFlow称为一个“机器学习库”,而是使用了更宽泛的短语“数值计算”。虽然TensorFlow中的确包含一个模仿了具有单行建模功能的机器学习库Scikit-Learn的名为“learn”(也称“Scikit Flow”)的包,但需要注意的是,TensorFlow的主要目标并非是提供现成的机器学习解决方案。相反,TensorFlow提供了一个可使用户用数学方法从零开始定义模型的函数和类的广泛套件。这使得具有一定技术背景的用户可迅速而直观地创建自定义的、具有较高灵活性的模型。此外,虽然TensorFlow为面向机器学习的功能提供了广泛支持,但它也非常适合做复杂的数学计算。

4、数据可视化

常言道:一图胜千言。

在数据挖掘中分析数据分布、统计总量以及呈现最终的分析结果时,数据的可视化是非常必要的。

在Web中,我常用的可视化工具是E-chart,python中最常用的无疑是Matplotlib。

Echart例图

matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。

matplotlib是基于numpy的一套Python工具包。这个包提供了丰富的数据绘图工具,主要用于绘制一些统计图形。你可以找到很多各式各样的例子。

例子

此外,还有一个在其基础上扩展的包:Seaborn,它以matplotlib为底层,更容易定制化作图的。

Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn就能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图。应该把Seaborn视为matplotlib的补充,而不是替代物。

5、总结

Python各种丰富的库还有很多,本文只是简单的介绍了几个自己在机器学习、NLP中常用的库,对于这些包深入理解,这里并没有详细的介绍,其中的每一个都值得写一篇博客才能窥探一二。此外,还有很多基础的库[numpy、pandas等]是我们必须要掌握的,这里就不一一的介绍了。

原文发布于微信公众号 - 人工智能LeadAI(atleadai)

原文发表时间:2017-11-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据文摘

一位缺觉的父亲记录了他双胞胎宝宝的睡眠数据 并交给机器学习,结果……

2136
来自专栏大数据挖掘DT机器学习

关联规则挖掘综述

本文介绍了关联规则挖掘的研究情况,提出了关联规则的分类方法,对一些典型算法进行了分析和评价,指出传统关联规则衡量标准的不足,归纳出关联规则的价值衡量方法,展望了...

4659
来自专栏机器人网

六轴机械手臂有哪些奇异点?

六轴机械手臂由六组不同位置的马达驱动,每个马达都能提供绕一轴向的旋转运动,其位置可参照下图。从自由度(Degree of Freedom)的概念来看,六轴机械手...

4029
来自专栏华章科技

为何你只能做出渣图表?数据可视化的十大误区

通过可视化信息,我们的大脑可以更有效地合成和保留信息内容,增强对信息的理解。但是如果不正确数据可视化,它可能弊大于利。错误的图表可以减少数据的信息,或者更糟的是...

1043
来自专栏AI科技评论

深度学习——你需要了解的八大开源框架

导读:深度学习(Deep Learning)是机器学习中一种基于对数据进行表征学习的方法,深度学习的好处是用非监督式或半监督式的特征学习、分层特征提取高效算法来...

4756
来自专栏IT派

7步让你从零开始掌握Python机器学习!

这篇文章旨在通过7个步骤,将最少的机器学习知识转化为知识型实践者,所有这一切都在使用免费的材料和资源。这个大纲的主要目标是帮助你通过许多可用的免费选项; 有很多...

3594
来自专栏企鹅号快讯

7步让你从零开始掌握Python机器学习!

这篇文章旨在通过7个步骤,将最少的机器学习知识转化为知识型实践者,所有这一切都在使用免费的材料和资源。这个大纲的主要目标是帮助你通过许多可用的免费选项; 有很多...

24410
来自专栏人工智能头条

Etsy 数据科学主管洪亮劼带你读:WWW 2017 精选论文

1534
来自专栏AI科技大本营的专栏

面试定心丸:AI知识点备忘录(包括ML、DL、Python、Pandas等)

【导读】本期 AI科技大本营为大家精心整理了最全面的 AI 知识点备忘清单,包含机器学习、深度学习、Python 等各个领域。为了方便大家保存和随时学习,我们还...

1502
来自专栏大数据挖掘DT机器学习

PageRank算法(2):PageRank原理剖析

一、PageRank算法的简单举例 Google PageRank算法的思想精华在于:将一个网页级别/重要性的排序问题转化成了一个公共参与、以群体民主投票的方式...

7006

扫码关注云+社区

领取腾讯云代金券