雷鋒網(wǎng)按:本文為雷鋒字幕組編譯的技術(shù)博客,原標(biāo)題Some Essential Hacks and Tricks for Machine Learning with Python,作者為T(mén)irthajyoti Sarkar。 翻譯 | 趙朋飛 Noodlesslee 整理 | 凡江 我們Pick了一些用Python進(jìn)行機(jī)器學(xué)習(xí)實(shí)踐的基本技巧。
入門(mén)機(jī)器學(xué)習(xí)從來(lái)不是一件簡(jiǎn)單的事。除了成熟的MOOC,網(wǎng)絡(luò)上還有海量的免費(fèi)資源,這里列舉了一些曾經(jīng)對(duì)我有幫助的資源:
對(duì)于機(jī)器學(xué)習(xí)/人工智能,Python是一款優(yōu)秀的語(yǔ)言嗎? 除非你是一個(gè)研究復(fù)雜算法的純理論證明的博士研究員,否則你將主要使用現(xiàn)有的機(jī)器學(xué)習(xí)算法,并將它們應(yīng)用于解決新問(wèn)題。這就需要你懂得如何編程。 關(guān)于“最優(yōu)秀的數(shù)據(jù)科學(xué)語(yǔ)言”有很多爭(zhēng)論。當(dāng)爭(zhēng)論激烈的時(shí)候,停下來(lái)讀讀這篇有見(jiàn)地的文章,了解你的想法,看看你的選擇。或者,看看 KDnuggets 的文章。目前,大家普遍認(rèn)為,從開(kāi)發(fā)到部署及維護(hù),Python可以幫助開(kāi)發(fā)人員更有效率。與 Java、C 和 C++ 相比,Python 的語(yǔ)法更簡(jiǎn)單,更高級(jí)。 它擁有充滿(mǎn)活力的社區(qū),開(kāi)源文化,數(shù)以百計(jì)高質(zhì)量的機(jī)器學(xué)習(xí)程序庫(kù),以及來(lái)自行業(yè)巨頭的鼎力支持(例如:谷歌,Dropbox,Airbnb 等)。這篇文章會(huì)關(guān)注PythonIt應(yīng)用于機(jī)器學(xué)習(xí)上的相關(guān)基本技巧。 需要了解及掌握的基礎(chǔ)程序庫(kù) 為使機(jī)器學(xué)習(xí)實(shí)踐效率更高,你需要掌握一些 Python 核心庫(kù)。這些庫(kù)簡(jiǎn)單介紹如下。 Numpy Numerical Python 的縮寫(xiě),NumPy 是采用 Python 進(jìn)行科學(xué)計(jì)算和數(shù)據(jù)分析所必須的基本程序庫(kù)。幾乎所有的高級(jí)工具都是基于 Numpy 構(gòu)建的,例如 Pandas 和 scikit-learn。 TensorFlow 使用 Numpy數(shù)組作為基礎(chǔ)構(gòu)件模塊,基于此,為深度學(xué)習(xí)任務(wù)構(gòu)建了 Tensor 對(duì)象和 graphflow 。很多 Numpy 操作都是用 C 實(shí)現(xiàn)的,這使它運(yùn)行更快。對(duì)數(shù)據(jù)科學(xué)和現(xiàn)代機(jī)器學(xué)習(xí)任務(wù)來(lái)說(shuō),這是一個(gè)寶貴的優(yōu)勢(shì)。 Pandas 這是 Python 科學(xué)計(jì)算領(lǐng)域進(jìn)行通用數(shù)據(jù)分析方面最流行的庫(kù)。Pandas 基于 Numpy 數(shù)組構(gòu)建,因此保留了計(jì)算速度快的特性,并且提供了很多數(shù)據(jù)工程領(lǐng)域的功能,包括:
Matplotlib 與 Seaborn 數(shù)據(jù)可視化和善于用數(shù)據(jù)表達(dá)是每一位數(shù)據(jù)科學(xué)家應(yīng)有的基本技能,這些技能可以有效傳達(dá)從分析中獲得的信息。這對(duì)于掌握并精通機(jī)器學(xué)習(xí)是非常重要的,在你的機(jī)器學(xué)習(xí)工作流(ML Pipeline)中也是如此。在決定應(yīng)用特定的ML算法之前,您需要對(duì)數(shù)據(jù)集進(jìn)行探索性分析。 Matplotlib 是應(yīng)用最廣泛的2維可視化庫(kù),它擁有令人眼花繚亂的數(shù)組命令和接口,能夠從數(shù)據(jù)生成高質(zhì)量的圖表。這里有一個(gè)非常詳細(xì)和內(nèi)容豐富的文章,可以幫你入門(mén) Matplotlib 。 Seaborn 是另一個(gè)非常棒的專(zhuān)注于統(tǒng)計(jì)繪圖的可視化庫(kù)。機(jī)器學(xué)習(xí)從業(yè)者是值得學(xué)習(xí)的。在 Matplotlib 基礎(chǔ)之上,Seaborn 提供 API (具備繪圖樣式和顏色默認(rèn)的靈活選擇),針對(duì)常見(jiàn)的統(tǒng)計(jì)繪圖類(lèi)型它定義簡(jiǎn)單的高級(jí)函數(shù),針對(duì) Pandas 庫(kù)可以無(wú)縫對(duì)接。這里有一份適合初學(xué)者的很棒的 Seaborn 教程。 Seaborn plots的例子 Scikit-learn Scikit-learn 是必備的最重要的常見(jiàn) Python 的機(jī)器學(xué)習(xí)包。它支持多種分類(lèi)、回歸和聚類(lèi)算法,包括支持向量機(jī)、隨機(jī)森林、梯度提升、k-means 和 DBSCAN 。Scikit-learn 可與 NumPy 庫(kù) SciPy 庫(kù)交互操作。它通過(guò)一致界面提供一系列的監(jiān)督和非監(jiān)督算法。Scikit-learn 庫(kù)致力于實(shí)現(xiàn)一定程度的健壯性和支持生產(chǎn)實(shí)踐中的使用。這意味著要深入關(guān)注例如易于使用,代碼質(zhì)量,協(xié)作,文檔和性能等問(wèn)題。可以看看這篇關(guān)于Scikit-learn使用的機(jī)器學(xué)習(xí)詞匯的簡(jiǎn)單介紹。這里是另一篇文章,演示了使用 Scikit-learn 的簡(jiǎn)單機(jī)器學(xué)習(xí)管道方法。這里有另一篇使用Scikit-learn演示簡(jiǎn)單的機(jī)器學(xué)習(xí)方法的文章。 Scikit-learn背后的閃光點(diǎn) 針對(duì)機(jī)器學(xué)習(xí)初學(xué)者和經(jīng)驗(yàn)豐富的專(zhuān)業(yè)人士,Scikit-learn 是非常容易上手的包。然而,即使是非常有經(jīng)驗(yàn)的ML從業(yè)人員也可能沒(méi)有意識(shí)到這個(gè)包背后所有的的閃光點(diǎn),它們可以顯著提升效率。我試圖展示scikit-learn中少為人知的方法/接口。 管道:它可以將多個(gè) estimators 封裝成一個(gè)。處理數(shù)據(jù)過(guò)程中通常有一系列固定步驟所以它非常有用,例如特征選擇、規(guī)范化和分類(lèi)。這里有份教程供深入了解。 網(wǎng)格搜索:超參數(shù)不是在estimators直接學(xué)習(xí)到的參數(shù)。在 scikit-learn 中它們作為參數(shù)傳遞給估計(jì)類(lèi)的構(gòu)造函數(shù)。搜索超參數(shù)空間以便獲得最好交叉驗(yàn)證分?jǐn)?shù)是可行且被推薦的做法。當(dāng)構(gòu)建 estimators 時(shí)待估的任何參數(shù)都可以用這種方式優(yōu)化。點(diǎn)擊這里閱讀更多信息。 驗(yàn)證曲線(xiàn):每個(gè) estimator 都有其優(yōu)缺點(diǎn)。泛化誤差可依據(jù)偏差,方差和噪音分解。estimators 的偏差是不同訓(xùn)練集的平均誤差。estimators 的方差表示其對(duì)改變訓(xùn)練集有多敏感。噪音是數(shù)據(jù)的一個(gè)屬性。繪制單個(gè)超參數(shù)在訓(xùn)練集和驗(yàn)證集的分?jǐn)?shù),以確定某些超參數(shù)估計(jì)量是過(guò)擬合還是欠擬合的做法是非常有用的。Scikit-learn 內(nèi)置方法請(qǐng)移步于此。 分類(lèi)數(shù)據(jù)的獨(dú)熱編碼:它是一種非常常見(jiàn)的數(shù)據(jù)預(yù)處理任務(wù),用于將輸入的分類(lèi)特征轉(zhuǎn)換為分類(lèi)或預(yù)測(cè)任務(wù)中使用的二進(jìn)制編碼(例如:摻有數(shù)指和文本特征的邏輯回歸)。Scikit-learn 提供強(qiáng)大而簡(jiǎn)單的方法實(shí)現(xiàn)上述過(guò)程。它直接在 Pandas 數(shù)據(jù)框或 Numpy 數(shù)組上操作,因此便于用戶(hù)為這些轉(zhuǎn)換編寫(xiě)任何特殊的 map/apply 函數(shù)。 多項(xiàng)式特征生成:對(duì)于不盡其數(shù)的回歸建模任務(wù),在輸入數(shù)據(jù)中考慮非線(xiàn)性特征來(lái)增加模型的復(fù)雜性是有用的。一個(gè)簡(jiǎn)單且常用的方法是使用多項(xiàng)式特征,可得到特征的高階和交互項(xiàng)。Scikit-learn有現(xiàn)成的函數(shù),可根據(jù)給定的特征集和用戶(hù)選擇的最高多項(xiàng)式的程度生成高階的交叉項(xiàng)。 數(shù)據(jù)集生成器:Scikit-learn包含各種隨機(jī)樣本生成器,可用于構(gòu)建給定大小和復(fù)雜度的人工數(shù)據(jù)集。它具有分類(lèi),聚類(lèi),回歸,矩陣分解和多種測(cè)試的函數(shù)。 實(shí)踐交互式機(jī)器學(xué)習(xí) 在2014年 Jupyter 項(xiàng)目于脫胎于 IPython 項(xiàng)目,并迅速演變?yōu)橹С炙兄髁骶幊陶Z(yǔ)言的交互式數(shù)據(jù)科學(xué)和科學(xué)計(jì)算的筆記本。毫無(wú)疑問(wèn),它在幫助數(shù)據(jù)科學(xué)家快速測(cè)試,為他/她的想法創(chuàng)建原型,展示成果給同行和開(kāi)源社區(qū)等方面帶來(lái)巨大影響。 然而,只有當(dāng)用戶(hù)能夠交互式地控制模型參數(shù)并實(shí)時(shí)看到效果(幾乎)的時(shí)侯,學(xué)習(xí)和測(cè)試數(shù)據(jù)才變得真正浸潤(rùn)其中。Jupyter 中大多數(shù)呈現(xiàn)都是靜態(tài)的 但是你需要更多控制,你想通過(guò)簡(jiǎn)單的滑動(dòng)鼠標(biāo)而不是通過(guò)編寫(xiě) for 循環(huán)改變變量。該怎么辦?你可以使用 IPython 的插件。 插件是重要的 python 組件,它通過(guò)瀏覽器有所體現(xiàn),通常作為一個(gè)前端 (HTML/Java) 呈現(xiàn)通道控件,如滑塊、文本框等。 本文我演示使用簡(jiǎn)單插件完成基礎(chǔ)的曲線(xiàn)擬合練習(xí)。后續(xù)文章將進(jìn)一步擴(kuò)展到交互式及其學(xué)習(xí)技術(shù)領(lǐng)域。 深度學(xué)習(xí)框架 本文介紹使用 Python 探索機(jī)器學(xué)習(xí)奇妙世界的重要技巧。但它不包括 TensorFlow,Keras 或 PyTorch等深度學(xué)習(xí)框架,因?yàn)樗鼈兠恳粋€(gè)都需要深入討論。您可以在這里閱讀一些關(guān)于上述主題的非常棒的文章,但稍后我們可能會(huì)對(duì)這些驚艷的框架進(jìn)行專(zhuān)門(mén)討論。
總結(jié) 文章不可能覆蓋機(jī)器學(xué)習(xí)主題的全部?jī)?nèi)容(即使是一小部分)。但是,希望這篇文章能激發(fā)你的興趣,也為你提供 Python 生態(tài)系統(tǒng)中已存在一些強(qiáng)大框架的明確指針,確保開(kāi)始你的機(jī)器學(xué)習(xí)之旅。 博客原址 https://heartbeat./some-essential-hacks-and-tricks-for-machine-learning-with-python-5478bc6593f2
雷鋒網(wǎng)雷鋒網(wǎng) |
|
來(lái)自: 博采簡(jiǎn)納 > 《教育--職業(yè)》