- Python機器學習經典實例
- (美)普拉提克·喬西
- 1644字
- 2020-06-23 13:41:54
譯者序
有一天,忽然想到自己整天面對著52個英文字母、9個數字、32個符號和一個空格,經常加班沒有雙休日,好傻。時間不斷被各種噪聲碎片化,完全就是毛姆在《月亮和六便士》里寫的,“If you look on the ground in search of a sixpence, you don't look up, and so miss the moon”,整天低頭刷手機,卻不記得舉頭望明月。生活也愈發無序,感覺漸漸被掏空。薛定諤的《生命是什么》給我提了個醒,他在“以‘負熵’為生”(It Feeds On ‘negative Entropy')一節指出:“要活著,唯一的辦法就是從環境里不斷地汲取負熵?!痹诮榻B了熵的概念及其統計學意義之后,他緊接著在“從環境中引出‘有序’以維持組織”(Organization Maintained By Extracting ‘Order’ From The Environment)一節進一步總結:“一個有機體使本身穩定在較高的有序水平上(等于熵的相當低的水平上)的辦法,就是從環境中不斷地吸取秩序。”這個秩序(負熵、klog(1/n))可以是食物,也可以是知識,按主流叫法就是“正能量”(有些所謂正能量卻碰巧是增加系統無序水平的正熵)。于是,我開始漸漸放棄那些讓人沮喪的老梗,遠離那些引發混亂的噪聲,重新讀書,試著翻譯,學會去愛。這幾年最大的收獲就是明白了“隔行如隔山”的道理,試著循序漸進,教學相長,做力所能及之事,讓編程變簡單。
一般人都不喜歡編程,更不喜歡動手編程(時間消耗:編寫&測試40%、重構40%、風格&文檔20%),卻喜歡在心里、嘴上編程:“先這樣,再那樣,如果要XX,就YY,最后就可以ZZ了?!狈址昼娋涂梢哉f完幾萬行代碼的項目,水還剩大半杯。一旦大期將近,即使要親自動手Copy代碼,也會覺得苦堪搬磚,鍵盤不是紅與黑、屏幕不能左右推、小狗總是鬧跑追,不斷在數不清的理由中增加自己的熵。偶爾看編程書的目的也很明確,就是為了快速上手,找到答案。當然也是在Google、StackOverflow、GitHub網站上找不到答案之后,無可奈何之舉。編程書把看著復雜的知識寫得更復雜,雖然大多篇幅不輸“飛雪連天射白鹿,笑書神俠倚碧鴛”等經典,且綱舉目張、圖文并茂,甚至有作者愛引經據典,卻極少有令人拍案的驚奇之處。為什么同樣是文以載道,編程書卻不能像武俠小說一樣簡單具體,反而顯得了無生趣,令人望而卻步?雖然編程的目的就是用計算機系統解決問題,但是大多數問題的知識都在其他領域中,許多作者在介紹編程技巧時,又試圖介紹一些并不熟悉的背景知識,顯得生澀難懂,且增加了書的厚度。
有時我們真正需要的,就是能快刀斬亂麻的代碼。(Talk is cheap, show me the code.)編程與研究數理化不同,沒有任何假設、原命題、思維實驗,并非科學;與舞劍、奏樂、炒菜相似,都是手藝,只要基礎扎實,便結果立判。編程技巧也可以像劍譜、樂譜、食譜一般立竿見影,這本《Python機器學習經典實例》正是如此,直接上代碼,照著做就行,不用糾結為什么。
機器學習是交叉學科,應用廣泛,目前主流方法為統計機器學習。既然是以統計學為基礎,那么就不只是計算機與數學專業的私房菜了,機器學習在自然科學、農業科學、醫藥科學、工程與技術科學、人文與社會科學等多種學科中均可應用。如果你遇到了回歸、分類、預測、聚類、文本分析、語音識別、圖像處理等經典問題,需要快速用Python解決,那么這本菜譜適合你。即使你對機器學習方法還一知半解,也不妨一試。畢竟是Python的機器學習,還能難到哪兒去呢?目前十分流行的Python機器學習庫scikit-learn是全書主角之一,功能全面,接口友好,許多經典的數據集和機器學習案例都來自Kaggle
。若有時間追根溯源,請研究周志華教授的《機器學習》西瓜書,周教授啃著西瓜把機器學習調侃得淋漓盡致,詳細的參考文獻尤為珍貴。但是想當作菜譜看,拿來就用,還是需要費一番功夫;若看書不過癮,還有吳恩達(Andrew Ng)教授在Coursera上的機器學習公開課
,機器學習入門最佳視頻教程,吳教授用的工具是Matlab的免費開源版本Octave
,你也可以用Python版
演示教學示例。
學而時習之,不亦樂乎。學習編程技巧,解決實際問題,是一件快樂的事情。希望這本Python機器學習經典案例,可以成為你的負熵,幫你輕松化解那些陳年老梗。如果再努努力,也許陸汝鈐院士在《機器學習》序言中提出的6個問題,你也有答案了。
示例代碼:
"""打印ASCII字母表、數字、標點符號""" import string for item in [string.ascii_letters, string.digits, string.punctuation]: print('{}\t{}'.format(len(item), item))
輸出結果:
52 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 100123456789 32 ! "#$%&'()*+, -./:; <=>? @[\]^_`{|}~
- Java系統分析與架構設計
- 跟“龍哥”學C語言編程
- Mastering Natural Language Processing with Python
- Learning Linux Binary Analysis
- Modern JavaScript Applications
- Java語言程序設計教程
- Instant Debian:Build a Web Server
- Building Serverless Architectures
- 工業機器人離線編程
- 數據科學中的實用統計學(第2版)
- Python面試通關寶典
- Getting Started with Windows Server Security
- 流暢的Python
- C語言學習手冊
- EOS區塊鏈應用開發指南