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

熱線電話:13121318867

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

R語言與數(shù)據(jù)分析之四:聚類算法1_數(shù)據(jù)分析師

聚類算法也因此更具有大數(shù)據(jù)挖掘的味道,話不多說,先貼張圖,讓大家對聚類有個大概的印象:

 

    上圖可明顯看出店群被分為3個組(類),接下來讓我們來瞧瞧聚類是啥玩意

    聚類算法本質(zhì)上是基于幾何距離遠近為標準的算法,最適合數(shù)據(jù)是球形的問題,首先羅列下常用的距離:

    絕對值距離(又稱棋盤距離或城市街區(qū)距離)

    Euclide距離(歐幾里德距離,通用距離)

    Minkowski 距離(閔可夫斯基距離),歐幾里德距離 (q=2)、絕對值距離(q=1)和切比雪夫距離(q=無窮大),這些都是閔可夫斯基的特殊情況。

    Chebyshew(切比雪夫)距離

    Mahalanobis距離(咱們前面介紹的馬氏距離,這里復(fù)習(xí)一下

    Lance 和Wiliams距離

    定性變量距離(二進制距離):

    其中m1為所有項目中1-1配對的總數(shù),m2是不配對的總數(shù)

    R語言中,對上述的距離都有現(xiàn)成函數(shù),只需要借參數(shù)加以制定即可,具體如下:

    [plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. dist(x,method=”euclidean”,diag=FALSE,upper=FALSE,p=2) #歐式距離 
  2. dist(x,method=”maximum” ,diag=FALSE,upper=FALSE,p=2)#切比雪夫距離 
  3. dist(x,method=”manhattan” ,diag=FALSE,upper=FALSE,p=2)#絕對值距離 
  4. dist(x,method=”canberra”, diag=FALSE,upper=FALSE,p=2)#Lance距離; 
  5. dist(x,method=”binary” ,diag=FALSE,upper=FALSE,p=2)#d定性變量距離 

 

    講完距離后,需要對原始數(shù)據(jù)進行相應(yīng)的處理,否則數(shù)據(jù)規(guī)模的差異會被算法誤認為屬性權(quán)重值而影響最終的聚類效果。我們需要進行數(shù)據(jù)的中心化和標準化 轉(zhuǎn)換。中心化即讓所有的數(shù)據(jù)都已0為中心點,常用的標準化的做法是將數(shù)據(jù)看作正態(tài)分布,只需要將數(shù)據(jù)除以標準差即可到達標準化作用。數(shù)據(jù)中心化和標準化 后,各個變量的取值大小相接近,這樣各個變量都平等的發(fā)揮決策作用。

    R語言中提供了相應(yīng)的函數(shù):

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. Scale(x,center=TRUE,scale=TRUE) 

    接下來先介紹最古老的聚類算法——層次聚類

    思想:

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. Step1:每個樣本各自作為一類; 
  2. Step2:計算類之間的距離; 
  3. Step3:將距離最短的兩個類合并為一個新類; 
  4. Step4:重復(fù)2-3步,即不斷合并最近的兩個類,每次減少一個類,直至所有樣本被合并為一類; 

    接下來介紹下類間距離:

    最短距離法:兩個類中所有點距離中的最小值;

    最長距離法:兩個類中所有點距離中的最大值;

    中間距離法:取介于最小值和最大值兩者間的距離;

    類平均法:取所有距離的評價值;

    重心法:類重心(均值)之間的距離;

    離差平法和法:各項與評價項之差的平方的總和;

    R提供了hclust()函數(shù)做層次聚類方法,下面舉個簡單的例子來說明下用法:

[plain] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. x<-c(1,2,6,8,11) 
  2. dim(x)<-c(5,1) 
  3. d<-dist(x) 
  4. hc1<-hclust(d,"single")#最短距離法 
  5. hc2<-hclust(d,"complete")#最長距離法 
  6. hc3<-hclust(d,"median")#中間距離法 
  7. hc4<-hclust(d,"ward")#離差平方和法 
  8. cpar<-par(mfrow=c(2,2)) 
  9. plot(hc1,hang=-1) 
  10. plot(hc2,hang=-1) 
  11. plot(hc3,hang=-1) 
  12. plot(hc4,hang=-1) 
  13. par(cpar) 
  14. rect.hclust(hc1,k=2)#人工輔助告訴R分為幾大類 

    結(jié)果見下圖:其中的哦第一板塊的紅色劃分認為告訴R需要分幾類后,R自動畫出分類的展示:

文章來源:CDA數(shù)據(jù)分析師培訓(xùn)官網(wǎng)

數(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)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 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); }