
針對(duì)任何一個(gè)打算由機(jī)器學(xué)習(xí)算法來(lái)解決的問(wèn)題,都有一種『套路』存在,只要按照這個(gè)模板『按部就班』就能夠得到一個(gè)結(jié)果。就跟一個(gè)產(chǎn)品的生產(chǎn)流水線是一個(gè)道理。但是得到結(jié)果的好壞跟你是否是一個(gè)『熟練工』有很大的關(guān)系。因?yàn)樵诮鉀Q具體的問(wèn)題中有許多的tricks對(duì)于結(jié)果的提升有所幫助。
整個(gè)『套路』能分為以下5個(gè)步驟:
定義問(wèn)題
對(duì)數(shù)據(jù)進(jìn)行預(yù)處理
算法的抽查
對(duì)結(jié)果進(jìn)行優(yōu)化
結(jié)果展示
這里非?;\統(tǒng)地概括了整個(gè)流程,對(duì)于實(shí)際的問(wèn)題,還是需要『見(jiàn)風(fēng)使舵』,要靈活運(yùn)用模板。接下來(lái)對(duì)每一個(gè)步驟進(jìn)行一些解釋吧。
定義問(wèn)題
這個(gè)步驟對(duì)于整個(gè)流程的重要性是顯而易見(jiàn)的,如果在解決問(wèn)題的一開(kāi)始就已經(jīng)犯了方向性的錯(cuò)誤,結(jié)果只能是南轅北轍。例如拿一個(gè)分類(lèi)算法去解決一個(gè)聚類(lèi)問(wèn)題,顯然這并不能得到正確的結(jié)果。還有一個(gè)誤區(qū)就是迷信性能強(qiáng)的算法,比如svm。任何的分類(lèi)問(wèn)題都是用svm去解決,有可能在一些情況下logistic回歸能達(dá)到更好的結(jié)果。所以,首先就需要弄清楚問(wèn)題的本質(zhì)。
這里我本人并沒(méi)有非常豐富的實(shí)踐經(jīng)驗(yàn),所以并不能給出非常多的建設(shè)性的意見(jiàn)。這里我只說(shuō)說(shuō)其中的一個(gè)點(diǎn)吧,就是尋找相似性的問(wèn)題。這里有一個(gè)非常重要的技巧叫做fine-tuning。
這里拿神經(jīng)網(wǎng)絡(luò)來(lái)舉一個(gè)例子吧。某人已經(jīng)在一個(gè)數(shù)據(jù)集上針對(duì)一個(gè)任務(wù)訓(xùn)練好了一個(gè)網(wǎng)絡(luò),如果你要解決的問(wèn)題也同樣是針對(duì)這一個(gè)數(shù)據(jù)集,只不過(guò)是任務(wù)不同。這一點(diǎn)其實(shí)在自然語(yǔ)言處理上還是比較常見(jiàn)的。那么就可以復(fù)用網(wǎng)絡(luò)前面那些層的權(quán)值,只針對(duì)你的任務(wù)改變輸出層或是輸出層之前的幾層。在學(xué)習(xí)率的設(shè)置上,因?yàn)榍懊鎸哟我呀?jīng)是訓(xùn)練好的了,需要設(shè)置的比較小,而后面的層次需要設(shè)置的大一點(diǎn)。這樣的做法能夠顯著地降低訓(xùn)練整個(gè)網(wǎng)絡(luò)的時(shí)間。可以在較短的時(shí)間內(nèi)獲取一個(gè)還算不錯(cuò)的結(jié)果。
我覺(jué)得遷移學(xué)習(xí)應(yīng)該也算是一種吧,但是這個(gè)領(lǐng)域我其實(shí)不太了解,不能繼續(xù)展開(kāi)了。
數(shù)據(jù)預(yù)處理
所有的機(jī)器學(xué)習(xí)算法都是建立在數(shù)據(jù)的基礎(chǔ)之上的。
The more disciplined you are in your handling of data, the more consistent and better results you are like likely to achieve.
首先就是收集數(shù)據(jù)的過(guò)程,因?yàn)槲也](méi)有接觸過(guò)實(shí)際的例子,所以對(duì)于這一部分也不了解。在這個(gè)數(shù)據(jù)爆炸的時(shí)代收集到數(shù)據(jù)應(yīng)該不難,關(guān)鍵是要對(duì)數(shù)據(jù)進(jìn)行正確的處理。
之后就是數(shù)據(jù)的清洗過(guò)程,包括數(shù)據(jù)格式的轉(zhuǎn)化(希望轉(zhuǎn)換成算法所能處理的形式),數(shù)據(jù)的清洗(處理噪聲數(shù)據(jù),缺失值的處理),以及數(shù)據(jù)的采樣(有可能我們并不需要這么多的數(shù)據(jù))。這一塊也是預(yù)處理過(guò)程的一個(gè)重點(diǎn)吧,恰好我也不是特別懂。
之后呢,就是對(duì)于數(shù)據(jù)做一些等價(jià)的轉(zhuǎn)換,包括統(tǒng)一數(shù)據(jù)的度量(這在距離計(jì)算時(shí)非常重要)、零均值化、屬性的分解以及合并。接下來(lái)對(duì)屬性的分解以及合并做出一些解釋?zhuān)@個(gè)在其他資料上倒是挺少見(jiàn)。
屬性的分解就是,一個(gè)屬性能夠分解為多個(gè)子屬性,只有某一些子屬性對(duì)于輸出有著顯著的影響。那我們就可以只存儲(chǔ)這些子屬性,而不用去存儲(chǔ)原來(lái)的屬性。例如時(shí)間這個(gè)屬性可以分解為年、月、日、時(shí)、分、秒,可能只有月這個(gè)屬性對(duì)于結(jié)果有影響,那我們只保留這個(gè)屬性就好。
屬性的合并就是與屬性的分解是對(duì)立的。將一些子屬性合并成一個(gè)新屬性后,這個(gè)屬性對(duì)于輸出的影響會(huì)更加顯著。那我們就會(huì)選擇將這些屬性進(jìn)行合并。例如『登錄時(shí)間』這個(gè)屬性,可能對(duì)于輸出值沒(méi)有什么影響,如果我們將其轉(zhuǎn)化為『登錄的次數(shù)』呢,結(jié)果可能就會(huì)大不一樣了。
數(shù)據(jù)預(yù)處理的過(guò)程并沒(méi)有什么對(duì)錯(cuò)可言,只有合適與否。這還是需要非常深厚的功力的。對(duì)于以上步驟:
You can follow this process in a linear manner, but it is very likely to be iterative with many loops.
數(shù)據(jù)的分析
這一部分本來(lái)是屬于數(shù)據(jù)的預(yù)處理的,但是我覺(jué)得還是單獨(dú)出來(lái)比較好。這個(gè)在我看過(guò)的資料中還是第一次出現(xiàn)。
在拿到預(yù)處理完的數(shù)據(jù)之后,將其輸入到算法之前,我們還是有必要對(duì)數(shù)據(jù)有一些了解,這樣對(duì)模型中的參數(shù)選擇能有一些幫助。這里主要包含兩個(gè)方法:Summarize Data 和 Visualize Data。
Summarize Data主要是分析數(shù)據(jù)中的一些內(nèi)在屬性。主要包括兩個(gè)方面:Data Structure 和 Data
Distribution。Data
Structure指的是數(shù)據(jù)每一維屬性的類(lèi)型(是連續(xù)的還是離散的)。在針對(duì)一些具體問(wèn)題時(shí),可能需要將離散的屬性連續(xù)化。Data
Distribution指的自然是數(shù)據(jù)的分布。這里主要分析的是每一維數(shù)據(jù)的分布。如果是有標(biāo)簽的數(shù)據(jù),可以弄清楚類(lèi)別的分布,這樣可以知道模型分類(lèi)時(shí)準(zhǔn)確率的下限。還可以做的更多的一點(diǎn)是,獲取屬性間的關(guān)聯(lián)性。如果有關(guān)聯(lián)的話,關(guān)聯(lián)度有多大。這樣有助于去除一些冗余屬性(數(shù)據(jù)的降維),以及知道哪些屬性對(duì)結(jié)果的影響比較大(權(quán)值的選擇)。
Visualize Data自然是對(duì)數(shù)據(jù)進(jìn)行可視化操作。有那么多種圖可以畫(huà),到底應(yīng)該選擇哪種類(lèi)型的圖呢?一般來(lái)說(shuō)都是畫(huà)柱狀圖和散點(diǎn)圖。
柱狀圖是描述出每一維度的值與其類(lèi)標(biāo)簽之間的關(guān)系,也可以從圖形中看出每一維的數(shù)據(jù)是服從何種分布的。特意盜了兩張圖。
對(duì)每?jī)山M屬性畫(huà)出其散點(diǎn)圖,這樣可以較為容易地看出屬性之間的關(guān)聯(lián)性。
從上面的描述可以看出,Summarize Data 和 Visualize Data 兩個(gè)過(guò)程之間是相輔相成的。
算法抽查
關(guān)于這一點(diǎn),在這一篇資料中我也是第一次見(jiàn)到。
對(duì)于一個(gè)具體的問(wèn)題,我們也許有很多種算法可以對(duì)其進(jìn)行求解,那么我們是不是需要對(duì)每一種方法都進(jìn)行一次嘗試呢?并不需要,因?yàn)槟菢犹M(fèi)時(shí)間,而且并不是所有的算法都能有效。抽查(spot-checking)就是對(duì)多個(gè)算法進(jìn)行快速驗(yàn)證,以決定對(duì)哪一個(gè)算法進(jìn)行進(jìn)一步的訓(xùn)練。
在進(jìn)行算法的抽查時(shí),并不需要使用使用數(shù)據(jù)集中的所有數(shù)據(jù)進(jìn)行訓(xùn)練,只需要使用較小的一部分。在選擇完算法之后,再使用所有數(shù)據(jù)進(jìn)行進(jìn)一步的訓(xùn)練??梢允褂媒徊骝?yàn)證的方法來(lái)進(jìn)行該過(guò)程。
在進(jìn)行算法抽查時(shí),處于候選集中的算法的種類(lèi)越多樣越好,這樣才能測(cè)試出哪種類(lèi)型的算法更能學(xué)習(xí)到數(shù)據(jù)中的結(jié)構(gòu)。在選擇完算法之后,并不一定直接使用該算法進(jìn)行進(jìn)一步的學(xué)習(xí),可能會(huì)使用基于該算法的改進(jìn)版本。
在該部分中,還有很重要的一塊內(nèi)容就是訓(xùn)練集、測(cè)試集的劃分,結(jié)果衡量標(biāo)準(zhǔn)的選擇,以及結(jié)果的可信度。這一部分內(nèi)容我也有寫(xiě)博客進(jìn)行具體的闡述,畢竟水太深。
結(jié)果的改進(jìn)
算法訓(xùn)練完成之后,如果算法的結(jié)果不如意,該怎么辦?如果算法的結(jié)果還比較令人滿意,有沒(méi)有方法可以將結(jié)果再提升一點(diǎn)?這一部分主要就是解決這兩個(gè)問(wèn)題。文章中提出了三個(gè)方法:
Algorithm tuning
Ensembles
Extreme Feature Engineering
接下來(lái)分別敘述下這三種方法。
算法中一般都充斥這很多的參數(shù),對(duì)算法進(jìn)行訓(xùn)練,主要是在這些參數(shù)形成的參數(shù)空間中尋找到一個(gè)點(diǎn),使得目標(biāo)函數(shù)達(dá)到最優(yōu)。文章中提到了一種方法,就是對(duì)參數(shù)空間進(jìn)行采樣,發(fā)現(xiàn)那些可能的最優(yōu)值點(diǎn),再?gòu)倪@些點(diǎn)開(kāi)始訓(xùn)練??梢灾貜?fù)這個(gè)過(guò)程幾次,試圖獲取更優(yōu)的解。但是,很坑的一點(diǎn)是,文章中并沒(méi)有說(shuō)明具體的采樣方法。因?yàn)槭沁M(jìn)行了多次訓(xùn)練,造成過(guò)擬合的風(fēng)險(xiǎn)很大。
第二中方法就是集成方法,這個(gè)會(huì)有一篇博客專(zhuān)門(mén)敘述這個(gè)算法。
前兩種方法都是試圖在算法的本身做出一些突破,而第三種方法則是希望從數(shù)據(jù)本身著手。作者自己也說(shuō)了,其實(shí)這種方法可以叫做『特征工程』,就是在數(shù)據(jù)的特征方面做出一些工作。通過(guò)特征的分解/合并,降低特征之間的關(guān)聯(lián)性。有些情況也會(huì)將離散的特征值轉(zhuǎn)變?yōu)檫B續(xù)的特征值。因?yàn)樗惴偸窍M麑W(xué)習(xí)到數(shù)據(jù)中蘊(yùn)含的某種模式,這樣才能有更強(qiáng)的泛化效果。如果一個(gè)模式過(guò)于復(fù)雜,那么算法的效果必然會(huì)收到影響。所以,我們希望將這個(gè)復(fù)雜的模式進(jìn)行分解,這就是這個(gè)方法的初衷。在每一次訓(xùn)練時(shí)都可以進(jìn)行該步驟,獲得新的訓(xùn)練/測(cè)試數(shù)據(jù)集(因?yàn)?a href='/map/tezheng/' style='color:#000;font-size:inherit;'>特征已經(jīng)發(fā)生了變化),通過(guò)在新數(shù)據(jù)集上的學(xué)習(xí)結(jié)果,對(duì)之后特征的分解/合并產(chǎn)生一些指導(dǎo)性的建議。
結(jié)果展示
當(dāng)你的算法能夠較好地解決一個(gè)問(wèn)題的時(shí)候,你當(dāng)然希望將你的成果展示給大家。這里面就說(shuō)到了兩種途徑:寫(xiě)一篇論文(或者什么類(lèi)似的東西)、將其與實(shí)際的產(chǎn)品相結(jié)合。恰好,這兩個(gè)方面我都沒(méi)有經(jīng)驗(yàn),然后就沒(méi)有然后了。
數(shù)據(jù)分析咨詢(xún)請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無(wú)論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢(xún)效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫(kù)管理中,“大表” 始終是性能優(yōu)化繞不開(kāi)的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫(kù)表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開(kāi)始提取前,需先判斷 TIF 文件的類(lèi)型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專(zhuān)業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫(kù)表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫(kù))處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場(chǎng)景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專(zhuān)業(yè)操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對(duì)象的 text 與 content:區(qū)別、場(chǎng)景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請(qǐng)求開(kāi)發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫(kù)表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請(qǐng)求工具對(duì)比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請(qǐng)求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問(wèn)題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問(wèn)題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營(yíng)問(wèn)題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過(guò)程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營(yíng)銷(xiāo)案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見(jiàn)頂” 的當(dāng)下,精準(zhǔn)營(yíng)銷(xiāo)成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類(lèi)分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場(chǎng)景中,聚類(lèi)分析作為 “無(wú)監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡(jiǎn)單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10