欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

K-means python 實(shí)現(xiàn)

系統(tǒng) 1715 0
原文鏈接: https://blog.csdn.net/hanxia159357/article/details/81530361

轉(zhuǎn)載鏈接:https://blog.csdn.net/hanxia159357/article/details/81530361

本文完成程序及測試數(shù)據(jù)集詳細(xì)見:https://github.com/HanXia001/k-means-python3-

本文主要內(nèi)容:

? ? ? ? ? ? ? ? 1.k-means解決的問題;

? ? ? ? ? ? ? ? 2.k-means原理介紹;

? ? ? ? ? ? ? ? 3.k-means的簡單實(shí)現(xiàn)。

1.k-means解決的問題

? ? ? ? ?k-means算法屬于無監(jiān)督學(xué)習(xí)的一種聚類算法,其目的為:在不知數(shù)據(jù)所屬類別及類別數(shù)量的前提下,依據(jù)數(shù)據(jù)自身所暗含的特點(diǎn)對數(shù)據(jù)進(jìn)行聚類。對于聚類過程中類別數(shù)量k的選取,需要一定的先驗(yàn)知識,也可根據(jù)“類內(nèi)間距小,類間間距大“(一種聚類算法的理想情況)為目標(biāo)進(jìn)行實(shí)現(xiàn)。

2.k-means原理介紹

? ? ? ? k-means算法以數(shù)據(jù)間的距離作為數(shù)據(jù)對象相似性度量的標(biāo)準(zhǔn),因此選擇計(jì)算數(shù)據(jù)間距離的計(jì)算方式對最后的聚類效果有顯著的影響,常用計(jì)算距離的方式有:余弦距離、歐式距離、曼哈頓距離等。本文以歐式距離為例(會(huì)一種,其余也就會(huì)了)。

歐式距離公式:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

例子:若數(shù)據(jù)為其計(jì)算歐式距離如下(可理解為D表示維度,i,j表示行數(shù)):

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ?通過公式(1)可計(jì)算出每對數(shù)據(jù)對象間的距離,根據(jù)距離的遠(yuǎn)近進(jìn)行聚類成指定的類別數(shù)K。對每一類中的數(shù)據(jù)初步選取類心,取的方式有多種如:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1.該類所有數(shù)據(jù)的均值;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.隨機(jī)取k個(gè)數(shù)據(jù)作為類心;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3.選取距離最遠(yuǎn)的k個(gè)點(diǎn)作為類心等。

以上方法均需要對初步的類心進(jìn)行迭代,當(dāng)類心變化緩慢時(shí)便可認(rèn)為收斂,此時(shí)該點(diǎn)便為最終的類型。本文以方法1為例:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

表示第k類,表示第k類中數(shù)據(jù)對象的個(gè)數(shù)。類心迭代過程如下:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

通常迭代終止的條件有兩種:1)達(dá)到指定的迭代次數(shù)T;2)類心不再發(fā)生明顯的變化,即收斂。

3.k-means的簡單實(shí)現(xiàn)

原理講過,此處直接上代碼(python3實(shí)現(xiàn)):

            
              
import numpy as np

import matplotlib.pyplot as plt

 

# 加載數(shù)據(jù)

def loadDataSet(fileName):

    data = np.loadtxt(fileName,delimiter='\t')

    return data

 

# 歐氏距離計(jì)算

def distEclud(x,y):

    return np.sqrt(np.sum((x-y)**2))  # 計(jì)算歐氏距離

 

# 為給定數(shù)據(jù)集構(gòu)建一個(gè)包含K個(gè)隨機(jī)質(zhì)心的集合

def randCent(dataSet,k):

    m,n = dataSet.shape

    centroids = np.zeros((k,n))

    for i in range(k):

        index = int(np.random.uniform(0,m)) #

        centroids[i,:] = dataSet[index,:]

    return centroids

 

# k均值聚類

