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

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀R語(yǔ)言與數(shù)據(jù)分析之三:分類(lèi)算法1_數(shù)據(jù)分析師
R語(yǔ)言與數(shù)據(jù)分析之三:分類(lèi)算法1_數(shù)據(jù)分析師
2014-12-12
收藏

R語(yǔ)言與數(shù)據(jù)分析之三:分類(lèi)算法1_數(shù)據(jù)分析師

分類(lèi)算法與我們的生活息息相關(guān),也是目前數(shù)據(jù)挖掘中應(yīng)用最為廣泛的算法,如:已知系列的溫度、濕度的序列和歷史的是否下雨的統(tǒng)計(jì),我們需要利用歷史的數(shù)據(jù)作為學(xué)習(xí)集來(lái)判斷明天是否下雨;又如銀行信用卡詐騙判別。

    分類(lèi)問(wèn)題都有一個(gè)學(xué)習(xí)集,根據(jù)學(xué)習(xí)集構(gòu)造判別函數(shù),最后根據(jù)判別函數(shù)計(jì)算我們所需要判別的個(gè)體屬于哪一類(lèi)的。

    常見(jiàn)的分類(lèi)模型與算法

    傳統(tǒng)方法

    1、線性判別法;2、距離判別法;3、貝葉斯分類(lèi)器;

    現(xiàn)代方法:

    1、決策樹(shù);2支持向量機(jī)3、神經(jīng)網(wǎng)絡(luò)

線性判別法:

    天氣預(yù)報(bào)數(shù)據(jù)(x1,x2分別為溫度和濕度,G為是否下雨)

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. G=c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2) 
  2. x1=c(-1.9,-6.9,5.2,5.0,7.3,6.8,0.9,-12.5,1.5,3.8,0.2,-0.1,0.4,2.7,2.1,-4.6,-1.7,-2.6,2.6,-2.8) 
  3. x2=c(3.2,0.4,2.0,2.5,0.0,12.7,-5.4,-2.5,1.3,6.8,6.2,7.5,14.6,8.3,0.8,4.3,10.9,13.1,12.8,10.0) 
  4. a=data.frame(G,x1,x2) 
  5. plot(x1,x2) 
  6. text(x1,x2,G,adj=-0.5) 

 

      觀察上圖可以1點(diǎn)分布在右下方區(qū)域,2點(diǎn)主要分布在上方區(qū)域,肉眼可見(jiàn)這兩個(gè)集合分離的比較明顯,線性判別法的原理就是在平面中找出一條直線,使得屬于學(xué)習(xí)集1號(hào)的分布在直線一側(cè),屬于學(xué)習(xí)集2號(hào)的分布在直線另一側(cè)。

    判別式是允許有出差的,只要在一定的范圍內(nèi)即可。

    R語(yǔ)言的表達(dá)如下

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. library(MASS) 
  2. ld=lda(G~x1+x2) 
  3. z=predict(ld) 
  4. newG=z$class 
  5. y=cbind(G,z$x,newG) 

    由上左圖可以看出,首先計(jì)算先驗(yàn)概率,數(shù)據(jù)中1,2各占50%,然后計(jì)算x1x2的平均值,最后給出了判別函數(shù)的代數(shù)表達(dá):

 

    觀察上右圖可見(jiàn),newG為預(yù)測(cè)的判別,可見(jiàn)兩類(lèi)分別只有一個(gè)判錯(cuò),同時(shí)可以見(jiàn)判別函數(shù)的值為正值時(shí)判為第2類(lèi),判別函數(shù)值為負(fù)值時(shí)判為第1類(lèi)。

