機(jī)器學(xué)習(xí)必刷題-手撕推導(dǎo)篇(1):邏輯回歸與k-means

本系列文章對(duì)常見的機(jī)器學(xué)習(xí)面試題進(jìn)行了搜集、分類和整理,主要包括”手撕推導(dǎo)篇“、“模型比較篇”、“工程經(jīng)驗(yàn)篇”以及“基礎(chǔ)概念篇”等多個(gè)板塊,旨在幫助廣大算法工作者能夠從容應(yīng)對(duì)求職面試!

手撕邏輯回歸

image

手寫k-means算法

  1. 算法原理:

(1) 初始隨機(jī)選取k個(gè)中心點(diǎn);

(2) 遍歷每個(gè)樣本,選取距離每個(gè)樣本最近的中心點(diǎn),歸為該類;

(3) 更新中心點(diǎn)為每類的均值;

(4) 重復(fù)(2)(3)迭代更新,直至誤差小到某個(gè)值或者到達(dá)一定的迭代步數(shù).

  1. 偽代碼
image
  1. 代碼實(shí)現(xiàn)(python)
def kmeans(k):
    m, n = 100, 20  # 構(gòu)造樣本:100行、20列
    x = 10 * np.random.random((m, n))
    
    # 隨機(jī)選擇k個(gè)初始中心點(diǎn)
    init_cent_sample = set()
    while len(init_cent_sample) < k:
        init_cent_sample.add(np.random.randint(0, m))
    cent = x[list(init_cent_sample)]
    
    # 記錄每個(gè)樣本的類歸屬
    cluster_assessment = np.zeros((m, 2))
    
    # 記錄每個(gè)類的中心點(diǎn)在本次迭代后是否有過改變
    cent_changed = True
    while cent_changed:
        cent_changed = False
        
        for j in range(m):
            # 記錄每個(gè)樣本距離最近的類
            min_inx = -1
            # 記錄每個(gè)樣本的最小類距
            min_dist = math.inf
            
            for i in range(k):
                d = distance(x[j], cent[i])
                if d < min_dist:
                    min_dist = d
                    min_inx = i
            
            # 記錄此樣本的中心點(diǎn)是否發(fā)生變化
            if min_inx != cluster_assessment[j][0]:
                cluster_assessment[j] = np.array([min_inx, min_dist])
                cent_changed = True
        print(cluster_assessment)
        
        # 更新每個(gè)類的中心點(diǎn):均值
        for i in range(k):
            cent_i_samples = np.where(cluster_assessment[:, 0] == i)
            if len(cent_i_samples) > 0:
                print(cent_i_samples)
                cent[i] = np.mean(x[cent_i_samples], axis=0)


# 計(jì)算距離
def distance(a, b):
    return math.sqrt(sum(pow(a - b, 2)))
image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容