《 Python 機(jī)器學(xué)習(xí)基礎(chǔ)教程》總結(jié)

處理機(jī)器學(xué)習(xí)問題

學(xué)完了本書介紹的所有強(qiáng)大的方法,你現(xiàn)在可能很想馬上行動,開始用你最喜歡的算法來解決數(shù)據(jù)相關(guān)的問題。但這通常并不是開始分析的好方法。機(jī)器學(xué)習(xí)算法通常只是更大的數(shù)據(jù)分析與決策過程的一小部分。為了有效地利用機(jī)器學(xué)習(xí),我們需要退后一步,全面地思考問題。首先,你應(yīng)該思考想要回答什么類型的問題。你想要做探索性分析,只是看看能否在數(shù)據(jù)中找到有趣的內(nèi)容?或者你已經(jīng)有了特定的目標(biāo)?通常來說,你在開始時(shí)有一個(gè)目標(biāo),比如檢測欺詐用戶交易、推薦電影或找到未知行星。如果你有這樣的目標(biāo),那么在構(gòu)建系統(tǒng)來實(shí)現(xiàn)目標(biāo)之前,你應(yīng)該首先思考如何定義并衡量成功,以及成功的解決方案對總體業(yè)務(wù)目標(biāo)或研究目標(biāo)有什么影響。假設(shè)你的目標(biāo)是欺詐檢測。

然后就出現(xiàn)了下列問題:

  • 如何度量欺詐預(yù)測是否實(shí)際有效?
  • 我有沒有評估算法的合適數(shù)據(jù)?
  • 如果我成功了,那么我的解決方案會對業(yè)務(wù)造成什么影響?

正如第 5 章中所述,你最好能使用商業(yè)指標(biāo)直接度量算法的性能,比如增加利潤或減少損失。但這通常難以做到。一個(gè)更容易回答的問題是:“如果我構(gòu)建出完美的模型,那么會怎么樣?”如果完美地檢測出所有欺詐行為可以為你的公司每月節(jié)省 100 美元,那么這些省下來的錢可能都不夠保證讓你開始動手開發(fā)算法。如果模型可能為你的公司每月節(jié)省上萬美元,那么這個(gè)問題就值得探索。

假設(shè)你已經(jīng)定義好了要解決的問題,知道一種解決方案可能對你的項(xiàng)目產(chǎn)生重大影響;此外,你還確信擁有合適的信息來評估模型是否成功。接下來的步驟通常是獲取數(shù)據(jù)并構(gòu)建工作原型。本書中我們討論過許多你可以使用的模型,以及如何正確地評估和調(diào)節(jié)這些模型。但在嘗試這些模型時(shí)請記住,這只是更大的數(shù)據(jù)科學(xué)工作流程中的一小部分,模型構(gòu)建通常是“收集新數(shù)據(jù)、清洗數(shù)據(jù)、構(gòu)建模型和分析模型”這個(gè)反饋環(huán)路的一部分。分析模型所犯的錯誤通常告訴我們:數(shù)據(jù)中缺失了哪些內(nèi)容、還可以收集哪些額外數(shù)據(jù),或者如何重新規(guī)劃任務(wù)使機(jī)器學(xué)習(xí)更加高效。收集更多數(shù)據(jù)或不同的數(shù)據(jù),或者稍微改變?nèi)蝿?wù)規(guī)劃,可能會比連續(xù)運(yùn)行網(wǎng)格搜索來調(diào)參的回報(bào)更高。

參與決策過程的人

你還應(yīng)該考慮是否應(yīng)該讓人參與決策過程,以及如何參與。有些過程(比如無人駕駛汽車的行人檢測)需要立即做出決定。其他過程可能不需要立刻的響應(yīng),所以可以讓人來決定不確定的決策。舉個(gè)例子,醫(yī)療應(yīng)用可能需要非常高的精度,單靠機(jī)器學(xué)習(xí)算法可能無法達(dá)到。但如果一個(gè)算法可以自動完成 90%、50% 甚至只有 10% 的決策過程,那么都可能已經(jīng)減少了響應(yīng)時(shí)間或降低了成本。許多應(yīng)用都以“簡單情況”為主,算法可以對其做出決策,還有相對較少的“復(fù)雜情況”,可以將其重新交給人來決定。

