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

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀簡(jiǎn)單易學(xué)的機(jī)器學(xué)習(xí)算法—K-Means算法
簡(jiǎn)單易學(xué)的機(jī)器學(xué)習(xí)算法—K-Means算法
2017-03-23
收藏

簡(jiǎn)單易學(xué)的機(jī)器學(xué)習(xí)算法—K-Means算法

一、聚類算法的簡(jiǎn)介
    聚類算法是一種典型的無(wú)監(jiān)督學(xué)習(xí)算法,主要用于將相似的樣本自動(dòng)歸到一個(gè)類別中。聚類算法與分類算法最大的區(qū)別是:聚類算法是無(wú)監(jiān)督的學(xué)習(xí)算法,而分類算法屬于監(jiān)督的學(xué)習(xí)算法。
    在聚類算法中根據(jù)樣本之間的相似性,將樣本劃分到不同的類別中,對(duì)于不同的相似度計(jì)算方法,會(huì)得到不同的聚類結(jié)果,常用的相似度計(jì)算方法有歐式距離法。
二、K-Means算法的概述
   基本K-Means算法的思想很簡(jiǎn)單,事先確定常數(shù)K,常數(shù)K意味著最終的聚類類別數(shù),首先隨機(jī)選定初始點(diǎn)為質(zhì)心,并通過(guò)計(jì)算每一個(gè)樣本與質(zhì)心之間的相似度(這里為歐式距離),將樣本點(diǎn)歸到最相似的類中,接著,重新計(jì)算每個(gè)類的質(zhì)心(即為類中心),重復(fù)這樣的過(guò)程,知道質(zhì)心不再改變,最終就確定了每個(gè)樣本所屬的類別以及每個(gè)類的質(zhì)心。由于每次都要計(jì)算所有的樣本與每一個(gè)質(zhì)心之間的相似度,故在大規(guī)模的數(shù)據(jù)集上,K-Means算法的收斂速度比較慢。
三、K-Means算法的流程
初始化常數(shù)K,隨機(jī)選取初始點(diǎn)為質(zhì)心
重復(fù)計(jì)算一下過(guò)程,直到質(zhì)心不再改變
計(jì)算樣本與每個(gè)質(zhì)心之間的相似度,將樣本歸類到最相似的類中
重新計(jì)算質(zhì)心
輸出最終的質(zhì)心以及每個(gè)類
四、K-Means算法的實(shí)現(xiàn)
    對(duì)數(shù)據(jù)集進(jìn)行測(cè)試

原始數(shù)據(jù)集
MATLAB代碼
主程序
[plain] view plain copy 在CODE上查看代碼片派生到我的代碼片
%% input the data  
A = load('testSet.txt');  
 
%% 計(jì)算質(zhì)心  
centroids = kMeans(A, 4);  

隨機(jī)選取質(zhì)心
[plain] view plain copy 在CODE上查看代碼片派生到我的代碼片
%% 取得隨機(jī)中心  
function [ centroids ] = randCent( dataSet, k )  
    [m,n] = size(dataSet);%取得列數(shù)  
    centroids = zeros(k, n);  
    for j = 1:n  
        minJ = min(dataSet(:,j));  
        rangeJ = max(dataSet(:,j))-min(dataSet(:,j));  
        centroids(:,j) = minJ+rand(k,1)*rangeJ;%產(chǎn)生區(qū)間上的隨機(jī)數(shù)  
    end  
end  

計(jì)算相似性
[plain] view plain copy 在CODE上查看代碼片派生到我的代碼片
function [ dist ] = distence( vecA, vecB )  
    dist = (vecA-vecB)*(vecA-vecB)';%這里取歐式距離的平方  
end  

kMeans的主程序
[plain] view plain copy 在CODE上查看代碼片派生到我的代碼片
%% kMeans的核心程序,不斷迭代求解聚類中心  
function [ centroids ] = kMeans( dataSet, k )  
    [m,n] = size(dataSet);  
    %初始化聚類中心  
    centroids = randCent(dataSet, k);  
    subCenter = zeros(m,2);%做一個(gè)m*2的矩陣,第一列存儲(chǔ)類別,第二列存儲(chǔ)距離  
    change = 1;%判斷是否改變  
    while change == 1  
        change = 0;  
        %對(duì)每一組數(shù)據(jù)計(jì)算距離  
        for i = 1:m  
            minDist = inf;  
            minIndex = 0;  
            for j = 1:k  
                 dist= distence(dataSet(i,:), centroids(j,:));  
                 if dist < minDist  
                     minDist = dist;  
                     minIndex = j;  
                 end  
            end  
            if subCenter(i,1) ~= minIndex  
                change = 1;  
                subCenter(i,:)=[minIndex, minDist];  
            end          
        end  
        %對(duì)k類重新就算聚類中心  
          
        for j = 1:k  
            sum = zeros(1,n);  
            r = 0;%數(shù)量  
            for i = 1:m  
                if subCenter(i,1) == j  
                    sum = sum + dataSet(i,:);  
                    r = r+1;  
                end  
            end  
            centroids(j,:) = sum./r;  
        end  
    end  
      
    %% 完成作圖  
    hold on  
    for i = 1:m  
        switch subCenter(i,1)  
            case 1  
                plot(dataSet(i,1), dataSet(i,2), '.b');  
            case 2  
                plot(dataSet(i,1), dataSet(i,2), '.g');  
            case 3  
                plot(dataSet(i,1), dataSet(i,2), '.r');  
            otherwise  
                plot(dataSet(i,1), dataSet(i,2), '.c');  
        end  
    end  
    plot(centroids(:,1),centroids(:,2),'+k');  
end  

最終的聚類結(jié)果

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