距離判別法

    計(jì)算待測(cè)點(diǎn)和各類(lèi)的距離,選擇最近的分類(lèi)進(jìn)行歸類(lèi)。其中距離的計(jì)算非常關(guān)鍵,常見(jiàn)的距離為馬氏距離:

      R語(yǔ)言沒(méi)有自動(dòng)距離判別法的函數(shù),我們需要自己手動(dòng)寫(xiě):

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. myDiscriminiant<- function(TrnX1,TrnX2,TstX =NULL,var.equal=FALSE) 
  2.     if(is.null(TstX)==TRUE) TstX <- rbind(TrnX1,TrnX2) 
  3.     if(is.vector(TstX)==TRUE) TstX<- t(as.matrix(TstX)) 
  4.     else if(is.matrix(TstX) !=TRUE) 
  5.         TstX <- as.matrix(TstX) 
  6.     if(is.matrix(TrnX1)!=TRUE) TrnX1 <- as.matrix(TrnX1) 
  7.     if(is.matrix(TrnX2)!=TRUE) TrnX2 <- as.matrix(TrnX2) 
  8.     nx <- nrow(TstX) 
  9.     blong <- matrix(rep(0,nx),nrow=1,byrow=TRUE,dimnames=list("blong",1:nx)) 
  10.     mu1 <-colMeans(TrnX1);mu2 <- colMeans(TrnX2) 
  11.     if(var.equal==TRUE || var.equal==T){ 
  12.         S<- var(rbind(TrnX1,TrnX2)) 
  13.         w<- mahalanobis(TstX,mu2,S)-mahalanobis(TstX,mu1,S) 
  14.     } 
  15.     else{ 
  16.         S1<-var(TrnX1);S2<-var(TrnX2) 
  17.         w<-mahalanobis(TstX,mu2,S2)-mahalanobis(TstX,mu1,S1) 
  18.     } 
  19.     for(i in 1:nx){ 
  20.         if(w[i]>0)   
  21.             blong[i] <- 1 
  22.         else 
  23.             blong[i] <- 2     
  24.     } 
  25.     blong 

 保存到當(dāng)前空間后,在控制臺(tái)調(diào)用它:

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. classX1 <- data.frame( 
  2.             x1=c(6.6,6.6,6.1,6.1,8.4,7.2,8.4,7.5,7.5,8.3,7.8,7.8), 
  3.             x2=c(39,39,47,47,32,6,113,52,52,113,172,172), 
  4.             x3=c(1,1,1,1,2,1,3.5,1,3.5,0,1,1.5) 
  5.  ) 
  6.  classX2 <- data.frame( 
  7.             x1=c(8.4,8.4,8.4,6.3,7,7,7,8.3,8.3,7.2,7.2,7.2,5.5,8.4,8.4,7.5,7.5,8.3,8.3,8.3,8.3,7.8,7.8), 
  8.             x2=c(32,32,32,11,8,8,8,161,161,6,6,6,6,113,113,52,52,97,97,89,56,172,283), 
  9.             x3=c(1,2,2.5,4.5,4.5,6,1.5,1.5,0.5,3.5,1.0,1.0,2.5,3.5,3.5,1,1,0,2.5,0,1.5,1,1)   
  10. source("myDiscriminiant.R") 
  11. myDiscriminiant(classX1,classX2,var.equal=TRUE) 

    觀看blong就可以看出個(gè)體屬于哪一分類(lèi)

 

貝葉斯分類(lèi)器:

    計(jì)算個(gè)體屬于所有分類(lèi)的概率,根據(jù)概率大小選擇所屬分類(lèi),已兩個(gè)總體總體的判別情況來(lái)看,X1,X2分別具有概率密度函數(shù)f1(x)f2(x),則樣本實(shí)際來(lái)自X1卻誤判為X2的概率為:

    同樣來(lái)自X2卻誤判為X1的概率簡(jiǎn)單轉(zhuǎn)換下即可;

    來(lái)自X1也被判為X1的概率為:

    來(lái)自X2也被判為X2的也類(lèi)似

    設(shè)p1,p2分別表示X1X2先驗(yàn)概率,則

    用L(1|2)表示X2被誤判為X1的損失,其他類(lèi)似,為了是分類(lèi)越準(zhǔn)確,則需降低平均誤判損失(expected cost of misclassification:ECM)越小越好:


    上式便為Bayes版別式。

    按照上述數(shù)學(xué)推導(dǎo),我們構(gòu)建自己的兩個(gè)總體的Bayes判別程序:

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. myBayes <- function(TrnX1,TrnX2,rate=1,TstX=NULL,var.equal=FALSE){ 
  2.     if(is.null(TstX)==TRUE) TstX<-rbind(TrnX1,TrnX2) 
  3.     if(is.vector(TstX)==TRUE) TstX<-t(as.matrix(TstX)) 
  4.     else if(is.matrix(TstX)!=TRUE) 
  5.         TstX <- as.matrix(TstX) 
  6.     if(is.matrix(TrnX1)!=TRUE) TrnX1 <- as.matrix(TrnX1) 
  7.     if(is.matrix(TrnX2)!=TRUE) TrnX2 <- as.matrix(TrnX2) 
  8.     nx <- nrow(TstX) 
  9.     blong <- matrix(rep(0,nx),nrow=1,byrow=TRUE,dimnames=list("blong",1:nx)) 
  10.     mu1 <-colMeans(TrnX1);mu2 <- colMeans(TrnX2) 
  11.     if(var.equal==TRUE || var.equal==T){ 
  12.         S<- var(rbind(TrnX1,TrnX2)) 
  13.         w<- mahalanobis(TstX,mu2,S)-mahalanobis(TstX,mu1,S) 
  14.     } 
  15.     else{ 
  16.     S1<-var(TrnX1);S2<-var(TrnX2) 
  17.     beta <-2*log(rate)+log(det(S1)/det(S2)) 
  18.     w<-mahalanobis(TstX,mu2,S2)-mahalanobis(TstX,mu1,S1) 
  19.     } 
  20.     for(i in 1:nx){ 
  21.         if(w[i]>beta)   
  22.             blong[i] <- 1 
  23.         else 
  24.             blong[i] <- 2 
  25.     } 
  26.     blong 

    以天氣預(yù)報(bào)為案例,我們看看如何使用Bayse分類(lèi)器:

 我們?cè)诳刂婆_(tái)錄入數(shù)據(jù):

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. TrnX1<- matrix( 
  2.     c(24.8,24.1,26.6,23.5,25.5,27.4, 
  3.         -2,-2.4,-3,-1.9,-2.1,-3.1), 
  4.     ncol=2) 
  5. TrnX2<-matrix( 
  6.     c(22.1,21.6,22,22.8,22.7,21.5,22.1,21.4, 
  7.         -0.7,-1.4,-0.8,-1.6,-1.5,-1,-1.2,-1.3), 
  8.     ncol=2) 
  9. source("myBayes.R") 
  10. myBayes(TrnX1,TrnX2,rate=8/6) 

下圖可見(jiàn)所有的樣本全部判別正確:

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

若不方便掃碼,搜微信號(hào):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(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".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 = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+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); }