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

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀spark機(jī)器學(xué)習(xí)-聚類
spark機(jī)器學(xué)習(xí)-聚類
2018-04-05
收藏

spark機(jī)器學(xué)習(xí)-聚類

聚類算法是一種無(wú)監(jiān)督學(xué)習(xí)任務(wù),用于將對(duì)象分到具有高度相似性的聚類中,聚類算法的思想簡(jiǎn)單的說(shuō)就是物以類聚的思想,相同性質(zhì)的點(diǎn)在空間中表現(xiàn)的較為緊密和接近,主要用于數(shù)據(jù)探索與異常檢測(cè),最常用的一種聚類算法是K均值(K-means)聚類算法

算法原理
kmeans的計(jì)算方法如下:
1 選取k個(gè)中心點(diǎn)
2 遍歷所有數(shù)據(jù),將每個(gè)數(shù)據(jù)劃分到最近的中心點(diǎn)中
3 計(jì)算每個(gè)聚類的平均值,并作為新的中心點(diǎn)
4 重復(fù)2-3,直到這k個(gè)中線點(diǎn)不再變化(收斂了),或執(zhí)行了足夠多的迭代
算法的時(shí)間復(fù)雜度上界為O(n*k*t), 其中k為輸入的聚類個(gè)數(shù),n為數(shù)據(jù)量,t為迭代次數(shù)。一般t,k,n均可認(rèn)為是常量,時(shí)間和空間復(fù)雜度可以簡(jiǎn)化為O(n),即線性的

spark ml編碼實(shí)踐

可在spark-shell環(huán)境下修改參數(shù)調(diào)試以下代碼,可以用實(shí)際的業(yè)務(wù)數(shù)據(jù)做測(cè)試評(píng)估,業(yè)務(wù)數(shù)據(jù)一般是多列,可以把維度列用VectorAssembler組裝成向量列做為Kmeans算法的輸入列,考慮現(xiàn)實(shí)的應(yīng)用場(chǎng)景,比如做異常數(shù)據(jù)檢測(cè),正常數(shù)據(jù)分為一類,異常數(shù)據(jù)分為幾類,分別統(tǒng)計(jì)正常數(shù)據(jù)與異常數(shù)據(jù)的數(shù)據(jù)量,求百分比等

<span style="font-size:18px;">import org.apache.spark.ml.clustering.KMeans  
    import org.apache.spark.mllib.linalg.Vectors  
      
    val dataset = sqlContext.createDataFrame(Seq(  
    (1, Vectors.dense(0.0, 0.0, 0.0)),  
    (2, Vectors.dense(0.1, 0.1, 0.1)),  
    (3, Vectors.dense(0.2, 0.2, 0.2)),  
    (4, Vectors.dense(9.0, 9.0, 9.0)),  
    (5, Vectors.dense(1.1, 1.1, 0.1)),  
    (6, Vectors.dense(12, 14, 100)),  
    (6, Vectors.dense(1.1, 0.1, 0.2)),  
    (6, Vectors.dense(-2, -3, -4)),  
    (6, Vectors.dense(1.6, 0.6, 0.2))  
    )).toDF("id", "features")  
      
    // Trains a k-means model  
    val kmeans = new KMeans().setK(3).setMaxIter(20).setFeaturesCol("features").setPredictionCol("prediction")  
    val model = kmeans.fit(dataset)  
      
    // Shows the result  
    println("Final Centers: ")  
    model.clusterCenters.foreach(println)  
    model.clusterCenters.zipWithIndex.foreach(println)  
      
    val myres = model.transform(dataset).select("features","prediction")  
    myres.show()</span>
聚類算法是一類無(wú)監(jiān)督機(jī)器學(xué)習(xí)算法,聚類效果怎么評(píng)估,模型訓(xùn)練參數(shù)怎么調(diào)優(yōu),是否能用管道來(lái)訓(xùn)練模型來(lái)比較各種不同組合的參數(shù)的效果,即網(wǎng)格搜索法(grid search),先設(shè)置好待測(cè)試的參數(shù),MLLib就會(huì)自動(dòng)完成這些參數(shù)的不同組合,管道搭建了一條工作流,一次性完成了整個(gè)模型的調(diào)優(yōu),而不是獨(dú)立對(duì)每個(gè)參數(shù)進(jìn)行調(diào)優(yōu),這個(gè)還要再確認(rèn)一下,查看SPARK-14516好像目前還沒有一個(gè)聚類效果通用的自動(dòng)的度量方法
像這種代碼(不過(guò)現(xiàn)在這個(gè)代碼有問題):

<span style="font-size:18px;">import org.apache.spark.ml.clustering.KMeans  
    import org.apache.spark.mllib.linalg.Vectors  
    import org.apache.spark.ml.tuning.{ ParamGridBuilder, CrossValidator }  
    import org.apache.spark.ml.{ Pipeline, PipelineStage }  
      
    val dataset = sqlContext.createDataFrame(Seq(  
    (1, Vectors.dense(0.0, 0.0, 0.0)),  
    (2, Vectors.dense(0.1, 0.1, 0.1)),  
    (3, Vectors.dense(0.2, 0.2, 0.2)),  
    (4, Vectors.dense(9.0, 9.0, 9.0)),  
    (5, Vectors.dense(1.1, 1.1, 0.1)),  
    (6, Vectors.dense(12, 14, 100)),  
    (6, Vectors.dense(1.1, 0.1, 0.2)),  
    (6, Vectors.dense(-2, -3, -4)),  
    (6, Vectors.dense(1.6, 0.6, 0.2))  
    )).toDF("id", "features")  
      
    val kmeans = new KMeans().setK(2).setMaxIter(20).setFeaturesCol("features").setPredictionCol("prediction")  
    //主要問題在這里,沒有可用的評(píng)估器與label列設(shè)置  
    val evaluator = new BinaryClassificationEvaluator().setLabelCol("prediction")  
    val paramGrid = new ParamGridBuilder().addGrid(kmeans.initMode, Array("random")).addGrid(kmeans.k, Array(3, 4)).addGrid(kmeans.maxIter, Array(20, 60)).addGrid(kmeans.seed, Array(1L, 2L)).build()  
    val steps: Array[PipelineStage] = Array(kmeans)  
    val pipeline = new Pipeline().setStages(steps)  
      
    val cv = new CrossValidator().setEstimator(pipeline).setEvaluator(evaluator).setEstimatorParamMaps(paramGrid).setNumFolds(10)  
    // Trains a model  
    val pipelineFittedModel = cv.fit(dataset)</span>


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