99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀以性別預測為例,談談數(shù)據(jù)挖掘中的分類問題
以性別預測為例,談談數(shù)據(jù)挖掘中的分類問題
2016-03-02
收藏

以性別預測為例,談談數(shù)據(jù)挖掘中的分類問題

互聯(lián)網(wǎng)的迅猛發(fā)展,催生了數(shù)據(jù)的爆炸式增長。面對海量的數(shù)據(jù),如何挖掘數(shù)據(jù)的價值,成為一個越來越重要的問題。本文首先介紹數(shù)據(jù)挖掘的基本內(nèi)容,然后按照數(shù)據(jù)挖掘基本的處理流程,以性別預測實例來講解一個具體的數(shù)據(jù)挖掘任務是如何實現(xiàn)的。

數(shù)據(jù)挖掘的基本內(nèi)容

首先,對于數(shù)據(jù)挖掘的概念,目前比較廣泛認可的一種解釋如下:

Data mining is the use of efficient techniques for the analysis of very large collections of data and the extraction of useful and possibly unexpected patterns in data.

數(shù)據(jù)挖掘是一種通過分析海量數(shù)據(jù),從數(shù)據(jù)中提取潛在的但是非常有用的模式的技術。

主要的數(shù)據(jù)挖掘任務

數(shù)據(jù)挖掘任務可以分為預測性任務和描述性任務。預測性任務主要是預測可能出現(xiàn)的情況;描述性任務則是發(fā)現(xiàn)一些人類可以解釋的模式或規(guī)律。數(shù)據(jù)挖掘中比較常見的任務包括分類、聚類、關聯(lián)規(guī)則挖掘、時間序列挖掘、回歸等,其中分類、回歸屬于預測性任務,聚類、關聯(lián)規(guī)則挖掘、時間序列分析等則都是解釋性任務。

按照數(shù)據(jù)挖掘的基本流程,來談談分類問題

在簡單介紹了數(shù)據(jù)挖掘的基本內(nèi)容后,我們來切入主題。以數(shù)據(jù)挖掘的流程為主線,穿插性別預測的實例,來講解分類問題。根據(jù)經(jīng)典教科書和實際工作經(jīng)驗來看,數(shù)據(jù)挖掘的基本流程主要包括五部分,首先是明確問題,第二是對數(shù)據(jù)進行預處理,第三是對數(shù)據(jù)進行特征工程,轉(zhuǎn)化為問題所需要的特征,第四是根據(jù)問題的評價標準選擇最優(yōu)的模型和算法,最后將訓練的模型用于實際生產(chǎn),產(chǎn)出所需結(jié)果(如圖1所示)。

圖1 數(shù)據(jù)挖掘的基本流程

下面我們分別介紹各環(huán)節(jié)涉及的主要內(nèi)容:

1.明確問題和了解數(shù)據(jù)

這一環(huán)節(jié)最重要的是需求和數(shù)據(jù)的匹配。首先需要明確需求,有著怎樣的需求?是需要做分類、聚類、推薦還是其他?實際數(shù)據(jù)是否支持該需求?比如,分類問題需要有或者可以構(gòu)造出training set,如果沒有training set,就沒有辦法按照分類問題來解決。此外,數(shù)據(jù)的規(guī)模、重要feature的覆蓋度等,也是需要特別考慮的問題。

2.數(shù)據(jù)預處理

1)數(shù)據(jù)集成,數(shù)據(jù)冗余,數(shù)值沖突

數(shù)據(jù)挖掘中準備數(shù)據(jù)的時候,需要盡可能地將相關數(shù)據(jù)集成在一起。如果集成的數(shù)據(jù)中,有兩列或多列值一樣,則不可避免地會產(chǎn)生數(shù)值沖突或數(shù)據(jù)冗余,可能需要根據(jù)數(shù)據(jù)的質(zhì)量來決定保留沖突中的哪一列。

2)數(shù)據(jù)采樣

一般來說,有效的采樣方式如下:如果樣本是有代表性的,則使用樣本數(shù)據(jù)和使用整個數(shù)據(jù)集的效果幾乎是一樣的。抽樣方法有很多,需要考慮是有放回的采樣,還是無放回的采樣,以及具體選擇哪種采樣方式。

3)數(shù)據(jù)清洗、缺失值處理與噪聲數(shù)據(jù)

