kmeans實(shí)例及代碼

聚類和決策樹一樣施蜜,屬于無監(jiān)督學(xué)習(xí)辈灼。也就是說數(shù)據(jù)樣本只有特征x,沒有給定y。聚類的目的是找到樣本特征潛在的類別翘单,將同類別的樣本放在一起。

kmeans的具體邏輯如下:
1.隨機(jī)選取k個(gè)簇心巾陕;
2.對(duì)于每一個(gè)樣例琳钉,計(jì)算其屬于的類;
3.循環(huán)完所有的樣例后戳表,重新計(jì)算每個(gè)簇的簇心桶至;
4.重復(fù)第二步第三部,直到簇心不再變化或達(dá)到最大迭代值匾旭。

import numpy as np
import matplotlib.pyplot as plt

#讀取數(shù)據(jù)
def loaddate(filename):
    datamat = []
    fr = open(filename)
    for line in fr.readlines():
        datamat.append(map(float, line.strip().split('\t')))
    datamat = pd.DataFrame(datamat)
    return datamat

#計(jì)算歐式距離
def distance(vecA, vecB):
    return np.sqrt(np.sum(np.power(vecA - vecB, 2)))

#產(chǎn)生隨機(jī)簇心
def getcenter(data, k):
    _, n = data.shape
    center = pd.DataFrame(np.zeros([k, 2]))
    for i in range(n):
        minJ = np.min(data.iloc[:, i])
        maxJ = np.max(data.iloc[:, i])
        rangJ = float(maxJ - minJ)
        center.iloc[:, i] = minJ +rangJ * np.random.rand(k, 1)
    return center

#計(jì)算每個(gè)樣例歸屬的簇镣屹,并重新計(jì)算簇心
def kmeans(data, k, maxiter):
    ceter = getcenter(data, k)
    m, n = data.shape
    position = pd.DataFrame(np.zeros((m, 2)), columns = ['dis', 'cindex'])
    #position第一列放置樣例距簇心的距離,第二列放置樣本歸屬的簇心
    itercount = 0
    #迭代次數(shù)价涝,如果迭代次數(shù)超過最大迭代次數(shù)女蜈,則停止
    clusterchange = True
    #簇心是否發(fā)生變化
    while itercount < maxiter and clusterchange:
        itercount += 1
        clusterchange = False
        for i in range(m):
            minindex = 0
            mindist = np.inf
            #設(shè)置position的初始值
            for j in range(k):
                dis = distance(data.iloc[i, :], ceter.iloc[j, :])
                #計(jì)算歐式距離
                if dis < mindist:
                    minindex = j
                    mindist = dis
                    #替換掉初始化的數(shù)據(jù)
            if position.iloc[i, 1] != minindex:
                clusterchange = True
                #觀察歸屬的簇是否發(fā)生變化
            position.iloc[i, :] = mindist, minindex
        for cent in range(k):
            ptscluster = data.iloc[list(position.loc[position['cindex'] == cent, 'cindex'].index), :]
            if ptscluster.shape[0] > 0:
                ceter.iloc[cent, :] = np.mean(ptscluster, axis = 0)
                #計(jì)算新的簇心
    return ceter
                

if __name__ == '__main__':
    file = loaddate('testSet.txt')
    ceter = kmeans(file, 2, 5)
    plt.scatter(file.iloc[:, 0], file.iloc[:, 1], marker = '*', c = 'b')
    plt.scatter(ceter.iloc[:, 0], ceter.iloc[:, 1], marker = 'o', c = 'r')
    plt.show()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市色瘩,隨后出現(xiàn)的幾起案子鞭光,更是在濱河造成了極大的恐慌,老刑警劉巖泞遗,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惰许,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡史辙,警方通過查閱死者的電腦和手機(jī)汹买,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門佩伤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人晦毙,你說我怎么就攤上這事生巡。” “怎么了见妒?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵孤荣,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我须揣,道長(zhǎng)盐股,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任耻卡,我火速辦了婚禮疯汁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘卵酪。我一直安慰自己幌蚊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布溃卡。 她就那樣靜靜地躺著溢豆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瘸羡。 梳的紋絲不亂的頭發(fā)上沫换,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音最铁,去河邊找鬼。 笑死垮兑,一個(gè)胖子當(dāng)著我的面吹牛冷尉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播系枪,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼雀哨,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了私爷?” 一聲冷哼從身側(cè)響起雾棺,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎衬浑,沒想到半個(gè)月后捌浩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡工秩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年尸饺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了进统。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浪听,死狀恐怖螟碎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情迹栓,我是刑警寧澤掉分,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站克伊,受9級(jí)特大地震影響酥郭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜答毫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一褥民、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洗搂,春花似錦消返、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惫叛,卻和暖如春倡勇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嘉涌。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工妻熊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仑最。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓扔役,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親警医。 傳聞我的和親對(duì)象是個(gè)殘疾皇子亿胸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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

  • 聚類算法 前面介紹的集中算法都是屬于有監(jiān)督機(jī)器學(xué)習(xí)方法,這章和前面不同预皇,介紹無監(jiān)督學(xué)習(xí)算法侈玄,也就是聚類算法。在無監(jiān)...
    飄涯閱讀 41,324評(píng)論 3 52
  • 第三章 使用距離向量構(gòu)建模型 作者:Trent Hauck 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 這一...
    布客飛龍閱讀 2,047評(píng)論 1 6
  • 1. Kmeans聚類算法簡(jiǎn)介 由于具有出色的速度和良好的可擴(kuò)展性吟温,Kmeans聚類算法算得上是最著名的聚類方法序仙。...
    wujingwin閱讀 10,435評(píng)論 1 8
  • 姓名: 張景 公司: 揚(yáng)州方圓建筑有限公司363期(哈爾濱) 《六項(xiàng)精進(jìn)》“謙虛二組” 【日精進(jìn)打卡第147天】 ...
    張景_b55f閱讀 126評(píng)論 0 0
  • 今天我覺察到我的內(nèi)在有一種極深的寧靜 給到自己一個(gè)完整的靜謐時(shí)光~安靜的和自己在一起。今天我覺察到鏈接源頭的強(qiáng)大轉(zhuǎn)...
    胡玉樹閱讀 309評(píng)論 0 1