def KMeans(dataSet,k):

 

    m = np.shape(dataSet)[0]  #行的數(shù)目

    # 第一列存樣本屬于哪一簇

    # 第二列存樣本的到簇的中心點(diǎn)的誤差

    clusterAssment = np.mat(np.zeros((m,2)))

    clusterChange = True

 

    # 第1步 初始化centroids

    centroids = randCent(dataSet,k)

    while clusterChange:

        clusterChange = False

 

        # 遍歷所有的樣本(行數(shù))

        for i in range(m):

            minDist = 100000.0

            minIndex = -1

 

            # 遍歷所有的質(zhì)心

            #第2步 找出最近的質(zhì)心

            for j in range(k):

                # 計(jì)算該樣本到質(zhì)心的歐式距離

                distance = distEclud(centroids[j,:],dataSet[i,:])

                if distance < minDist:

                    minDist = distance

                    minIndex = j

            # 第 3 步:更新每一行樣本所屬的簇

            if clusterAssment[i,0] != minIndex:

                clusterChange = True

                clusterAssment[i,:] = minIndex,minDist**2

        #第 4 步:更新質(zhì)心

        for j in range(k):

            pointsInCluster = dataSet[np.nonzero(clusterAssment[:,0].A == j)[0]]  # 獲取簇類所有的點(diǎn)

            centroids[j,:] = np.mean(pointsInCluster,axis=0)   # 對矩陣的行求均值

 

    print("Congratulations,cluster complete!")

    return centroids,clusterAssment

 

def showCluster(dataSet,k,centroids,clusterAssment):

    m,n = dataSet.shape

    if n != 2:

        print("數(shù)據(jù)不是二維的")

        return 1

 

    mark = ['or', 'ob', 'og', 'ok', '^r', '+r', 'sr', 'dr', '
              
                 len(mark):

        print("k值太大了")

        return 1

 

    # 繪制所有的樣本

    for i in range(m):

        markIndex = int(clusterAssment[i,0])

        plt.plot(dataSet[i,0],dataSet[i,1],mark[markIndex])

 

    mark = ['Dr', 'Db', 'Dg', 'Dk', '^b', '+b', 'sb', 'db', '
                
              
            
            
          

效果如圖:

? ? ? ? ? ? ? ? ? ?
版權(quán)聲明:本文為CSDN博主「寒夏12」的原創(chuàng)文章,遵循CC 4.0 by-sa版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/hanxia159357/article/details/81530361


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 一区二区三区国产 | 久久这里精品 | 国产男女免费完整版视频 | 国产一区二区三区在线 | 日韩三级免费观看 | 91高清在线观看 | 国产91久久精品一区二区 | 二区三区不卡不卡视频 | 五月亭亭激情五月 | 成人午夜精品久久久久久久小说 | 大开眼界 无删减 | 国产福利不卡 | 一级黄色大毛片 | 中文字幕国产精品 | 欧美日韩视频在线第一区 | 很黄很粗很湿很刺激的视频 | 亚洲国产精久久久久久久 | 午夜视频在线观看网站 | 免费污视频 | 免费成人高清 | 精品久久久久久久久久久久久久久 | 亚洲欧美日韩在线中文一 | 久草中文在线观看 | 亚洲精品中文字幕在线观看 | 免费a一级毛片在线播放 | 欧美日韩亚洲一区二区三区在线观看 | 国产高清无专砖区2021 | 猫鼠游戏电影在线观看免费版 | 黄网站在线观看高清免费 | 亚洲喷水| 成人福利视频网站 | 欧美色综合网 | 波多野结衣一区二区 | 欧美日韩一区二区三区在线观看 | 国产精品亚洲国产 | 午夜电影一区 | 九九热免费视频在线观看 | 国产一区久久精品 | 中文字幕在线观看 | 日韩精品成人 | 午夜婷婷精品午夜无码A片影院 |