現(xiàn)實世界中的數(shù)據(jù),是真實的數(shù)據(jù),不可避免地會存在各種各樣的異常情況。比如某列的值缺失,或者某列的值是異常的,所以,我們需要在數(shù)據(jù)預處理階段進行數(shù)據(jù)清洗,來減少噪音數(shù)據(jù)對模型訓練和預測結(jié)果的影響。

3.特征工程

數(shù)據(jù)和特征決定了機器學習的上限,而模型和算法只是逼近這個上限而已。下面的觀點說明了特征工程的特點和重要性。

Feature engineering is another topic which doesn’t seem to merit any review papers or books, or even chapters in books, but it is absolutely vital to ML success. […] Much of the success of machine learning is actually success in engineering features that a learner can understand.

— Scott Locklin, in “Neglected machine learning ideas”

1)特征:對所需解決問題有用的屬性

特征是對你所需解決問題有用或者有意義的屬性。比如,在計算機視覺領域,圖片作為研究對象,可能圖片中的一個線條就是一個特征;在自然語言處理領域中,研究對象是文檔,文檔中的一個詞語的出現(xiàn)次數(shù)就是一個特征;在語音識別領域中,研究對象是一段話,phoneme(音位)可能就是一個特征。

2)特征的提取、選擇和構(gòu)造

既然特征是對我們所解決的問題最有用的屬性。首先我們需要處理的是根據(jù)原始數(shù)據(jù)抽取出所需要的特征。亟需注意的是,并不是所有的特征對所解決的問題產(chǎn)生的影響一樣大,有些特征可能對問題產(chǎn)生特別大的影響,但有些則可能影響甚微,和所解決的問題不相關的特征需要被剔除掉。因此,我們需要針對所解決的問題選擇最有用的特征集合,一般可以通過相關系數(shù)等方式來計算特征的重要性。當然,有些模型本身會輸出feature重要性,如Random Forest等算法。而對于圖片、音頻等原始數(shù)據(jù)形態(tài)特別大的對象,則可能需要采用像PCA這樣的自動降維技術。另外,還可能需要本人對數(shù)據(jù)和所需解決的問題有深入的理解,能夠通過特征組合等方法構(gòu)造出新的特征,這也正是特征工程被稱之為是一門藝術的原因之一。

實例講解(一)

接下來,我們通過一個性別預測的實例來說明數(shù)據(jù)挖掘處理流程中的“明確問題”、“數(shù)據(jù)預處理”和“特征工程”三個部分。

假設我們有如下兩種數(shù)據(jù),想根據(jù)數(shù)據(jù)訓練一個預測用戶性別的模型。

數(shù)據(jù)1: 用戶使用App的行為數(shù)據(jù);

數(shù)據(jù)2: 用戶瀏覽網(wǎng)頁的行為數(shù)據(jù);

第一步:明確問題

首先明確該問題屬于數(shù)據(jù)挖掘常見問題中的哪一類, 是分類、聚類,推薦還是其他?假設本實例數(shù)據(jù)有部分數(shù)據(jù)帶有男女性別,則該問題為分類問題;

數(shù)據(jù)集是否夠大?我們需要足夠大的數(shù)據(jù)來訓練模型,如果數(shù)據(jù)集不夠大,那么所訓練的模型和真實情況偏差會比較大;

數(shù)據(jù)是否滿足所解決問題的假設?統(tǒng)計發(fā)現(xiàn)男人和女人使用的App不太一致,瀏覽網(wǎng)頁的內(nèi)容也不太一致,則說明我們通過數(shù)據(jù)可以提取出對預測性別有用的特征,來幫助解決問題。如果根據(jù)數(shù)據(jù)提取不出有用的特征,那么針對當前數(shù)據(jù),問題是沒法處理的。

第二步:數(shù)據(jù)預處理

實際工作中,在數(shù)據(jù)預處理之前需要確定整個項目的編程語言(如Python、Java、 Scala)和開發(fā)工具(如Pig、Hive、Spark)。通常而言,編程語言和開發(fā)工具的選擇都依賴于所處的數(shù)據(jù)平臺環(huán)境;

選取多少數(shù)據(jù)做模型訓練?這是常說的數(shù)據(jù)采樣問題。一般認為采樣數(shù)據(jù)量越大,對所解決的任務幫助越大,但是數(shù)據(jù)量越大,計算代價也越大,因此,需要在解決問題的效果和計算代價之間折中一下;

