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

熱線電話:13121318867

登錄
首頁精彩閱讀機器學習算法需要注意的一些問題
機器學習算法需要注意的一些問題
2016-05-05
收藏

機器學習算法需要注意的一些問題

對于機器學習的實際運用,光停留在知道了解的層面還不夠,我們需要對實際中容易遇到的一些問題進行深入的挖掘理解。我打算將一些瑣碎的知識點做一個整理。

1 數(shù)據(jù)不平衡問題

這個問題是經(jīng)常遇到的。就拿有監(jiān)督的學習的二分類問題來說吧,我們需要正例和負例樣本的標注。如果我們拿到的訓練數(shù)據(jù)正例很少負例很多,那么直接拿來做分類肯定是不行的。通常需要做以下方案處理:

1.1 數(shù)據(jù)集角度

通過調(diào)整數(shù)據(jù)集中正負樣本的比例來解決數(shù)據(jù)不平衡,方法有:

1.1.1 增加正樣本數(shù)量

正樣本本來就少,怎么增加呢?方法是直接復制已有的正樣本丟進訓練集。這樣可以稍微緩解正樣本缺失的困境,但是容易帶來一個問題,就是過擬合的潛在危險。因為這樣粗暴的引入正樣本并沒有增加數(shù)據(jù)集的樣本多樣性。如何設計復制哪些正樣本有一些技巧,比如選擇有特定意義的代表性的那些。

1.1.2 減少負樣本的數(shù)量

首先這是一個通用的合理的方法,但是負樣本的減少必然導致數(shù)據(jù)多樣性的損失。有一種方法可以緩解這個問題,那就是類似于隨機森林方法,每次正樣本數(shù)量不變,隨機選擇等量的不同的負樣本進行模型訓練,反復幾次,訓練多個模型,最后所有的模型投票決定最終的分類結果。

1.2 損失函數(shù)的角度

可以重新修改模型訓練的損失函數(shù),使得錯分正樣本的損失變大,錯分負樣本的損失變小。這樣訓練出來的模型就會對正負樣本有一個合理的判斷。

更多于此話題相關內(nèi)容請移步:
分類中數(shù)據(jù)不平衡問題的解決經(jīng)驗
機器學習中的數(shù)據(jù)不平衡問題

2 異常值處理問題

說到異常值,首先得說一下數(shù)據(jù)量的問題。異常值不是缺失值,更不是錯誤值,同樣是真實情況的表現(xiàn),之所以覺得一個數(shù)據(jù)異常,是因為我們能夠用到的數(shù)據(jù)量不夠大,無法準確地代表整個此類數(shù)據(jù)的分布。如果把異常值放在海量數(shù)據(jù)的大背景下,那么這個異常值也就不那么異常了。

下載摘自某大牛博客一段話:

異常值并非錯誤值,而同樣是真實情況的表現(xiàn),我們之所以認為異常,只是因為我們的數(shù)據(jù)量不足夠大而已。但是從實際的工業(yè)界來看,考慮到實際的計算能力以及效果,大多數(shù)公司都會對大數(shù)據(jù)做“去噪”,那么在去噪的過程中去除的不僅僅是噪音,也包括“異常點”,而這些“異常點”,恰恰把大數(shù)據(jù)的廣覆蓋度給降低了,于是利用大數(shù)據(jù)反而比小數(shù)據(jù)更容易產(chǎn)生趨同的現(xiàn)象。尤其對于推薦系統(tǒng)來說,這些“異常點”的觀察其實才是“個性化”的極致。

既然說到大數(shù)據(jù),同樣是這位大牛的一段話:

說得學術一些,我們不妨認為大數(shù)據(jù)是頻率學派對于貝葉斯學派一次強有力的逆襲。那么既然說到這個份上了,我們不妨思考一下,我們是不是有希望在回歸貝葉斯學派,利用先驗信息+小數(shù)據(jù)完成對大數(shù)據(jù)的反擊呢?

某些機器學習算法對異常值很敏感,比如:K-means聚類,AdaBoost。使用此類算法必須處理異常值。
某些算法擁有對異常值不敏感的特性,比如:KNN,隨機森林

如何處理異常值?最簡單的方法就是直接丟掉。其它方法我后面會繼續(xù)研究。

3 過擬合問題

過擬合可要命了,好不容易訓練一個模型,來一些測試數(shù)據(jù),分類結果非常的差。過擬合產(chǎn)生的原因:

訓練數(shù)據(jù)太少

模型太復雜

訓練數(shù)據(jù)中存在噪聲點(就算訓練數(shù)據(jù)足夠多)

幾乎所有的機器學習算法都會容易遇到過擬合的問題。所以先說一些解決過擬合的通用辦法。當然,首先得保證訓練數(shù)據(jù)不要太少。

3.1 正則化

正則化就是在模型的優(yōu)化目標上再加入一個懲罰因子。這樣模型的優(yōu)化策略就從經(jīng)驗風險最小化變?yōu)榻Y構風險最小化。

