機(jī)器學(xué)習(xí)經(jīng)典算法1:k-means 聚類算法

這里的k為聚類數(shù),其解決以1種屬性值(例如距離值)進(jìn)行的多點(diǎn)分類問題魔熏。
例如我們要實(shí)現(xiàn)對坐標(biāo)系中多個(gè)點(diǎn)進(jìn)行聚類分組舅柜。思路如下:
1,輸入條件1:坐標(biāo)系中的N個(gè)固定點(diǎn)集合(已知每個(gè)點(diǎn)的x捺僻、y坐標(biāo)值)
2,輸入條件2:坐標(biāo)系中任意k個(gè)聚類核心點(diǎn)的位置(通常會(huì)依據(jù)經(jīng)驗(yàn)定位初始的聚類核心點(diǎn)位置)
3崇裁,執(zhí)行過程1:遍歷所有固定點(diǎn)計(jì)算每個(gè)點(diǎn)與k各聚類核心點(diǎn)的距離匕坯,并將各點(diǎn)歸類到與其距離最近的核心點(diǎn)分類中(采用歐氏距離)。
4拔稳,執(zhí)行過程2:依次遍歷k個(gè)聚類葛峻,調(diào)整各聚類中核心點(diǎn)的位置到聚類中心(求聚類中所有點(diǎn)平均值的方式)
5,執(zhí)行過程3:再次執(zhí)行過程1巴比,直到聚類核心點(diǎn)的位置不再發(fā)生變化术奖。

Js算法如下:

        /**
         * 按給定的分組點(diǎn)生成分組
         * @param points 所有點(diǎn)
         * @param zonePoints 當(dāng)前分組點(diǎn)
         */
        function kMeans(points, zonePoints) {
            for (var i = 0; i < points.length; i++) {
                var p = points[i];
                var minDistance = -1, minTp = null;
                for (var j = 0; j < zonePoints.length; j++) {
                    var tp = zonePoints[j];
                    var distance = Math.sqrt(Math.pow(p.x - tp.x, 2) + Math.pow(p.y - tp.y, 2));
                    if (minDistance === -1 || minDistance > distance) {//計(jì)算每個(gè)點(diǎn)到各區(qū)域核心點(diǎn)的最短距離
                        minDistance = distance;
                        minTp = tp;
                    }
                }
                p.tpId = minTp.id;
                $("#p" + p.id).css('background-color', minTp.color);//設(shè)置點(diǎn)顏色
                printLog('p[' + p.id + ']{x:' + p.x + ',y:' + p.y + '}所屬類別:' + (p.tpId === undefined ? '未設(shè)定' : p.tpId));
            }
        }

        /**
         * 計(jì)算每個(gè)分組的核心點(diǎn),并修改分組點(diǎn)坐標(biāo)
         * @param points 所有點(diǎn)
         * @param zonePoints 當(dāng)前分組點(diǎn)
         */
        function calcCenter(points, zonePoints) {
            var bestRegionCoreSize = 0;
            for (var j = 0; j < zonePoints.length; j++) {
                var tp = zonePoints[j];
                //1轻绞,找到分組的所有點(diǎn)
                var pSumX = 0, pSumY = 0, pSize = 0;
                for (var i = 0; i < points.length; i++) {
                    var p = points[i];
                    if (tp.id === p.tpId) {
                        // tpGroup.push(p);
                        pSumX += p.x;
                        pSumY += p.y;
                        pSize++;
                    }
                }
                //2采记,求組核心點(diǎn)
                if (pSize > 0) {
                    var pCenterX = pSumX / pSize;
                    var pCenterY = pSumY / pSize;
                    if (tp.x === pCenterX && tp.y === pCenterY) {
                        bestRegionCoreSize++;
                        printLog('<font color="'+tp.color+'">找到一個(gè)最佳聚類核心,坐標(biāo)是:{x:'+pCenterX+',y:'+pCenterY+'}</font>');
                    } else {
                        tp.x = pCenterX;
                        tp.y = pCenterY;
                        $("#tp" + tp.id).css({'left': pCenterX + 'px', 'top': pCenterY + 'px'});

                    }
                }
            }
            if (bestRegionCoreSize === zonePoints.length) {
                alert("已找到所有聚類的最佳核心點(diǎn)政勃,所有點(diǎn)的聚類已完成");
                return true;
            } else {
                return false;
            }
        }

演示demo下載地址:https://gitee.com/inq/k-means.git

ScreenFlow.gif

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末唧龄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子奸远,更是在濱河造成了極大的恐慌既棺,老刑警劉巖讽挟,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異丸冕,居然都是意外死亡耽梅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門胖烛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來眼姐,“玉大人,你說我怎么就攤上這事洪己⊥椎剩” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵答捕,是天一觀的道長。 經(jīng)常有香客問我屑那,道長拱镐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任持际,我火速辦了婚禮沃琅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蜘欲。我一直安慰自己益眉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布姥份。 她就那樣靜靜地躺著郭脂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪澈歉。 梳的紋絲不亂的頭發(fā)上展鸡,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機(jī)與錄音埃难,去河邊找鬼莹弊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛涡尘,可吹牛的內(nèi)容都是我干的忍弛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼考抄,長吁一口氣:“原來是場噩夢啊……” “哼细疚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起座泳,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤惠昔,失蹤者是張志新(化名)和其女友劉穎幕与,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體镇防,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡啦鸣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了来氧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诫给。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖啦扬,靈堂內(nèi)的尸體忽然破棺而出中狂,到底是詐尸還是另有隱情,我是刑警寧澤扑毡,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布胃榕,位于F島的核電站,受9級特大地震影響瞄摊,放射性物質(zhì)發(fā)生泄漏勋又。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一换帜、第九天 我趴在偏房一處隱蔽的房頂上張望楔壤。 院中可真熱鬧,春花似錦惯驼、人聲如沸蹲嚣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽隙畜。三九已至,卻和暖如春疲眷,著一層夾襖步出監(jiān)牢的瞬間禾蚕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工狂丝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留换淆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓几颜,卻偏偏與公主長得像倍试,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子蛋哭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容