把所有相關的數(shù)據(jù)聚合在一起,如果有相同字段則存在數(shù)據(jù)冗余的問題,需要根據(jù)數(shù)據(jù)的質(zhì)量剔除掉冗余的數(shù)據(jù);數(shù)據(jù)中可能存在異常值,則需要過濾掉;數(shù)據(jù)中可能有的值有缺失,則需要填充默認值。

數(shù)據(jù)預處理后可能的結(jié)果(如表1、表2所示):

表1 數(shù)據(jù)1預處理后結(jié)果

表2 數(shù)據(jù)2預處理后結(jié)果

第三步:特征工程

由于數(shù)據(jù)1和數(shù)據(jù)2的類型不太一樣,所以進行特征工程時,所采用的方法也不太一樣,下面分別介紹一下:

數(shù)據(jù)1的特征工程

數(shù)據(jù)1的單個特征的分析主要包括以下內(nèi)容:

數(shù)值型特征的處理,比如App的啟動次數(shù)是個連續(xù)值,可以按照低、中、高三個檔次將啟動次數(shù)分段成離散值;

類別型特征的處理,比如用戶使用的設備是三星或者聯(lián)想,這是一個類別特征,可以采用0-1編碼來處理;

需要考慮特征是否需要歸一化。

數(shù)據(jù)1的多個特征的分析主要包括以下內(nèi)容:

使用的設備類型是否決定了性別?需要做相關性分析,通常計算相關系數(shù);

App的啟動次數(shù)和停留時長是否完全正相關,結(jié)果表明特別相關,則說明App的停留時長是無用特征,將App的停留時長這個特征過濾掉;

如果特征太多,可能需要做降維處理。

2.數(shù)據(jù)2的特征工程

數(shù)據(jù)2是典型的文本數(shù)據(jù),文本數(shù)據(jù)常用的處理步驟包含以下幾個部分:

網(wǎng)頁 → 分詞 → 去停用詞 → 向量化

分詞??梢圆捎肑ieba分詞(Python庫)或張華平老師的ICTCLAS;

去除停用詞。停用詞表除了加入常規(guī)的停用詞外,還可以將DF(Document Frequency)比較高的詞加入停用詞表,作為領域停用詞;

向量化。一般是將文本轉(zhuǎn)化為TF或TF-IDF向量。

特征工程后數(shù)據(jù)1的結(jié)果(如表3所示,A1低表示啟動App1的次數(shù)比較低,以此類推,is_hx表示設備是否是華為,Label為1表示Male)。

表3 數(shù)據(jù)1特征工程后結(jié)果

特征工程后數(shù)據(jù)2的結(jié)果(如表4所示,term1=5表示user1瀏覽的網(wǎng)頁中出現(xiàn)詞1的頻率,以此類推)。

表4 數(shù)據(jù)2特征工程后結(jié)果

第四步:算法和模型

做完特征工程后,下一步就是選擇合適的模型和算法。算法和模型的選擇主要考慮一下幾個方面:

訓練集的大小;

特征的維度大小;

所解決問題是否是線性可分的;

所有的特征是獨立的嗎?

需要不需要考慮過擬合的問題;

對性能有哪些要求?

上面中提到的很多問題沒法直接回答,可能我們還是不知道該選擇哪種模型和算法,但是奧卡姆剃刀原理給出了模型和算法的選擇方法:

Occam’s Razor principle: use the least complicated algorithm that can address your needs and only go for something more complicated if strictly necessary.

業(yè)界比較通用的算法選擇一般是這樣的規(guī)律:如果LR可以,則使用LR;如果LR不適合,則選擇Ensemble的方式;如果Ensemble方式不適合,則考慮是否嘗試Deep Learning。下面主要介紹一下LR算法和Ensemble方法的相關內(nèi)容。

LR算法(Logistic Regression,邏輯回歸算法)

只要認為問題是線性可分的,就可采用LR,通過特征工程將一些非線性特征轉(zhuǎn)化為線性特征。 模型比較抗噪,而且可以通過L1、L2范數(shù)來做參數(shù)選擇。LR可以應用于數(shù)據(jù)特別大的場景,因為它的算法效率特別高,且很容易分布式實現(xiàn)。

區(qū)別于其他大多數(shù)模型,LR比較特別的一點是結(jié)果可以解釋為概率,能將問題轉(zhuǎn)為排序問題而不是分類問題。