從原型到生產(chǎn)

本書中討論的工具對許多機(jī)器學(xué)習(xí)應(yīng)用來說都是很好的,可以非??焖俚剡M(jìn)行分析和原型設(shè)計(jì)。許多組織,甚至是非常大型的組織,比如國際銀行和全球社交媒體公司,也將 Python 和 scikit-learn 用于生產(chǎn)系統(tǒng)。但是,許多公司擁有復(fù)雜的基礎(chǔ)架構(gòu),將 Python 集成到這些系統(tǒng)中并不總是很容易。這不一定是個(gè)問題。在許多公司中,數(shù)據(jù)分析團(tuán)隊(duì)使用 Python 或 R 等語言,可以對想法進(jìn)行快速測試,而生產(chǎn)團(tuán)隊(duì)則使用 Go、Scala、C++ 和 Java 等語言來構(gòu)建魯棒性更好的可擴(kuò)展系統(tǒng)。數(shù)據(jù)分析的需求與構(gòu)建實(shí)時(shí)服務(wù)并不相同,所以這些任務(wù)使用不同的語言是有道理的。一個(gè)相對常見的解決方案是使用一種高性能語言在更大的框架內(nèi)重新實(shí)現(xiàn)分析團(tuán)隊(duì)找到的解決方案。這種方法比嵌入整個(gè)庫或整個(gè)編程語言并與不同數(shù)據(jù)格式互相轉(zhuǎn)換要更加簡單。

