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

熱線電話:13121318867

登錄
首頁精彩閱讀R語言的三種聚類方法
R語言的三種聚類方法
2016-03-21
收藏

R語言的三種聚類方法

對于R語言,相信做數(shù)據(jù)分析的來說,一定不陌生,那么對于R語言的三種聚類方法你是否應用的全面,下面就說一下?

一、層次聚類

1)距離和相似系數(shù)

r語言中使用dist(x, method = “euclidean”,diag = FALSE, upper = FALSE, p = 2) 來計算距離。其中x是樣本矩陣或者數(shù)據(jù)框。method表示計算哪種距離。method的取值有:
euclidean                歐幾里德距離,就是平方再開方。
maximum                切比雪夫距離
manhattan            絕對值距離
canberra                Lance 距離
minkowski            明科夫斯基距離,使用時要指定p值
binary                    定性變量距離.
定性變量距離: 記m個項目里面的 0:0配對數(shù)為m0 ,1:1配對數(shù)為m1,不能配對數(shù)為m2,距離=m1/(m1+m2);
diag 為TRUE的時候給出對角線上的距離。upper為TURE的時候給出上三角矩陣上的值。

r語言中使用scale(x, center = TRUE, scale = TRUE) 對數(shù)據(jù)矩陣做中心化和標準化變換。
如只中心化 scale(x,scale=F) ,

r語言中使用sweep(x, MARGIN, STATS, FUN=”-“, …) 對矩陣進行運算。MARGIN為1,表示行的方向上進行運算,為2表示列的方向上運算。STATS是運算的參數(shù)。FUN為運算函數(shù),默認是減法。下面利用sweep對矩陣x進行極差標準化變換


有時候我們不是對樣本進行分類,而是對變量進行分類。這時候,我們不計算距離,而是計算變量間的相似系數(shù)。常用的有夾角和相關系數(shù)。
r語言計算兩向量的夾角余弦:


相關系數(shù)用cor函數(shù)

2)層次聚類

層次聚類法。先計算樣本之間的距離。每次將距離最近的點合并到同一個類。然后,再計算類與類之間的距離,將距離最近的類合并為一個大類。不停的合并,直到合成了一個類。其中類與類的距離的計算方法有:最短距離法,最長距離法,中間距離法,類平均法等。比如最短距離法,將類與類的距離定義為類與類之間樣本的最段距離。。。
r語言中使用hclust(d, method = “complete”, members=NULL) 來進行層次聚類
其中d為距離矩陣。
method表示類的合并方法,有:
single            最短距離法
complete        最長距離法
median        中間距離法
mcquitty        相似法
average        類平均法
centroid        重心法
ward            離差平方和法


150200_ftUB_1047640


然后可以用rect.hclust(tree, k = NULL, which = NULL, x = NULL, h = NULL,border = 2, cluster = NULL)來確定類的個數(shù)。 tree就是求出來的對象。k為分類的個數(shù),h為類間距離的閾值。border是畫出來的顏色,用來分類的。


result=cutree(model,k=3) 該函數(shù)可以用來提取每個樣本的所屬類別



二、動態(tài)聚類k-means

層次聚類,在類形成之后就不再改變。而且數(shù)據(jù)比較大的時候更占內(nèi)存。
動態(tài)聚類,先抽幾個點,把周圍的點聚集起來。然后算每個類的重心或平均值什么的,以算出來的結果為分類點,不斷的重復。直到分類的結果收斂為止。r語言中主要使用kmeans(x, centers, iter.max = 10, nstart = 1,algorithm =c(“Hartigan-Wong”, “Lloyd”,”Forgy”, “MacQueen”))來進行聚類。centers是初始類的個數(shù)或者初始類的中心。iter.max是最大迭代次數(shù)。nstart是當centers是數(shù)字的時候,隨機集合的個數(shù)。algorithm是算法,默認是第一個。

使用knn包進行Kmean聚類分析