Ensemble方法(組合方法)

組合方法的原理主要是根據(jù)training set訓練多個分類器,然后綜合多個分類器的結(jié)果,做出預測(如圖2所示)。

圖2 組合方法的基本流程

組合方式主要分為Bagging和Boosting。Bagging是Bootstrap Aggregating的縮寫,基本原理是讓學習算法訓練多輪,每輪的訓練集由從初始的訓練集中隨機取出的n個訓練樣本組成(有放回的隨機抽樣),訓練之后可得到一個預測函數(shù)集合,通過投票方式?jīng)Q定預測結(jié)果。

而Boosting中主要的是AdaBoost(Adaptive Boosting)?;驹硎浅跏蓟瘯r對每一個訓練樣本賦相等的權重1/n,然后用學習算法對訓練集訓練多輪,每輪結(jié)束后,對訓練失敗的訓練樣本賦以較大的權重。也就是讓學習算法在后續(xù)的學習中集中對比較難的訓練樣本進行學習,從而得到一個預測函數(shù)集合。每個預測函數(shù)都有一定的權重,預測效果好的預測函數(shù)權重較大,反之較小,最終通過有權重的投票方式來決定預測結(jié)果。

Bagging和Boosting的主要區(qū)別如下:

取樣方式不同。Bagging采用均勻取樣,而Boosting根據(jù)錯誤率來取樣,因此理論上來講Boosting的分類精度要優(yōu)于Bagging;

訓練集的選擇方式不同。Bagging的訓練集的選擇是隨機的,各輪訓練集之間相互獨立,而Boostng的各輪訓練集的選擇與前面的學習結(jié)果有關;

預測函數(shù)不同。Bagging的各預測函數(shù)沒有權重,而Boosting是有權重的。Bagging的各個預測函數(shù)可以并行生成,而Boosting的各個預測函數(shù)只能順序生成。

對于像神經(jīng)網(wǎng)絡這樣極其耗時的學習方法,Bagging可通過并行訓練節(jié)省大量時間開銷。Bagging和Boosting都可以有效地提高分類的準確性。在大多數(shù)數(shù)據(jù)集中,Boosting的準確性比Bagging要高。

分類算法的評價

上一部分介紹了常用的模型和算法,不同的算法在不同的數(shù)據(jù)集上會產(chǎn)生不同的效果,我們需要量化算法的好壞,這就是分類算法的評價。在本文中,筆者將主要介紹一下混淆矩陣和主要的評價指標。

1.混淆矩陣(如圖3所示)

圖3 混淆矩陣

1)True positives(TP):即實際為正例且被分類器劃分為正例的樣本數(shù);

2)False positives(FP):即實際為負例但被分類器劃分為正例的樣本數(shù);

3)False negatives(FN):即實際為正例但被分類器劃分為負例的樣本數(shù);

4)True negatives(TN):即實際為負例且被分類器劃分為負例的樣本數(shù)。

2.主要的評價指標

1)準確率accuracy=(TP+TN)/(P+N)。這個很容易理解,就是被分對的樣本數(shù)除以所有的樣本數(shù)。通常來說,準確率越高,分類器越好;

2)召回率recall=TP/(TP+FN)。召回率是覆蓋面的度量,度量有多少個正例被分為正例。

3)ROC和AUC。

實例講解(二)

實例(一)產(chǎn)出的特征數(shù)據(jù),經(jīng)過“模型和算法”以及“算法的評價”兩部分所涉及的代碼實例如圖4所示。

圖4 模型訓練示例代碼

總結(jié)

本文以數(shù)據(jù)挖掘的基本處理流程為主線,以性別預測為具體實例,介紹了處理一個數(shù)據(jù)挖掘的分類問題所涉及的方方面面。對于一個數(shù)據(jù)挖掘問題,首先要明確問題,確定已有的數(shù)據(jù)是否能夠解決所需要解決的問題,然后就是數(shù)據(jù)預處理和特征工程階段,這往往是在實際工程中最耗時、最麻煩的階段。經(jīng)過特征工程后,需要選擇合適的模型進行訓練,并且根據(jù)評價標準選擇最優(yōu)模型和最優(yōu)參數(shù), 最后根據(jù)最優(yōu)模型對未知數(shù)據(jù)進行預測,產(chǎn)出結(jié)果。希望本文的內(nèi)容對大家有所幫助。



數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }