《機(jī)器學(xué)習(xí)入門(mén)實(shí)戰(zhàn)》第 01 篇 如何入門(mén)機(jī)器學(xué)習(xí)?
作者: 不剪發(fā)的Tony老師
畢業(yè)于北京航空航天大學(xué),十多年數(shù)據(jù)庫(kù)管理與開(kāi)發(fā)經(jīng)驗(yàn),目前在一家全球性的金融公司從事數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)。CSDN學(xué)院簽約講師以及GitChat專(zhuān)欄作者。csdn上的博客收藏于以下地址:https://tonydong.blog.csdn.net
文章目錄
機(jī)器學(xué)習(xí)與數(shù)據(jù)挖掘
傳統(tǒng)入門(mén)方法的問(wèn)題
逆向?qū)W習(xí)方法
專(zhuān)欄內(nèi)容介紹
目標(biāo)人群
專(zhuān)欄章節(jié)
機(jī)器學(xué)習(xí)與數(shù)據(jù)挖掘
如果你是一個(gè)想要入門(mén)數(shù)據(jù)科學(xué)的初學(xué)者,首先需要面對(duì)的就是各種相關(guān)的名詞和概念。例如,什么是人工智能、機(jī)器學(xué)習(xí)、數(shù)據(jù)挖掘以及統(tǒng)計(jì)分析?簡(jiǎn)單來(lái)說(shuō),它們之間的關(guān)系如下圖所示。
統(tǒng)計(jì)學(xué)是通過(guò)搜索、整理、分析、描述數(shù)據(jù)等手段,以達(dá)到推斷所測(cè)對(duì)象的本質(zhì),甚至預(yù)測(cè)對(duì)象未來(lái)的一門(mén)綜合性科學(xué)。統(tǒng)計(jì)學(xué)方法主要分為描述統(tǒng)計(jì)和推斷統(tǒng)計(jì);例如計(jì)算大學(xué)生身高的平均數(shù)、標(biāo)準(zhǔn)差以及收入和學(xué)歷之間是否具有統(tǒng)計(jì)相關(guān)性都屬于描述統(tǒng)計(jì),而通過(guò)全國(guó)人口普查掌握全國(guó)人口的基本情況屬于推斷統(tǒng)計(jì)。
機(jī)器學(xué)習(xí)是人工智能(AI)的一個(gè)分支,涉及概率論、統(tǒng)計(jì)學(xué)、逼近論、凸分析、算法復(fù)雜度理論等多門(mén)學(xué)科。機(jī)器學(xué)習(xí)專(zhuān)門(mén)研究計(jì)算機(jī)怎樣模擬或?qū)崿F(xiàn)人類(lèi)的學(xué)習(xí)行為,以獲取新的知識(shí)或技能,重新組織已有的知識(shí)結(jié)構(gòu)使之不斷改善自身的性能。
數(shù)據(jù)庫(kù)是按照數(shù)據(jù)結(jié)構(gòu)來(lái)組織、存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù);數(shù)據(jù)倉(cāng)庫(kù)(DW)是為了提供報(bào)告服務(wù)和決策支持的特定數(shù)據(jù)庫(kù)。我們常見(jiàn)的數(shù)據(jù)庫(kù)有 Oracle、MySQL、SQL Server、MongoDB、以及 Apace Hive、HBase 等。
數(shù)據(jù)挖掘一般是指從大量的數(shù)據(jù)中通過(guò)算法搜索隱藏于其中信息的過(guò)程。數(shù)據(jù)挖掘是集統(tǒng)計(jì)學(xué)、機(jī)器學(xué)習(xí)和數(shù)據(jù)庫(kù)技術(shù)于一體的多學(xué)科領(lǐng)域。為了便于理解,我們可以將數(shù)據(jù)挖掘的作用分為兩種:通過(guò)統(tǒng)計(jì)數(shù)據(jù)分析來(lái)解釋過(guò)去以及基于機(jī)器學(xué)習(xí)算法預(yù)測(cè)未來(lái),如下圖所示。
解釋過(guò)去本質(zhì)上也是為了能夠預(yù)測(cè)未來(lái)。通過(guò)統(tǒng)計(jì)學(xué)和可視化的方法對(duì)數(shù)據(jù)進(jìn)行探索,從而發(fā)現(xiàn)歷史數(shù)據(jù)中的規(guī)律或者問(wèn)題;并且為后續(xù)的數(shù)據(jù)挖掘與數(shù)據(jù)建模工作做好準(zhǔn)備。
預(yù)測(cè)未來(lái)的主要方式是建立預(yù)測(cè)算法模型。如果預(yù)測(cè)結(jié)果是離散的類(lèi)別值則稱(chēng)為分類(lèi),例如垃圾郵件檢測(cè)、圖像識(shí)別等;如果預(yù)測(cè)結(jié)果是連續(xù)的數(shù)值則稱(chēng)為回歸,例如藥物反應(yīng)、股票價(jià)格預(yù)測(cè)等;聚類(lèi)則是將相似的觀測(cè)值分配同一個(gè)組中,例如用戶(hù)畫(huà)像、推薦系統(tǒng)等;關(guān)聯(lián)規(guī)則可以在觀察結(jié)果中找到事務(wù)的之間關(guān)聯(lián),例如哪些產(chǎn)品經(jīng)常被一起購(gòu)買(mǎi)。
機(jī)器學(xué)習(xí)領(lǐng)域提供了大量用于數(shù)據(jù)挖掘的算法,同時(shí)也給我們的選擇帶來(lái)一定的困難;下面是一個(gè)常見(jiàn)的機(jī)器學(xué)習(xí)算法速查表(英文原版),可以方便我們需要時(shí)查詢(xún)。
知道這些概念之后,我們來(lái)討論一下初學(xué)者應(yīng)該如何入門(mén)機(jī)器學(xué)習(xí)。如果你去網(wǎng)絡(luò)上搜索,大概會(huì)得到以下一些建議:
閱讀專(zhuān)業(yè)書(shū)籍
學(xué)習(xí) MOOC 課程
閱讀各種博客文章
嘗試 Kaggle/天池競(jìng)賽
不過(guò),這些建議實(shí)際上大部分都不適合入門(mén)學(xué)習(xí)。學(xué)習(xí)一門(mén)技術(shù)或者技能的方法概括起來(lái)大概也就兩種:理論先行或者實(shí)踐先行。
傳統(tǒng)入門(mén)方法的問(wèn)題
大部分傳統(tǒng)學(xué)習(xí)方法采用理論先行的方式,首先需要我們掌握的基礎(chǔ)包括:
高等數(shù)學(xué)
微積分
概論論與統(tǒng)計(jì)
線性代數(shù)
信息論
計(jì)算機(jī)編程語(yǔ)言
數(shù)據(jù)結(jié)構(gòu)與算法
機(jī)器學(xué)習(xí)算法
最優(yōu)化理論
然后,我們可以開(kāi)始實(shí)現(xiàn)簡(jiǎn)單的機(jī)器學(xué)習(xí)算法,參加一些相關(guān)領(lǐng)域的競(jìng)賽,嘗試在實(shí)際工作中使用所學(xué)的知識(shí)。
對(duì)于任何初學(xué)者來(lái)說(shuō),如果一開(kāi)始就要面對(duì)這么多的理論知識(shí),不但耗時(shí)而且很容易影響學(xué)習(xí)的積極性。記得以前我們學(xué)習(xí)英語(yǔ)時(shí),老師總是要求背誦各種單詞,記住各種主謂賓、定狀補(bǔ)的語(yǔ)法,而很少能夠有理解語(yǔ)義的鍛煉環(huán)境;導(dǎo)致現(xiàn)在還是有些拒絕學(xué)習(xí)英語(yǔ)。
english
傳統(tǒng)的機(jī)器學(xué)習(xí)入門(mén)方法也存在同樣的問(wèn)題:過(guò)于專(zhuān)注理論算法和底層細(xì)節(jié),而不是解決實(shí)際問(wèn)題。
逆向?qū)W習(xí)方法
與傳統(tǒng)學(xué)習(xí)方向相反的是,逆向?qū)W習(xí)方法采用實(shí)踐先行的理念,以解決數(shù)據(jù)挖掘的實(shí)際問(wèn)題驅(qū)動(dòng)學(xué)習(xí)過(guò)程。想想我們小時(shí)候是怎么學(xué)會(huì)說(shuō)話的,肯定不是先學(xué)各種拼音、漢字和語(yǔ)法,而是在實(shí)際生活中不斷地聽(tīng)和說(shuō)就自然會(huì)說(shuō)話了;當(dāng)然,想要成為語(yǔ)言學(xué)家肯定要研究這些語(yǔ)言細(xì)節(jié),也需要付出比常人多很多倍的努力。
child
當(dāng)然,并不是說(shuō)不需要基礎(chǔ)理論知識(shí)。理論非常重要,但是對(duì)于入門(mén)的初學(xué)者,應(yīng)該先對(duì)整體的流程建立認(rèn)知;然后再?gòu)膶?shí)踐到理論,有針對(duì)性的學(xué)習(xí)各個(gè)知識(shí)點(diǎn)。這樣更容易獲得成就感,提高學(xué)習(xí)的積極性,有利于初學(xué)者的入門(mén)。
因此,我們將會(huì)采用以下方法帶領(lǐng)大家入門(mén):
選擇一個(gè)行業(yè)成熟的系統(tǒng)化流程;
選擇適合初學(xué)者入門(mén)的工具平臺(tái);
專(zhuān)注于解決實(shí)際的數(shù)據(jù)挖掘問(wèn)題;
針對(duì)性地?cái)U(kuò)展算法原理和知識(shí)點(diǎn)。
首先,我們需要站在前人的基礎(chǔ)上;數(shù)據(jù)挖掘領(lǐng)域?qū)嶋H上很早就建立了成熟的行業(yè)流程,即 CRISP-DM(cross-industry standard process for data mining)。我們將其轉(zhuǎn)換為以下流程圖:
為了解決現(xiàn)實(shí)世界中的問(wèn)題,我們通過(guò)采集原始數(shù)據(jù),經(jīng)過(guò)格式化、清洗、轉(zhuǎn)換和特征選擇等預(yù)處理,以及探索性數(shù)據(jù)分析,得到適合建立模型的數(shù)據(jù);然后比較和選擇不同的算法,對(duì)其進(jìn)行評(píng)估和調(diào)優(yōu);反復(fù)整個(gè)過(guò)程最終獲得并利用結(jié)果。
常見(jiàn)的機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘平臺(tái)有很多,包括商業(yè)平臺(tái) SPSS、SAS 以及 Matlab 等;開(kāi)源的 Python、R 語(yǔ)言等;大數(shù)據(jù)平臺(tái)
Mahout、Spark
等。我們將會(huì)使用一個(gè)免費(fèi)開(kāi)源的機(jī)器學(xué)習(xí)平臺(tái):Orange。它是一個(gè)非常適合初學(xué)者入門(mén)的工具,提供了簡(jiǎn)單易用的圖形操作界面,無(wú)需任何編程和算法基礎(chǔ)就能完成各種機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘任務(wù)。以下是一個(gè)
Orange 分類(lèi)工作流的界面。
不僅如此,Orange 基于 Python 開(kāi)發(fā),并且使用 Python 代碼庫(kù)進(jìn)行科學(xué)計(jì)算,例如 numpy、scipy 以及 scikit-learn;高級(jí)用戶(hù)既可以通過(guò) Python 編程為其提供擴(kuò)展的功能,也可以將其作為 Python 的一個(gè)編程模塊使用。