線性回歸正則化就是嶺回歸和lasso回歸,分別對應L2,L1罰項。

決策樹正則化就是剪枝,通常把子節(jié)點個數(shù)作為罰項。

3.2 交叉驗證

在數(shù)據(jù)量足夠的情況下,可以采用交叉驗證的方式避免過擬合,甚至可以在正則化之后再做一次交叉驗證。

其它詳細研究請點擊:
機器學習過度擬合問題一些原因

4 特征工程問題

有句話必須得放在前面:數(shù)據(jù)和特征決定了機器學習的上限,而模型和算法只是逼近這個上限而已。由此可見,特征工程尤其是特征選擇在機器學習中占有相當重要的地位。

4.1 什么是特征工程

首先拽一段英文定義:

Feature engineering is the process of transforming raw data into features that better represent the underlying problem to the predictive models, resulting in improved model accuracy on unseen data.

in a word, feature engineering is manually designing what the input x’s should be.

4.2 為什么要進行特征降維特征選擇

主要是出于如下考慮:
1. 特征維數(shù)越高,模型越容易過擬合,此時更復雜的模型就不好用。
2. 相互獨立的特征維數(shù)越高,在模型不變的情況下,在測試集上達到相同的效果表現(xiàn)所需要的訓練樣本的數(shù)目就越大。
3. 特征數(shù)量增加帶來的訓練、測試以及存儲的開銷都會增大。
4. 在某些模型中,例如基于距離計算的模型KMeans,KNN等模型,在進行距離計算時,維度過高會影響精度和性能。
5. 可視化分析的需要。在低維的情況下,例如二維,三維,我們可以把數(shù)據(jù)繪制出來,可視化地看到數(shù)據(jù)。當維度增高時,就難以繪制出來了。

機器學習中,有一個非常經(jīng)典的維度災難的概念。用來描述當空間維度增加時,分析和組織高維空間,因體積指數(shù)增加而遇到各種問題場景。例如,100個平均分布的點能把一個單位區(qū)間以每個點距離不超過0.01采樣;而當維度增加到10后,如果以相鄰點距離不超過0.01小方格采樣單位超一單位超正方體,則需要10^20 個采樣點。

正是由于高維特征有如上描述的各種各樣的問題,所以我們需要進行特征降維特征選擇等工作。

4.3 特征提取

對于高維特征(成百上千維),比如圖像,文本,聲音的特征,特征的每一維沒有顯著意義的,最好要對特征先進行降維,也就是從初始數(shù)據(jù)中提取有用的信息。通過降維,將高維空間中的數(shù)據(jù)集映射到低維空間數(shù)據(jù),同時盡可能少地丟失信息,或者降維后的數(shù)據(jù)點盡可能地容易被區(qū)分。這樣,可以提取出顯著特征,避免維度災難,還可以避免特征之間的線性相關性。

特征降維常用的算法有PCA,LDA等。

PCA算法通過協(xié)方差矩陣的特征值分解能夠得到數(shù)據(jù)的主成分,以二維特征為例,兩個特征之間可能存在線性關系(例如運動的時速和秒速度),這樣就造成了第二維信息是冗余的。PCA的目標是發(fā)現(xiàn)這種特征之間的線性關系,并去除。

LDA算法考慮label,降維后的數(shù)據(jù)點盡可能地容易被區(qū)分。

4.4 特征選擇

通常遇到的情況是:特征不夠用。。在這種情況下,我們就要在設計算法之前,好好地挖掘一下特征。對于邏輯斯蒂回歸和決策樹,每一維的特征是有確切意義的。我們就要從各個方面,抽取與目標相關的所有可用信息作為特征。這個過程可能會比較痛苦。。

然后,是不是特征越多越好?其實也不是。盜一張圖過來如下:
2015072910234025
可以發(fā)現(xiàn),剛開始模型的準確率隨著特征數(shù)量的增加而增加,當增加到一定程度便趨于穩(wěn)定了。如果還要強行加入如此多的特征,反而畫蛇添足,容易過擬合。然后,如果出現(xiàn)特征過多出現(xiàn)過擬合的情況,就要適當?shù)剡M行參數(shù)縮減。對于邏輯斯蒂回歸,某一維特征對應的參數(shù)如果接近為零,說明這個特征影響不大,就可以去掉。因此,我們的特征選擇過程一般如下:

選取盡可能多的特征,必要時先進行降維

特征進行選擇,保留最具有代表性的特征

這個過程的進行要同時觀察模型準確率的變化。

最后,特征選擇有哪些算法呢?
– 過濾方法:將所有特征進行打分評價,選擇最有效的一些特征。比如:卡法檢驗,信息增益,相關系數(shù)打分。
– 包裝方法:將特征組合的選擇看做是一個在特征空間中的搜索問題。比如:隨機爬山法,啟發(fā)式的搜索方法等。
– 嵌入方法:將特征選擇的過程嵌入到模型訓練的過程中,其實也就是正則化的方法。比如lasso回歸,嶺回歸,彈性網(wǎng)絡(Elastic Net)等。


數(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); }