將數(shù)據(jù)集進行備份,將列newiris$Species置為空,將此數(shù)據(jù)集作為測試數(shù)據(jù)集
> newiris <- iris
> newiris$Species <- NULL

在數(shù)據(jù)集newiris上運行Kmean聚類分析, 將聚類結果保存在kc中。在kmean函數(shù)中,將需要生成聚類數(shù)設置為3
> (kc <- kmeans(newiris, 3))
K-means clustering with 3 clusters of sizes 38, 50, 62: K-means算法產(chǎn)生了3個聚類,大小分別為38,50,62.

Cluster means: 每個聚類中各個列值生成的最終平均值
Sepal.Length Sepal.Width Petal.Length Petal.Width
1     5.006000    3.428000     1.462000    0.246000
2     5.901613    2.748387     4.393548    1.433871
3     6.850000    3.073684     5.742105    2.071053

Clustering vector: 每行記錄所屬的聚類(2代表屬于第二個聚類,1代表屬于第一個聚類,3代表屬于第三個聚類)
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[37] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[73] 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 3 3 3 3 2 3
[109] 3 3 3 3 3 2 2 3 3 3 3 2 3 2 3 2 3 3 2 2 3 3 3 3 3 2 3 3 3 3 2 3 3 3 2 3
[145] 3 3 2 3 3 2

Within cluster sum of squares by cluster: 每個聚類內(nèi)部的距離平方和
[1] 15.15100 39.82097 23.87947
(between_SS / total_SS =  88.4 %) 組間的距離平方和占了整體距離平方和的的88.4%,也就是說各個聚類間的距離做到了最大

Available components: 運行kmeans函數(shù)返回的對象所包含的各個組成部分
[1] “cluster”      “centers”      “totss”        “withinss”
[5] “tot.withinss” “betweenss”    “size”
(“cluster”是一個整數(shù)向量,用于表示記錄所屬的聚類
“centers”是一個矩陣,表示每聚類中各個變量的中心點
“totss”表示所生成聚類的總體距離平方和
“withinss”表示各個聚類組內(nèi)的距離平方和
“tot.withinss”表示聚類組內(nèi)的距離平方和總量
“betweenss”表示聚類組間的聚類平方和總量
“size”表示每個聚類組中成員的數(shù)量)

創(chuàng)建一個連續(xù)表,在三個聚類中分別統(tǒng)計各種花出現(xiàn)的次數(shù)
> table(iris$Species, kc$cluster)
1  2  3
setosa      0 50  0
versicolor  2  0 48
virginica  36  0 14

根據(jù)最后的聚類結果畫出散點圖,數(shù)據(jù)為結果集中的列”Sepal.Length”和”Sepal.Width”,顏色為用1,2,3表示的缺省顏色
> plot(newiris[c(“Sepal.Length”, “Sepal.Width”)], col = kc$cluster)
在圖上標出每個聚類的中心點
〉points(kc$centers[,c(“Sepal.Length”, “Sepal.Width”)], col = 1:3, pch = 8, cex=2)

三、DBSCAN

動態(tài)聚類往往聚出來的類有點圓形或者橢圓形?;诿芏葤呙璧乃惴軌蚪鉀Q這個問題。思路就是定一個距離半徑,定最少有多少個點,然后把可以到達的點都連起來,判定為同類。在r中的實現(xiàn)



dbscan(data, eps, MinPts, scale, method, seeds, showplot, countmode)



其中eps是距離的半徑,minpts是最少多少個點。 scale是否標準化(我猜) ,method 有三個值raw,dist,hybird,分別表示,數(shù)據(jù)是原始數(shù)據(jù)避免計算距離矩陣,數(shù)據(jù)就是距離矩陣,數(shù)據(jù)是原始數(shù)據(jù)但計算部分距離矩陣。showplot畫不畫圖,0不畫,1和2都畫。countmode,可以填個向量,用來顯示計算進度。用鳶尾花試一試


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