無論你能否在生產(chǎn)系統(tǒng)中使用 scikit-learn,重要的是要記住,生產(chǎn)系統(tǒng)的要求與一次性的分析腳本不同。如果將一個(gè)算法部署到更大的系統(tǒng)中,那么會涉及軟件工程方面的很多內(nèi)容,比如可靠性、可預(yù)測性、運(yùn)行時(shí)間和內(nèi)存需求。對于在這些領(lǐng)域表現(xiàn)良好的機(jī)器學(xué)習(xí)系統(tǒng)來說,簡單就是關(guān)鍵。請仔細(xì)檢查數(shù)據(jù)處理和預(yù)測流程中的每一部分,并問你自己這些問題:每個(gè)步驟增加了多少復(fù)雜度?每個(gè)組件對數(shù)據(jù)或計(jì)算基礎(chǔ)架構(gòu)的變化的魯棒性有多高?每個(gè)組件的優(yōu)點(diǎn)能否使其復(fù)雜度變得合理?如果你正在構(gòu)建復(fù)雜的機(jī)器學(xué)習(xí)系統(tǒng),我們強(qiáng)烈推薦閱讀 Google 機(jī)器學(xué)習(xí)團(tuán)隊(duì)的研究者發(fā)布的這篇論文:“Machine Learning: The High Interest Credit Card of Technical Debt”(http://research.google.com/pubs/pub43146.html)。這篇文章重點(diǎn)介紹了在大規(guī)模生產(chǎn)中創(chuàng)建并維護(hù)機(jī)器學(xué)習(xí)軟件的權(quán)衡。

雖然技術(shù)債問題在大規(guī)模的長期項(xiàng)目中特別緊迫,但即使是短期和較小的系統(tǒng),吸取的教訓(xùn)也有助于我們構(gòu)建更好的軟件。

測試生產(chǎn)系統(tǒng)

在這本書中,我們介紹了如何基于事先收集的測試集來評估算法的預(yù)測結(jié)果。這被稱為離線評估(offline evaluation)。但如果你的機(jī)器學(xué)習(xí)系統(tǒng)是面向用戶的,那么這只是評估算法的第一步。下一步通常是在線測試(online testing)或實(shí)時(shí)測試(live testing),對在整個(gè)系統(tǒng)中使用算法的結(jié)果進(jìn)行評估。改變網(wǎng)站向用戶呈現(xiàn)的推薦結(jié)果或搜索結(jié)果,可能會極大地改變用戶行為,并導(dǎo)致意想不到的結(jié)果。為了防止出現(xiàn)這種意外,大部分面向用戶的服務(wù)都會采用 A/B 測試(A/B testing),這是一種盲的(blind)用戶研究形式。在 A/B 測試中,在用戶不知情的情況下,為選中的一部分用戶提供使用算法 A 的網(wǎng)站或服務(wù),而為其余用戶提供算法 B。對于兩組用戶,在一段時(shí)間內(nèi)記錄相關(guān)的成功指標(biāo)。然后對算法 A 和算法 B 的指標(biāo)進(jìn)行對比,并根據(jù)這些指標(biāo)在兩種方法中做出選擇。使用 A/B 測試讓我們能夠在實(shí)際情況下評估算法,這可能有助于我們發(fā)現(xiàn)用戶與模型交互時(shí)的意外后果。通常情況下,A 是一個(gè)新模型,而 B 是已建立的系統(tǒng)。在線測試中還有比 A/B 測試更為復(fù)雜的機(jī)制,比如 bandit 算法。John Myles White 的 Bandit Algorithms for Website Optimization(O'Reilly 出版社,http://shop.oreilly.com/product/0636920027393.do)一書對這一主題做出了很好的介紹。

構(gòu)建你自己的估計(jì)器

本書包含 scikit-learn 中實(shí)現(xiàn)的大量工具和算法,可用于各種類型的任務(wù)。但是,你通常需要對數(shù)據(jù)做一些特殊處理,這些處理方法沒有在 scikit-learn 中實(shí)現(xiàn)。在將數(shù)據(jù)傳入 scikit-learn 模型或管道之前,只做數(shù)據(jù)預(yù)處理可能也足夠了。但如果你的預(yù)處理依賴于數(shù)據(jù),而且你還想使用網(wǎng)格搜索或交叉驗(yàn)證,那么事情就變得有點(diǎn)復(fù)雜了。

我們在第 6 章中討論過將所有依賴于數(shù)據(jù)的處理過程放在交叉驗(yàn)證循環(huán)中的重要性。那么如何同時(shí)使用你自己的處理過程與 scikit-learn 工具?有一種簡單的解決方案:構(gòu)建你自己的估計(jì)器!實(shí)現(xiàn)一個(gè)與 scikit-learn 接口兼容的估計(jì)器是非常簡單的,從而可以與 Pipeline、GridSearchCVcross_val_score 一起使用。你可以在 scikit-learn 文檔中找到詳細(xì)說明(http://scikit-learn.org/stable/developers/contributing.html#rolling-your-own-estimator),但下面是其要點(diǎn)。實(shí)現(xiàn)一個(gè)變換器類的最簡單的方法,就是從 BaseEstimatorTransformerMixin 繼承,然后實(shí)現(xiàn) __init__、fitpredict 函數(shù),如下所示。

In[1]:

實(shí)現(xiàn)一個(gè)分類器或回歸器的方法是類似的,你只需要從 ClassifierMixinRegressorMixin 繼承,而不是 TransformerMixin。此外,你還要實(shí)現(xiàn) predict,而不必實(shí)現(xiàn) transform。

從上面的例子中可以看出,實(shí)現(xiàn)你自己的估計(jì)器需要很少的代碼,隨著時(shí)間的推移,大部分 scikit-learn 用戶都會構(gòu)建出一組自定義模型。

下一步怎么走

本書對機(jī)器學(xué)習(xí)進(jìn)行了介紹,并讓你成為一名高效的從業(yè)者。但是,如果你想要進(jìn)一步提高機(jī)器學(xué)習(xí)技能,下面是一些關(guān)于書籍和更專業(yè)的資源的建議,以便你進(jìn)一步深入研究。

理論

在本書中,我們試圖直觀地解釋大多數(shù)常見機(jī)器學(xué)習(xí)算法的工作原理,而不要求你在數(shù)學(xué)或計(jì)算機(jī)科學(xué)方面具有堅(jiān)實(shí)的基礎(chǔ)。但是,我們討論的許多模型都使用了概率論、線性代數(shù)和最優(yōu)化方面的理論。雖然沒有必要理解這些算法的所有實(shí)現(xiàn)細(xì)節(jié),但我們認(rèn)為,了解算法背后的一些理論知識可以讓你成為更優(yōu)秀的數(shù)據(jù)科學(xué)家。關(guān)于機(jī)器學(xué)習(xí)理論有許多好書,如果我們所講的內(nèi)容激起了你對機(jī)器學(xué)習(xí)可能性的興趣,那么我們建議你挑選至少一本書深入閱讀。我們在前言中已經(jīng)提到過 Hastie、Tibshirani 和 Friedman 合著的《統(tǒng)計(jì)學(xué)習(xí)基礎(chǔ)》一書,這里值得重新推薦一下。另一本相當(dāng)好讀的書是 Stephen Marsland 的 Machine Learning: An Algorithmic Perspective(Chapman and Hall/CRC 出版社),它還附帶有 Python 代碼。還有兩本強(qiáng)烈推薦的經(jīng)典著作:一本是 Christopher Bishop 的 Pattern Recognition and Machine Learning(Springer 出版社),著重于概率框架;另一本是 Kevin Murphy 的 Machine Learning: A Probabilistic Perspective(MIT 出版社),全面論述了機(jī)器學(xué)習(xí)方法(1000 多頁),深入介紹了最先進(jìn)的方法,內(nèi)容比本書要豐富得多。

其他機(jī)器學(xué)習(xí)框架和包

雖然 scikit-learn 是我們最喜歡的機(jī)器學(xué)習(xí)軟件包1,Python 也是我們最喜歡的機(jī)器學(xué)習(xí)語言,但還有許多其他選擇。根據(jù)你的需求,Python 和 scikit-learn 可能不是你在特定情況下的最佳選擇。通常情況下,Python 很適合嘗試與評估模型,但更大型的 Web 服務(wù)和應(yīng)用更常用 Java 或 C++ 編寫,部署模型可能需要與這些系統(tǒng)進(jìn)行集成。你想要考慮 scikit-learn 之外的選擇可能還有一個(gè)原因,就是你對統(tǒng)計(jì)建模和推斷比對預(yù)測更感興趣。在這種情況下,你應(yīng)該考慮使用 Python 的 statsmodels 包,它用更具有統(tǒng)計(jì)學(xué)意義的接口實(shí)現(xiàn)了多種線性模型。如果你還沒有專情于 Python,那么還可以考慮使用 R,這是數(shù)據(jù)科學(xué)家的另一種語言。R 是專為統(tǒng)計(jì)分析設(shè)計(jì)的語言,因其出色的可視化功能和許多可用的統(tǒng)計(jì)建模包(通常是非常專業(yè)化的)而聞名。

另一個(gè)常用的機(jī)器學(xué)習(xí)軟件包是 vowpal wabbit(通常簡稱為 vw,以避免繞口),一個(gè)用 C++ 編寫的高度優(yōu)化的機(jī)器學(xué)習(xí)包,還有命令行界面。vw 對大型數(shù)據(jù)集和流數(shù)據(jù)特別有用。對于在集群上分布式運(yùn)行的機(jī)器學(xué)習(xí)算法,在寫作本書時(shí)最常用的解決方案之一是 mllib,一個(gè)基于 spark 分布式計(jì)算環(huán)境構(gòu)建的 Scala 庫。

排序、推薦系統(tǒng)與其他學(xué)習(xí)類型

本書是一本入門書,所以我們重點(diǎn)介紹最常見的機(jī)器學(xué)習(xí)任務(wù):監(jiān)督學(xué)習(xí)中的分類與回歸,無監(jiān)督學(xué)習(xí)中的聚類和信號分解。還有許多類型的機(jī)器學(xué)習(xí),都有很多重要的應(yīng)用。有兩個(gè)特別重要的主題沒有包含在本書中。第一個(gè)是排序問題(ranking),對于特定查詢,我們希望檢索出按相關(guān)性排序的答案。你今天可能已經(jīng)使用過排序系統(tǒng),它是搜索引擎的運(yùn)行原理。你輸入搜索查詢并獲取答案的有序列表,它們按相關(guān)性進(jìn)行排序。Manning、Raghavan 和 Schuütze 合著的 Introduction to Information Retrieval 一書給出了對排序問題的很好介紹。第二個(gè)主題是推薦系統(tǒng)(recommender system),就是根據(jù)用戶偏好向他們提供建議。你可能已經(jīng)在“您可能認(rèn)識的人”“購買此商品的顧客還購買了”或“您的最佳選擇”等標(biāo)題下遇到過推薦系統(tǒng)。關(guān)于這一主題有大量文獻(xiàn),如果想立刻投身于這一主題,你可能對目前經(jīng)典的“Netflix 大獎挑戰(zhàn)”(Netflix prize challenge,http://www.netflixprize.com/)感興趣。Netflix 視頻流網(wǎng)站發(fā)布了關(guān)于電影偏好的大型數(shù)據(jù)集,并對給出最佳推薦的團(tuán)隊(duì)獎勵一百萬美元。另一種常見的應(yīng)用是時(shí)間序列預(yù)測(比如股票價(jià)格),這方面也有大量的文獻(xiàn)。還有許多類型的機(jī)器學(xué)習(xí)任務(wù),比我們這里列出的要多得多,我們建議你從書籍、研究論文和在線社區(qū)中獲取信息,以找到最適合你實(shí)際情況的范式。

概率建模、推斷與概率編程

大部分機(jī)器學(xué)習(xí)軟件包都提供了預(yù)定義的機(jī)器學(xué)習(xí)模型,每種模型應(yīng)用了一種特定算法。但是,許多現(xiàn)實(shí)世界的問題都具有特殊的結(jié)構(gòu),如果將這種結(jié)構(gòu)正確地納入模型,則可以得到性能更好的預(yù)測。通常來說,具體問題的結(jié)構(gòu)可以用概率論的語言來表述。這種結(jié)構(gòu)通常來自于你想要預(yù)測的情況的數(shù)學(xué)模型。為了理解結(jié)構(gòu)化問題的含義,請思考下面這個(gè)例子。

假設(shè)你想要構(gòu)建一個(gè)在戶外空間提供非常詳細(xì)的位置估計(jì)的移動應(yīng)用,以幫助用戶定位歷史遺跡。手機(jī)提供了許多傳感器來幫你獲取精確的位置測量,比如 GPS、加速度計(jì)和指南針。你可能還有該區(qū)域的精確地圖。這個(gè)問題是高度結(jié)構(gòu)化的。你從地圖中知道了感興趣地點(diǎn)的位置和路徑。你還從 GPS 中得到了粗略的位置,而用戶設(shè)備中的加速度計(jì)和指南針可以為你提供非常精確的相對測量。但是,將所有這些工具全部放入黑盒機(jī)器學(xué)習(xí)系統(tǒng)中來預(yù)測位置,可能并不是最好的主意。這將會丟掉你已經(jīng)知道的關(guān)于現(xiàn)實(shí)世界如何運(yùn)行的所有信息。如果指南針和加速度計(jì)告訴你一名用戶正在向北走,而 GPS 告訴你該用戶正在向南走,你可能不相信 GPS。如果位置估計(jì)告訴你用戶剛剛走過一堵墻,你應(yīng)該也會非常懷疑??梢允褂酶怕誓P蛠肀硎鲞@種情況,然后再使用機(jī)器學(xué)習(xí)或概率推斷來找出你應(yīng)該對每種測量方法的信任程度,并推斷出該用戶位置的最佳猜測。

一旦你用正確的方式對現(xiàn)狀和不同因素共同作用的模型進(jìn)行表述,那么就有一些方法可以利用這些自定義模型直接計(jì)算出預(yù)測結(jié)果。這些方法中最普遍的方法被稱為概率編程語言,它們提供了一種非常優(yōu)雅又非常緊湊的方法來表述學(xué)習(xí)問題。概率編程語言的常見例子有 PyMC(可用于 Python)和 Stan(可用于多種語言的框架,包括 Python)。雖然這些軟件包需要你對概率論有一些了解,但它們大大簡化了新模型的創(chuàng)建過程。

神經(jīng)網(wǎng)絡(luò)

雖然我們在第 2 章和第 7 章都簡要涉及了神經(jīng)網(wǎng)絡(luò)的主題,但這是機(jī)器學(xué)習(xí)快速發(fā)展的領(lǐng)域,每周都會發(fā)布新方法和新應(yīng)用。機(jī)器學(xué)習(xí)和人工智能領(lǐng)域的最新突破都由這些進(jìn)步所驅(qū)動,比如 Alpha Go 程序在圍棋比賽中戰(zhàn)勝人類冠軍、語音理解的性能不斷提高,以及接近實(shí)時(shí)的語音翻譯的出現(xiàn)。雖然這一領(lǐng)域的進(jìn)步非常迅速,以致當(dāng)前對最新進(jìn)展的任何參考很快都會過時(shí),但 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 的新書 Deep Learning(MIT 出版社)對這一主題進(jìn)行了全面介紹。2

推廣到更大的數(shù)據(jù)集

在本書中我們總是假設(shè),所處理的數(shù)據(jù)可以被存儲為內(nèi)存(RAM)中的一個(gè) NumPy 數(shù)組或 SciPy 稀疏矩陣。即使現(xiàn)代服務(wù)器通常都具有數(shù)百 GB 的 RAM,但這也是對你所能處理數(shù)據(jù)大小的根本限制。不是所有人都買得起這么大型的機(jī)器,甚至連從云端供應(yīng)商租一臺都負(fù)擔(dān)不起。不過在大多數(shù)應(yīng)用中,用于構(gòu)建機(jī)器學(xué)習(xí)系統(tǒng)的數(shù)據(jù)量相對較小,很少有機(jī)器學(xué)習(xí)數(shù)據(jù)集包含數(shù)百 GB 以上的數(shù)據(jù)。在多數(shù)情況下,這讓擴(kuò)展內(nèi)存或從云端供應(yīng)商租一臺機(jī)器變成可行的解決方案。但是,如果你需要處理 TB 級別的數(shù)據(jù),或者需要節(jié)省處理大量數(shù)據(jù)的費(fèi)用,那么有兩種基本策略:核外學(xué)習(xí)(out-of-core learning)與集群上的并行化(parallelization over a cluster)。

核外學(xué)習(xí)是指從無法保存到主存儲器的數(shù)據(jù)中進(jìn)行學(xué)習(xí),但在單臺計(jì)算機(jī)上(甚至是一臺計(jì)算機(jī)的單個(gè)處理器)進(jìn)行學(xué)習(xí)。數(shù)據(jù)從硬盤或網(wǎng)絡(luò)等來源進(jìn)行讀取,一次讀取一個(gè)樣本或者多個(gè)樣本組成的數(shù)據(jù)塊,這樣每個(gè)數(shù)據(jù)塊都可以讀入 RAM。然后處理這個(gè)數(shù)據(jù)子集并更新模型,以體現(xiàn)從數(shù)據(jù)中學(xué)到的內(nèi)容。然后舍棄該數(shù)據(jù)塊,并讀取下一塊數(shù)據(jù)。scikit-learn 中的一些模型實(shí)現(xiàn)了核外學(xué)習(xí),你可以在在線用戶指南中找到相關(guān)細(xì)節(jié)(http://scikit-learn.org/stable/modules/scaling_strategies.html#scaling-with-instances-using-out-of-core-learning)。因?yàn)楹送鈱W(xué)習(xí)要求所有數(shù)據(jù)都由一臺計(jì)算機(jī)處理,所以在非常大的數(shù)據(jù)集上的運(yùn)行時(shí)間可能很長。此外,并非所有機(jī)器學(xué)習(xí)算法都可以用這種方法實(shí)現(xiàn)。

另一種擴(kuò)展策略是將數(shù)據(jù)分配給計(jì)算機(jī)集群中的多臺計(jì)算機(jī),讓每臺計(jì)算機(jī)處理部分?jǐn)?shù)據(jù)。對于某些模型來說這種方法要快得多,而可以處理的數(shù)據(jù)大小僅受限于集群大小。但是,這種計(jì)算通常需要相對復(fù)雜的基礎(chǔ)架構(gòu)。目前最常用的分布式計(jì)算平臺之一是在 Hadoop 之上構(gòu)建的 spark 平臺。sparkMLLib 包中包含一些機(jī)器學(xué)習(xí)功能。如果你的數(shù)據(jù)已經(jīng)位于 Hadoop 文件系統(tǒng)中,或者你已經(jīng)使用 spark 來預(yù)處理數(shù)據(jù),那么這可能是最簡單的選項(xiàng)。但如果你還沒有這樣的基礎(chǔ)架構(gòu),建立并集成一個(gè) spark 集群可能花費(fèi)過大。前面提到的 vw 包提供了一些分布式功能,在這種情況下可能是更好的解決方案。

磨練你的技術(shù)

與生活中的許多事情一樣,只有實(shí)踐才能讓你成為本書所介紹主題方面的專家。對于不同的任務(wù)和不同的數(shù)據(jù)集,特征提取、預(yù)處理、可視化和模型構(gòu)建可能差異很大。你或許足夠幸運(yùn),已經(jīng)能夠訪問大量數(shù)據(jù)集和任務(wù)。如果你還沒有想到什么任務(wù),那么一個(gè)好的起點(diǎn)是機(jī)器學(xué)習(xí)競賽,它會發(fā)布一個(gè)數(shù)據(jù)集和一個(gè)給定任務(wù),許多團(tuán)隊(duì)為得到最佳預(yù)測結(jié)果而展開競爭。許多公司、非盈利組織和大學(xué)都會舉辦這種比賽。要想找到這些比賽,最常去的地方之一是 Kaggle(https://www.kaggle.com/),這是一個(gè)定期舉辦數(shù)據(jù)科學(xué)比賽的網(wǎng)站,其中一些比賽會提供大量獎金。

Kaggle 論壇也是關(guān)于機(jī)器學(xué)習(xí)最新工具和技巧的很好的信息來源,在網(wǎng)站上可以找到大量數(shù)據(jù)集。在 OpenML 平臺(http://www.openml.org/)上可以找到更多的數(shù)據(jù)集及相關(guān)任務(wù),該平臺擁有 20 000 多個(gè)數(shù)據(jù)集,以及 50 000 多個(gè)相關(guān)的機(jī)器學(xué)習(xí)任務(wù)。處理這些數(shù)據(jù)集可以提供練習(xí)機(jī)器學(xué)習(xí)技能的好機(jī)會。比賽的一個(gè)缺點(diǎn)是,提供了特定的指標(biāo)來優(yōu)化,通常還提供了一個(gè)固定的、已經(jīng)預(yù)處理過的數(shù)據(jù)集。請記住,定義問題和收集數(shù)據(jù)也是現(xiàn)實(shí)世界問題的重要方面,用正確的方式表示問題可能比努力提高分類器精度的最后一個(gè)百分點(diǎn)要重要得多。

總結(jié)

我們希望已經(jīng)讓你相信了機(jī)器學(xué)習(xí)在大量應(yīng)用中的實(shí)用性,以及在實(shí)踐中實(shí)現(xiàn)機(jī)器學(xué)習(xí)的簡單性。繼續(xù)挖掘數(shù)據(jù),同時(shí)不要忽視大局。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容