導(dǎo)讀:大家一定看膩了諸如Python簡單易用、靈活性高之類好像說了很多,又好像什么都沒說的介紹。我們說點(diǎn)接地氣的——風(fēng)頭正勁的Python。 今天聊一個(gè)有意思的話題,開發(fā)人工智能為什么要用Python。 作者:木羊同學(xué) 來源:華章科技 現(xiàn)在Python很熱,熱到什么地步? 我經(jīng)常在App里看到有一條視頻廣告,形式略有不同,但總的來說角色就兩個(gè),一個(gè)很兇的主管和一個(gè)很困擾的下屬,很兇的主管布置了一個(gè)很急的活,困擾的下屬撓耳撓腮,委屈說用電子表格根本不可能趕得出來,很兇的主管這時(shí)更兇了,啪啪啪一通操作,說用Python只要5分鐘就出來了,還不快去學(xué)! 我覺得這條廣告最有意思的地方,在于兩個(gè)角色都西裝革履,一看就很不程序員,更像是習(xí)慣一臉嚴(yán)肅坐在CBD里吹冷氣的商務(wù)人士,以前我以為這是廣告策劃的一個(gè)Bug,每次看到這里都被這反差萌逗樂,直到有一天,有位做金融的朋友問我說Python好不好學(xué),我才知道Python真的已經(jīng)火出圈了。 先說一點(diǎn),雖然現(xiàn)在不管圈里圈外,只要說到做數(shù)據(jù)分析、機(jī)器學(xué)習(xí)甚至人工智能,好像已經(jīng)言必稱Python,不過,這些領(lǐng)域并非天生就得是Python,別的不說,就說人工智能。 人工智能領(lǐng)域出了很多語言,如果你早個(gè)幾年學(xué)習(xí)人工智能,可能連Python的影子都看不見,大家一般推薦的都是LISP、Prolog,哪怕是業(yè)內(nèi)人士看這些語言都是又古老又偏門,尤其是Prolog,好像除了人工智能就沒別的地方能見到,但是Prolog做規(guī)則推導(dǎo)有奇效,大家也就一直沿用下來了。 現(xiàn)在呢?現(xiàn)在不怎么提了,一來是因?yàn)榛诮y(tǒng)計(jì)的機(jī)器學(xué)習(xí)一直占據(jù)了人工智能的頂流位置,規(guī)則推導(dǎo)說得不多,二來是Python迅速崛起,人稱“人工智能第一語言”,就連規(guī)則推導(dǎo)都可以用Python來做。 另一個(gè)例子是數(shù)據(jù)分析,早前都是R語言的天下,后來是R和Python兩分天下,現(xiàn)在人工智能的東風(fēng)一起來,R完全無法招架Python 迅猛發(fā)展的勢頭,所以這些前浪就理所當(dāng)然被拍在了沙灘上。 但是,這是結(jié)果,現(xiàn)在我們要問的是:為什么Python能成為“人工智能第一語言”呢? 01 Python有哪些優(yōu)點(diǎn) 現(xiàn)在Python很熱,所以介紹Python的文章特別多,大家一定也看膩了諸如Python簡單易用、靈活性高之類好像說了很多,又好像什么都沒說的介紹。我們說點(diǎn)接地氣的。 在我來看,Python最大的優(yōu)點(diǎn)就是“拎包入住”。 如果大家去租房,一定能看到一個(gè)詞,叫“拎包入住”,這個(gè)詞經(jīng)常作為租屋的重要賣點(diǎn),也反映出消費(fèi)者對租屋的一個(gè)重要需求。 什么叫拎包入住?租房行業(yè)對這個(gè)詞的準(zhǔn)確定義有爭議,很多人在糾結(jié)家私家電齊全到底是不是等同于拎包入住,不過意思是清楚的,我作為租客,啥都不用準(zhǔn)備,只需要把行李拉過來就可以住下了,這就是拎包入住。 換句話說,有不少租屋是達(dá)不到拎包入住的標(biāo)準(zhǔn)的,本來我只是要滿足“住”的需要,可是因?yàn)樽馕輻l件有欠缺,導(dǎo)致我不得不先客串一回裝修師傅,需要先做一些其它的準(zhǔn)備,然后才能做我想要做的事。 好了,說回編程語言。很多人喜歡從語言風(fēng)格、語法設(shè)計(jì)甚至語法糖等等角度來比較編程語言的優(yōu)劣,不過,我更看重另一樣?xùn)|西:生態(tài)環(huán)境。 以前我們說C++多么多么爆紅,后來又說Java多么多么爆紅,現(xiàn)在又輪到了Python,到底這些“網(wǎng)紅語言”的成功背后靠的是什么?真的只是因?yàn)榫幊陶Z言自身的優(yōu)秀設(shè)計(jì)嗎? 我認(rèn)為,一款編程語言是否流行,設(shè)計(jì)當(dāng)然是很重要的因素,但生態(tài)環(huán)境的成熟可能是更為直接的原因。我們經(jīng)常能聽到的一個(gè)關(guān)于編程的問題是,A語言早就已經(jīng)過時(shí)了,現(xiàn)在已經(jīng)有了新興的B語言,為什么現(xiàn)在還要用A語言開發(fā)項(xiàng)目呢? 這個(gè)問題通常有兩種可能,一種是項(xiàng)目已經(jīng)用A語言做了大量開發(fā),替換成B語言又得高樓平地起,另一種是B語言還太新,某個(gè)專業(yè)領(lǐng)域還沒有可用的或者好用的庫,同樣也得高樓平地起。這兩種都可以歸結(jié)為同一個(gè)原因:使用B語言并不能拎包入住。 Python的成功,同樣是因?yàn)槟軌蛄喟胱 ?/strong> 回想一下前面的廣告,說用Python只要5分鐘就能把看似做不完的工作做完,為什么? 不是因?yàn)镻ython語言設(shè)計(jì)有多么多么精巧,別人要寫一萬行,Python只要一行就搞定,而是Python有非常成熟的生態(tài)環(huán)境,你扔一個(gè)任務(wù)過來,用Python不用從頭開始,只要找到對應(yīng)的庫,一句import加幾行代碼,可能結(jié)果就出來了。 從始至終,你都只需要關(guān)注任務(wù)本身,而不需要思考編程語言怎么處理實(shí)現(xiàn),沒什么雜七雜八的東西需要浪費(fèi)時(shí)間。這就叫拎包入住。 02 數(shù)據(jù)科學(xué)方向的熱門Python包介紹 都知道Python在人工智能、大數(shù)據(jù)方向很熱,但是,真的有任務(wù)來了,究竟該用哪些包呢?很多介紹Python的教程,是真的就只介紹Python的語法,語法當(dāng)然很重要,要想使用Python,首先當(dāng)然得掌握語法。 但是,前面我們也進(jìn)行了介紹,Python的優(yōu)勢在于擁有許多成熟的包,讓你可以“拎包入住”,也即可以專注于任務(wù)本身,所以,我們要用Python,不但需要掌握Python的語法,同時(shí)也要了解都有哪些好用的Python,都可以用來做什么。 Python好用的包非常多,覆蓋領(lǐng)域也是五花八門,都列出來反而顯得凌亂,這里我們只介紹數(shù)據(jù)科學(xué)和人工智能方向用得多的包。 首先是pandas。這是數(shù)據(jù)分析用得非常多的包,尤其擅長各種格式化數(shù)值分析,前面提到的Python廣告只說用Python,并沒有說明該使用什么包,不過,既然是替代電子表格進(jìn)行數(shù)據(jù)分析,想必肯定會用到pandas。 接著是scikit-learn,這個(gè)包寫法很多,也有人喜歡簡寫為sklearn。這是個(gè)著名的機(jī)器學(xué)習(xí)包。scikit-learn非常好用,推薦大家都試一試,尤其是覺得機(jī)器學(xué)習(xí)數(shù)學(xué)很難,一看到機(jī)器學(xué)習(xí)幾個(gè)字就產(chǎn)生抵觸心理的同學(xué)。 為什么這么說呢?我們都知道,機(jī)器學(xué)習(xí)不是一種方法,而是一個(gè)大框,里面堆滿各種算法模型,譬如線性模型、樹形模型、支持向量機(jī)模型、以及現(xiàn)在在機(jī)器學(xué)習(xí)領(lǐng)域非常熱門的神經(jīng)網(wǎng)絡(luò)模型。 每一種模型背后都依靠一套復(fù)雜的數(shù)學(xué)邏輯來支撐模型運(yùn)作。在很多人看來,光是看懂機(jī)器學(xué)習(xí)模型的數(shù)學(xué)表達(dá)式就已經(jīng)十分費(fèi)勁,需要很深的數(shù)學(xué)功底,更不用說手推公式和實(shí)戰(zhàn)中使用了。于是,很多人覺得機(jī)器學(xué)習(xí)“可遠(yuǎn)觀而不可褻玩焉”。 當(dāng)然,這里面有幾個(gè)理解誤區(qū)。是不是需要很深的數(shù)學(xué)功底才能明白機(jī)器學(xué)習(xí)模型的原理呢?未必,機(jī)器學(xué)習(xí)確實(shí)用到很多數(shù)學(xué)知識,不過,我經(jīng)常和大家分享的一個(gè)觀點(diǎn)是:不妨把數(shù)學(xué)看作只是一種語言,是一門外語,機(jī)器學(xué)習(xí)的運(yùn)行原理,是用這門外語來描述,所以我們不太容易看懂。 那怎么辦呢?跨國交流我們可以找翻譯,同樣,只要有人看懂了機(jī)器學(xué)習(xí)這里的數(shù)學(xué)語,然后“翻譯”成中文,也就方便大家看得懂了。這件事我自己做了些嘗試,寫了一本書叫《機(jī)器學(xué)習(xí)算法的數(shù)學(xué)解析和Python實(shí)現(xiàn)》,大家感興趣可以翻翻。 另一個(gè)誤區(qū)就是得把機(jī)器學(xué)習(xí)模型的數(shù)學(xué)原理都學(xué)懂弄通了,最好能手推一遍公式,然后才能知道怎么使用。這個(gè)理解符合我們長期以來形成的按部就班的印象,不過,就我看來,使用機(jī)器學(xué)習(xí)和開車很像,沒必要要求司機(jī)都學(xué)會造車了才能開車,況且,造車和開車很可能還是并不相同的兩條學(xué)習(xí)曲線,畢竟老技工未必就是老司機(jī)。 如果只是想用機(jī)器學(xué)習(xí)解決問題,完全可以另辟蹊徑積累經(jīng)驗(yàn)。方法是什么呢?就是使用scikit-learn,這個(gè)包把常用的熱門的機(jī)器學(xué)習(xí)模型統(tǒng)統(tǒng)做了非常良好的封裝,我們完全可以像調(diào)用黑盒函數(shù)一樣,操作各種機(jī)器學(xué)習(xí)模型來解決實(shí)際問題。 最后就是Pytorch、Tensorflow和Keras這幾個(gè)網(wǎng)紅深度學(xué)習(xí)包,Python這一輪走勢長紅,這幾個(gè)深度學(xué)習(xí)包居功甚偉,在背后貢獻(xiàn)了大量流量。 現(xiàn)在是深度學(xué)習(xí)時(shí)代,大家都知道深度學(xué)習(xí)能解決很多以前無解的問題,可是理論設(shè)計(jì)出來的模型,還得編程實(shí)現(xiàn)才能使用。怎么實(shí)現(xiàn)呢?就用這幾個(gè)包,它們把深度學(xué)習(xí)的各個(gè)部件都已經(jīng)封裝好了,使用者只需要像拼裝樂高積木一樣,把部件拼裝成完整的模型。 篇幅有限,我就簡單介紹到這,當(dāng)然,Python的庫就像是一個(gè)工具倉庫,只要你想得到的工作,都可能已經(jīng)有不止一個(gè)成熟的Python庫可供選擇,譬如說一些細(xì)分的機(jī)器學(xué)習(xí)任務(wù),如自然語言處理NLP,就還有好幾個(gè)專門做NLP領(lǐng)域任務(wù)的Python包,又譬如說大數(shù)據(jù)用到的一些基礎(chǔ)組件,如Hadoop、Spark,同樣也有專門的Python對口服務(wù)。 現(xiàn)在大家應(yīng)該感到Python真是個(gè)寶藏男孩,應(yīng)該就能更為理解,為什么開發(fā)人工智能要用Python,一項(xiàng)人工智能的工程可能涉及到多個(gè)環(huán)節(jié),而如果選擇使用Python,它可以給你提供一條龍服務(wù)。 不過,好處我們已經(jīng)清楚,在實(shí)戰(zhàn)中到底要怎么使用呢?也就是說,我們安裝好了Python,也打開了IDE,現(xiàn)在,眼前的任務(wù)要從哪里開始著手呢? 這是個(gè)很大的問題,知道Python好和知道Python好用,中間是需要大量的實(shí)戰(zhàn)作為橋梁,我推薦大家看一本書,叫《Python程序設(shè)計(jì):人工智能案例實(shí)踐》,這本書拿在手上就像一部字典,書里包含500多個(gè)實(shí)戰(zhàn)案例,看完相信就能對這個(gè)問題有更清晰的答案。 關(guān)于作者:莫凡,網(wǎng)名木羊同學(xué)。娛樂向機(jī)器學(xué)習(xí)解說選手,《機(jī)器學(xué)習(xí)算法的數(shù)學(xué)解析與Python實(shí)現(xiàn)》作者,前沿技術(shù)發(fā)展觀潮者,擅長高冷技術(shù)的“白菜化”解說,微信公眾號“睡前機(jī)器學(xué)習(xí)”,個(gè)人知乎號“木羊”。 《機(jī)器學(xué)習(xí)算法的數(shù)學(xué)解析與Python實(shí)現(xiàn)》 《Python程序設(shè)計(jì):人工智能案例實(shí)踐》 |
|
|