数据科学指南
摘要:?本文為學(xué)習(xí)數(shù)據(jù)科學(xué)的指南,從編程語言、數(shù)據(jù)庫管理、數(shù)據(jù)收集和整理方法、特征工程、機(jī)器學(xué)習(xí)模型、模型評估方面進(jìn)行講述。
數(shù)據(jù)科學(xué)是一個(gè)相當(dāng)龐大且具有多樣化的領(lǐng)域,側(cè)重于數(shù)學(xué)、計(jì)算機(jī)科學(xué)和領(lǐng)域?qū)I(yè)知識。但是在本文中大部分內(nèi)容將涉及到數(shù)學(xué)基礎(chǔ)知識,當(dāng)然也會介紹一些計(jì)算機(jī)科學(xué)的基本原理。
編程語言
在數(shù)據(jù)科學(xué)領(lǐng)域,最受歡迎的編程語言是Python和R語言。然而我也遇到過使用C/c++、Java和Scala的。而我個(gè)人推薦使用Python,因?yàn)樗墒褂盟鞋F(xiàn)存數(shù)據(jù)庫,并且擁有可以查詢各種數(shù)據(jù)庫和維護(hù)交互式Web UI的專用庫。常用的Python庫有matplotlib,numpy,pandas和scikit-learn。
?
數(shù)據(jù)庫管理
大多數(shù)的數(shù)據(jù)科學(xué)家都屬于數(shù)學(xué)家或數(shù)據(jù)庫設(shè)計(jì)師兩個(gè)陣營中的一個(gè)。如果你是第二個(gè),那么本文對你不會有太大幫助,因?yàn)槟阋呀?jīng)足夠厲害了。如果你和我一樣屬于第一個(gè),并且覺得編寫一個(gè)雙重嵌套的SQL查詢非常困難。那么對我們來說,了解查詢優(yōu)化(SQL和noSQL系統(tǒng))非常重要了。
?
Map Reduce
考慮到Apache項(xiàng)目一直在不斷的添加新工具,想要完全掌握大數(shù)據(jù)技術(shù)非常困難。對于大數(shù)據(jù)技術(shù),我個(gè)人推薦學(xué)習(xí)Hadoop或Spark,二者都使用類似的Map Reduce算法,除了Hadoop使用磁盤,而Spark使用內(nèi)存。常見的Spark包裝器包括Scala、Python和Java。
?
數(shù)據(jù)收集和清理
既然我們已經(jīng)講解了所需要的軟件,那么現(xiàn)在要開始過渡到數(shù)學(xué)領(lǐng)域了。在這部分過程中通常需要有一些解析背景,可能是收集傳感器數(shù)據(jù),分析網(wǎng)站或者進(jìn)行調(diào)查。收集完數(shù)據(jù)后還需要將其轉(zhuǎn)換為可用的表單(例如JSON行文件中的鍵值存儲),之后這些數(shù)據(jù)還必須要進(jìn)行一些數(shù)據(jù)質(zhì)量檢查。下面將介紹一些常見的質(zhì)量檢查:
NaN的處理
NaN或者叫“Not A Number”是常用于表示丟失的數(shù)據(jù)。如果特定要素的NaNs數(shù)量很少,那么通常可以用(整個(gè)數(shù)據(jù)集或一個(gè)窗口的)平均值或(對于稀疏數(shù)據(jù)集)0來填充NaN。數(shù)據(jù)集中的NaN通常表示:
?
類不平衡
尤其是對有監(jiān)督的學(xué)習(xí)模型來說,平衡類或目標(biāo)是非常重要的。然而在欺詐的情況下,嚴(yán)重的階級不平衡很常見(例如數(shù)據(jù)集中只有2%是真正的欺詐)。這些信息對于決定特征工程、建模和模型評估非常重要。
?
單變量分析
在尋找異常值和異常峰值時(shí),對單個(gè)特征的單變量分析(忽略協(xié)變量eeects)非常重要。通常選擇的單變量分析是直方圖。
雙變量分析
在雙變量分析中,每個(gè)特征都會與數(shù)據(jù)集中的其他特征相比較。其中包括相關(guān)矩陣,協(xié)方差矩陣或者我個(gè)人最喜歡的散點(diǎn)矩陣。
?
散點(diǎn)矩陣可以讓我們發(fā)現(xiàn)隱藏的模式,例如:
-應(yīng)該一起設(shè)計(jì)的模型。
-為避免多重性需要消除的特性。
多重共線性實(shí)際上是多個(gè)模型(線性回歸等)的問題,因此需要相應(yīng)的處理。
特征工程
一旦完成了數(shù)據(jù)的收集、清理和分析工作,就該開始創(chuàng)建模型中使用的特性了。在這一節(jié)中,我們將介紹一些常見的特征工程策略。
轉(zhuǎn)換
有時(shí)候特性本身并不能提供有用的信息。例如,想象一下使用互聯(lián)網(wǎng)數(shù)據(jù)。你會得知YouTube Messenger用戶使用幾百兆字節(jié),而YouTube用戶使用千兆字節(jié)。對此最簡單的解決方法是獲取值得對數(shù)。另一個(gè)問題是使用分類值。雖然分類值在數(shù)學(xué)世界很常見,但計(jì)算機(jī)只能識別數(shù)字,為了使其在計(jì)算機(jī)中具有數(shù)學(xué)意義,需要先轉(zhuǎn)換為數(shù)值。分類值執(zhí)行獨(dú)熱編碼(One Hot Encoding)非常常見,如果在給定的記錄中存在獨(dú)熱編碼,則為每個(gè)分類值創(chuàng)建一個(gè)新特性。下面給出獨(dú)熱編碼的例子:
?
降維
有時(shí)過多的稀疏維會妨礙模型的性能。對于這種情況需要使用降維算法。一種常用的降維算法是主分量分析(PCA)。
?
特征選擇
你已經(jīng)設(shè)計(jì)了特征列表,現(xiàn)在是時(shí)候選擇特征來幫助你構(gòu)建用例最佳模型了。這一節(jié)解釋了常見的類別及其子類別:
過濾方法
?
篩選方法通常用來作為預(yù)處理步驟。特征的選擇與任何機(jī)器學(xué)習(xí)算法無關(guān),而是根據(jù)它們在各種統(tǒng)計(jì)測試中的分?jǐn)?shù)和結(jié)果變量的相關(guān)性來選擇的。相關(guān)性是一個(gè)很主觀的術(shù)語,這類的常用方法是皮爾遜相關(guān)系數(shù)、線性判別分析、方差分析和卡方檢驗(yàn)。
包裝方法
在包裝方法中,我們嘗試使用特性的子集來訓(xùn)練模型。基于在之前的模型中得出的推論,我們決定添加或刪除子集中的特性。這個(gè)問題本質(zhì)上是一個(gè)搜索問題。然而這些方法通常計(jì)算成本昂貴。常用方法是正向選擇、反向消除和遞歸特性消除。
嵌入式方法
?
嵌入式方法結(jié)合了過濾器方法和包裝方法的特性。該方法是由具有內(nèi)置特性選擇方法的算法實(shí)現(xiàn)的。常見的嵌入式方法包括LASSO和RIDGE。下面給出了方程中的正則化表達(dá)式:
LASSO:
?
RIDGE:
?
這就是說,為了訪談了解LASSO和RIDGE背后的機(jī)制非常重要。
機(jī)器學(xué)習(xí)模型
機(jī)器學(xué)習(xí)模型分為兩大類:監(jiān)督和無監(jiān)督。當(dāng)標(biāo)簽可用時(shí)為監(jiān)督學(xué)習(xí),不可用時(shí)為無監(jiān)督學(xué)習(xí)。注意,監(jiān)督標(biāo)簽!不要混淆監(jiān)督和非監(jiān)督學(xué)習(xí)的區(qū)別。另外,在運(yùn)行模型之前,人們常犯的一個(gè)錯誤是沒有對特性進(jìn)行規(guī)范。雖然有些模型能自動糾正該錯誤,但是很多模型(如線性回歸)對縮放非常敏感。因此使用前一定要使特性正常。
線性和邏輯回歸
?
線性和邏輯回歸是最基本也是最常用的機(jī)器學(xué)習(xí)算法。在做任何分析之前,確保首先將線性/邏輯回歸作為了基準(zhǔn)!一個(gè)普通的訪談?wù)咄ǔJ褂酶鼜?fù)雜的模型(如神經(jīng)網(wǎng)絡(luò))來開始他們的分析。毫無疑問,神經(jīng)網(wǎng)絡(luò)是非常精確的。然而,基準(zhǔn)是也很重要。如果簡單的回歸模型已經(jīng)有98%的精度并且非常接近過度擬合,那么就不需要得到一個(gè)更復(fù)雜的模型了。也就是說,線性回歸用于連續(xù)目標(biāo),而邏輯回歸則用于二進(jìn)制目(主要是因?yàn)閟igmoid曲線將特征輸入輸出為0或1)。
?
決策樹和隨機(jī)森林
決策樹是一個(gè)比線性回歸模型稍微復(fù)雜的模型。決策樹算法根據(jù)信息增益在不同的特征上進(jìn)行分割,直到它遇到一個(gè)純粹的葉子(即一組只有1個(gè)標(biāo)簽的記錄)。決策樹可以在一定數(shù)量的分裂后停止以阻止獲得純?nèi)~子(解決過度擬合問題的常用策略)。
?
計(jì)算出來的信息增益非常重要,是常見的面試問題,所以要確保你知道如何計(jì)算。常用的信息增益計(jì)算函數(shù)是基尼系數(shù)和熵。
?
從上圖可知,與基尼系數(shù)相比,熵為信息增益提供了更高的價(jià)值但也造成了更多的分裂
?
當(dāng)決策樹不夠復(fù)雜時(shí),通常會使用隨機(jī)森林:只不過是在數(shù)據(jù)的子集上增加了多個(gè)決策樹,并完成了最后的多數(shù)投票。但是如果無法正確確定樹的數(shù)量,隨機(jī)森林算法就會過度擬合。
K-Means
K-Means是一種將數(shù)據(jù)點(diǎn)分類成簇的無監(jiān)督學(xué)習(xí)模型。該模型根據(jù)提供的簇?cái)?shù)量迭代的找到最優(yōu)的集群中心,并將矩心移動到中心。
?
?
簇的數(shù)目可能會很容易找到,尤其是如果曲線上沒有kink。另外,要認(rèn)識到K-Means算法是在本地優(yōu)化的而不是全局優(yōu)化。所以簇的數(shù)量取決于初始化值,而最常用的初始化值是在K-Means++中計(jì)算出來的,它可以使初始值盡可能不同。
神經(jīng)網(wǎng)絡(luò)
神經(jīng)網(wǎng)絡(luò)是目前每個(gè)人都在關(guān)注的熱門算法之一。
?
本文重要的是讓你了解基本的機(jī)制以及反向傳播和消失梯度的概念。同時(shí)還要認(rèn)識到神經(jīng)網(wǎng)絡(luò)本質(zhì)上是一個(gè)黑盒子。如果案例研究要求創(chuàng)建解釋模型,那么只能選擇不同的模型或準(zhǔn)備解釋如何找到權(quán)重對最終結(jié)果的貢獻(xiàn)(例如,圖像識別過程中隱藏層的可視化)。
集成模型
最后,單個(gè)模型可能不能準(zhǔn)確地確定目標(biāo),某些特性需要特殊的模型。在這種情況下,需要使用多個(gè)模型的集成。請看下面的舉例:
?
由上圖可得,模型是分層或在堆棧中,每一層的輸出是下一層的輸入。
模型評估
分類得分
?
評估模型性能最常見的方法之一是:計(jì)算正確預(yù)測的記錄的百分比。
學(xué)習(xí)曲線
學(xué)習(xí)曲線也是評價(jià)模型的常用方法,通過該方法可以評估我們的模型是否太復(fù)雜或太簡單。
?
如果模型不夠復(fù)雜,最終會得到高偏差和低方差。而當(dāng)模型過于復(fù)雜,則會得到低偏差和高方差。但是在現(xiàn)在模型非常穩(wěn)定的前提下,隨著訓(xùn)練數(shù)據(jù)的隨機(jī)化,結(jié)果也會有很大變化,所以不要混淆方差和偏差的區(qū)別!為了確定模型的復(fù)雜性,我們使用以下學(xué)習(xí)曲線來查看:
?
在學(xué)習(xí)曲線上,我們改變了X軸上的訓(xùn)練測試分割點(diǎn),并計(jì)算了訓(xùn)練和驗(yàn)證數(shù)據(jù)集上模型的準(zhǔn)確性。如果兩者之間的差距太大,說明模型太過復(fù)雜即過度擬合了。如果兩條曲線都沒有達(dá)到預(yù)期的精度,而且曲線之間的距離很小,那么就說明數(shù)據(jù)集有很大的偏差。
受試者工作特征(ROC)
在處理帶有嚴(yán)重類別失衡的欺詐數(shù)據(jù)集時(shí),分類分?jǐn)?shù)就沒有多大意義了。相反,接收器的工作特性或ROC曲線是個(gè)更好的選擇。
?
45度線是隨機(jī)線,曲線下的面積或AUC為0.5。曲線離45度線越遠(yuǎn),AUC越高,模型就越好。模型所能得到的最高值是AUC值等于1,即曲線與軸形成直角三角形。ROC曲線還可以幫助調(diào)試模型。例如,如果曲線的左下角更接近于隨機(jī)線,則意味著模型在Y=0處分類錯誤。而如果它在右上角是隨機(jī)的,則意味著錯誤發(fā)生在Y=1處。同樣,如果曲線上有波峰,則說明模型不穩(wěn)定。因此,在處理欺詐模型時(shí),ROC是你最好的朋友。
本文由阿里云云棲社區(qū)組織翻譯。
文章原標(biāo)題《Data Science Interview Guide》
作者:Syed Sadat Nazrul
原文鏈接
干貨好文,請關(guān)注掃描以下二維碼:
總結(jié)
- 上一篇: 【程序猿必备】数据结构与算法精选面试题
- 下一篇: 黑科技揭秘:网红“天空物联网飞艇”服务范