0、為什么是Python隙畜?
人生苦短抖部,我用Python...
進(jìn)入大學(xué)之后,我們逐漸“被教授”了C议惰、C++慎颗、Java等編程語言,但為什么我會選擇python作為最喜歡的編程語言呢言询?
Python是最好的編程語言之一俯萎,在科學(xué)計算中用途廣泛:計算機(jī)視覺、人工智能运杭、數(shù)學(xué)夫啊、天文等。它同樣適用于機(jī)器學(xué)習(xí)也是意料之中的事辆憔。
總之:簡短[庫多]撇眯、不用自己造輪子[庫多]、能解決各種問題[庫多多...]虱咧。
- python是一種簡單但功能強(qiáng)大的解釋性編程語言熊榛,便與交互編程,作為一種動態(tài)語言腕巡,允許程序運(yùn)行時候才被添加到對象玄坦,變量自動類型轉(zhuǎn)換,提高開發(fā)效率。
- 最重要的一點(diǎn):python自帶強(qiáng)大的標(biāo)準(zhǔn)庫煎楣,而且可以很方便的使用其它的第三方庫豺总,這就大大的簡化了我們編程的復(fù)雜度。
依稀記得大學(xué)期間择懂,我對Hacke相關(guān)的技術(shù)非常著迷喻喳,覺得面對漆黑的終端界面,快速的輸入一些奇怪的命令休蟹,啪啪啪...女神的QQ密碼搞到手了沸枯,想想還有點(diǎn)小激動日矫!(純屬意淫)赂弓,經(jīng)常搗鼓一下XSS、SQL注入這些“高級”技巧來意淫一番哪轿。
作為一個夢想成為Hacker的男人盈魁,總不能一直玩'兒童玩具',所以想?yún)⑴c一些網(wǎng)絡(luò)安全的競賽玩玩窃诉,探索中發(fā)現(xiàn)比賽中用的比較多的語言是Python杨耙,逛FreeBuf的時候看到一遍文章這樣推薦使用Python:
“如果你熱愛漏洞研究、逆向工程或者滲透測試飘痛,我強(qiáng)烈推薦你使用 Python 作為編程語言珊膜。它包含大量實用的庫和工具......”
擁有大量的庫以及工具,意味著只需要自己寫少許的代碼宣脉,就可以實現(xiàn)那些看似很厲害的Hacker姿勢车柠,這不正是我這類小白夢寐以求的東西嘛!
遙想當(dāng)年塑猖,懷揣著Hacker夢想的我竹祷,一直希望自己能夠有機(jī)會向FreeBuf提交一個自己發(fā)現(xiàn)的漏洞......
本著入門新語言“7天”就夠了的原則,開始了學(xué)習(xí)python之路羊苟,這一路從追逐Hacker夢想開始塑陵,一直到現(xiàn)在探究Deep Learning的深淵。進(jìn)入研究生階段后蜡励,跟隨實驗室的研究方向令花,未來的職業(yè)定位也隨之改變,Hacker夢漸行漸遠(yuǎn).....但是Python卻從未離開過我凉倚,因為在研究深度學(xué)習(xí)中彭则,Python仍舊還是我的左膀右臂。
1占遥、深度學(xué)習(xí)界的屠龍刀--Pyhton
深度學(xué)習(xí)無疑是最近幾年最炙手可熱的研究領(lǐng)域之一俯抖,從2012年ImgNet上的一鳴驚人,到AlphaGo的橫掃圍棋界...深度學(xué)習(xí)的成果不斷的從實驗室走到了工業(yè)界瓦胎,逐步融入進(jìn)我們的日常生活芬萍。
為什么說Python是深度學(xué)習(xí)界的屠龍刀呢尤揣?額.....因為倚天劍是屬于滅絕師太的!綜其原因柬祠,我認(rèn)識還是:庫多北戏。如果自己手動完成一個機(jī)器學(xué)習(xí)的算法,代碼量還是挺多的漫蛔,這對于剛?cè)腴T的新手來說嗜愈,毫無疑問是當(dāng)頭喝棒,而借助于第三方庫莽龟,其封裝了一些好用的算法蠕嫁,大大簡化我們需要做的工作,我們可以把更多的精力放在解決問題本身上...
研究生階段毯盈,我逐漸的開始接觸深度學(xué)習(xí)剃毒,開始嘗試自己動手基于深度學(xué)習(xí)模型嘗試解決一些NLP領(lǐng)域的問題,這時候python又成為了我的首選編程語言搂赋。
我的研究方向是NLP赘阀,此外個人對機(jī)器學(xué)習(xí)以及其它的子領(lǐng)域也非常濃厚的興趣,例如:數(shù)據(jù)挖掘脑奠、推薦系統(tǒng)等基公,而這些興趣愛好的相關(guān)編程工作,Python基本都可以很好的勝任宋欺。
Python語言作為一個多面手轰豆,我認(rèn)為它的核心競爭力就體現(xiàn)在它擁有豐富多彩的庫:
深度學(xué)習(xí)界Java、C++迄靠、Scala等語言也是各有千秋秒咨,自己用啥兵器順手,就選什么兵器唄掌挚,反正雨席,最終目的都是要能解決手頭的問題!
如果你不了解Python但是很擅長其他語言吠式?不要絕望陡厘!Python(還有其他)的一個強(qiáng)項就是它是一個完美的膠水語言,你可以使用自己常用的編程語言特占,通過Python來訪問這些庫糙置。以下適合各種編程語言的包可以用于將其他語言與Python組合到一起:
- R -> RPython
- Matlab -> matpython
- Java -> Jython
- Lua -> Lunatic Python
- Julia -> PyCall.jl
2、獲取數(shù)據(jù)--編寫爬蟲
數(shù)據(jù)決定了模型所能達(dá)到的最終高度是目,而不斷優(yōu)化的模型不過是為了逼近這個目標(biāo)而已谤饭!
做數(shù)據(jù)分析【爬取電商某種商品的評價】、文本分類【爬取新聞網(wǎng)站】時需要獲取部分原始的數(shù)據(jù),這時可能需要自己寫一個簡單的爬蟲揉抵。此時亡容,python就可以登場了,配合一些自帶的模塊或者第三方的庫:requests冤今、urllib等闺兢,簡單的coding就可以很好的完成這個小任務(wù),如果需要實現(xiàn)一個較復(fù)雜的爬蟲戏罢,則可以利用Python的第三方庫--Scrapy屋谭,利用工程模板簡單的配置一下mongodb數(shù)據(jù)庫地址以及初始URL地址等參數(shù),就可以很好的完成數(shù)據(jù)搜集的任務(wù)龟糕。
3桐磁、機(jī)器學(xué)習(xí)界常用的庫
1.Scikit-Learn--實現(xiàn)了傳統(tǒng)的機(jī)器學(xué)習(xí)算法 官網(wǎng)
Scikit-Learn[簡稱sklearn] 是一個 Python 的 科學(xué)計算庫,我們用它進(jìn)行分類翩蘸、特征選擇所意、特征提取和聚集等淮逊,是比較常用的機(jī)器學(xué)習(xí)庫之一催首。
numpy、scipy 是 Python 的科學(xué)運(yùn)算庫泄鹏,matplotlib 是圖形庫郎任,用于繪圖,經(jīng)常與Sklearn庫配合使用备籽。
由圖中舶治,可以看到算法有四類,分類车猬,回歸霉猛,聚類,降維珠闰。
其中 分類和回歸是監(jiān)督式學(xué)習(xí)惜浅,即每個數(shù)據(jù)對應(yīng)一個 label。
聚類是非監(jiān)督式學(xué)習(xí)伏嗜,即沒有 label
另外一類是降維坛悉,當(dāng)數(shù)據(jù)集有很多很多屬性的時候,可以通過降維 算法把屬性歸納起來承绸。例如 20 個屬性只變成 2 個裸影,注意,這不是挑出 2 個军熏,而是壓縮成為 2 個轩猩,它們集合了 20 個屬性的所有特征,相當(dāng)于把重要的信息提取的更好,不重要的信息就不要了均践。
此外画饥,在NLP領(lǐng)域中,它還包含有限的自然語言處理特征提取能力浊猾,以及詞袋(bag of words)抖甘、tfidf(Term Frequency Inverse Document Frequency算法)、預(yù)處理(停用詞/stop-words葫慎,自定義預(yù)處理衔彻,分析器)等。
Sklearn 包含了很多種機(jī)器學(xué)習(xí)的算法偷办,幾乎覆蓋了實現(xiàn)一個機(jī)器學(xué)習(xí)算法的整個流程:
- Classification 分類
- Regression 回歸
- Clustering 非監(jiān)督分類
- Dimensionality reduction 數(shù)據(jù)降維
- Model Selection 模型選擇
- Preprocessing 數(shù)據(jù)預(yù)處理
介紹sklearn包中各種機(jī)器學(xué)習(xí)模型的實現(xiàn)(含代碼)
2.Gensim--NLP界的利器
Gensim被定義為“人們的主題建模工具(topic modeling for humans)”艰额。它的主頁上描述,其焦點(diǎn)是狄利克雷劃分(Latent Dirichlet Allocation椒涯, LDA)及變體柄沮。不同于其他包,它支持自然語言處理废岂,能將NLP和其他機(jī)器學(xué)習(xí)算法更容易組合在一起祖搓。如果你的領(lǐng)域在NLP,并想進(jìn)行聚集和基本的分類湖苞,你可以看看拯欧。目前,它們引入了Google的基于遞歸神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network)的文本表示法word2vec财骨,在NLP中詞的詞向量的分布式表示方法用的比較多的就是word2vec镐作。
3.TensorFlow--炙手可熱的計算框架
說到深度學(xué)習(xí)+Python,就不得不提TensorFlow隆箩,我也在積累素材準(zhǔn)備專門寫一下關(guān)于TensorFlow的使用感悟该贾,這里就先簡單的介紹一下。
TensorFlow 是一個采用數(shù)據(jù)流圖(data flow graphs)捌臊,用于數(shù)值計算的開源軟件庫杨蛋。TensorFlow可以說是當(dāng)前最流行的深度學(xué)習(xí)框架【我就不寫之一了】。
借助TensorFlow娃属,我們不需要自己去實現(xiàn)反向傳播六荒、隨機(jī)梯度下降、損失函數(shù)等較復(fù)雜的函數(shù)矾端,新手也可以實現(xiàn)常見的深度學(xué)習(xí)模型:CNN掏击、RNN、LSTM秩铆、Seq2Seq等[使用Keras實現(xiàn)起來更簡單]砚亭。
什么是tensorflow:
官網(wǎng)的定義中并未將TensorFlow稱為一個“機(jī)器學(xué)習(xí)庫”,而是使用了更寬泛的短語“數(shù)值計算”灯变。雖然TensorFlow中的確包含一個模仿了具有單行建模功能的機(jī)器學(xué)習(xí)庫Scikit-Learn的名為“l(fā)earn”(也稱“Scikit Flow”)的包,但需要注意的是,TensorFlow的主要目標(biāo)并非是提供現(xiàn)成的機(jī)器學(xué)習(xí)解決方案。相反,TensorFlow提供了一個可使用戶用數(shù)學(xué)方法從零開始定義模型的函數(shù)和類的廣泛套件捅膘。這使得具有一定技術(shù)背景的用戶可迅速而直觀地創(chuàng)建自定義的添祸、具有較高靈活性的模型。此外,雖然TensorFlow為面向機(jī)器學(xué)習(xí)的功能提供了廣泛支持,但它也非常適合做復(fù)雜的數(shù)學(xué)計算寻仗。
4刃泌、數(shù)據(jù)可視化
常言道:一圖勝千言。
在數(shù)據(jù)挖掘中分析數(shù)據(jù)分布署尤、統(tǒng)計總量以及呈現(xiàn)最終的分析結(jié)果時耙替,數(shù)據(jù)的可視化是非常必要的。
在Web中曹体,我常用的可視化工具是E-chart俗扇,python中最常用的無疑是Matplotlib。
matplotlib 是python最著名的繪圖庫箕别,它提供了一整套和matlab相似的命令A(yù)PI铜幽,十分適合交互式地進(jìn)行制圖。而且也可以方便地將它作為繪圖控件串稀,嵌入GUI應(yīng)用程序中除抛。
matplotlib是基于numpy的一套Python工具包。這個包提供了豐富的數(shù)據(jù)繪圖工具厨诸,主要用于繪制一些統(tǒng)計圖形镶殷。你可以找到很多各式各樣的例子
此外禾酱,還有一個在其基礎(chǔ)上擴(kuò)展的包:Seaborn微酬,它以matplotlib為底層,更容易定制化作圖的颤陶。
Seaborn其實是在matplotlib的基礎(chǔ)上進(jìn)行了更高級的API封裝颗管,從而使得作圖更加容易,在大多數(shù)情況下使用seaborn就能做出很具有吸引力的圖滓走,而使用matplotlib就能制作具有更多特色的圖垦江。應(yīng)該把Seaborn視為matplotlib的補(bǔ)充,而不是替代物搅方。
5比吭、總結(jié)
Python各種豐富的庫還有很多,本文只是簡單的介紹了幾個自己在機(jī)器學(xué)習(xí)姨涡、NLP中常用的庫衩藤,對于這些包深入理解,這里并沒有詳細(xì)的介紹涛漂,其中的每一個都值得寫一篇博客才能窺探一二赏表。此外检诗,還有很多基礎(chǔ)的庫[numpy、pandas等]是我們必須要掌握的瓢剿,這里就不一一的介紹了逢慌。