成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

從零開始構(gòu)造鄰近分類器KNN

GeekQiaQia / 3521人閱讀

摘要:起步本章介紹如何自行構(gòu)造分類器,這個(gè)分類器的實(shí)現(xiàn)上算是比較簡(jiǎn)單的了。不過這可能需要你之前閱讀過這方面的知識(shí)。在預(yù)測(cè)函數(shù)中,需要依次計(jì)算測(cè)試樣本與數(shù)據(jù)集中每個(gè)樣本的距離。篩選出前個(gè),采用多數(shù)表決的方式。測(cè)試還是使用中提供的虹膜數(shù)據(jù)。

起步

本章介紹如何自行構(gòu)造 KNN 分類器,這個(gè)分類器的實(shí)現(xiàn)上算是比較簡(jiǎn)單的了。不過這可能需要你之前閱讀過這方面的知識(shí)。

前置閱讀

分類算法之鄰近算法:KNN(理論篇)

分類算法之鄰近算法:KNN(應(yīng)用篇)

歐拉公式衡量距離

關(guān)于距離的測(cè)量方式有多種,這邊采用歐拉距離的測(cè)量方式:

$$ d(x,y) = sqrt{sum_{i=0}^n(x_i-y_i)^2} $$

對(duì)應(yīng)的 python 代碼:

import math
def euler_distance(point1: list, point2: list) -> float:
    """
    計(jì)算兩點(diǎn)之間的歐拉距離,支持多維
    """
    distance = 0.0
    for a, b in zip(point1, point2):
        distance += math.pow(a - b, 2)
    return math.sqrt(distance)
KNN 分類器
import collections
import numpy as np
class KNeighborsClass(object):
    def __init__(self, n_neighbors=5):
        self.n_neighbors = n_neighbors

    def fit(self, data_set, labels):
        self.data_set = data_set
        self.labels = labels

    def predict(self, test_row):
        dist = []
        for v in self.data_set:
            dist.append(euler_distance(v, test_row))
        dist = np.array(dist)
        sorted_dist_index = np.argsort(dist) # 根據(jù)元素的值從大到小對(duì)元素進(jìn)行排序,返回下標(biāo)

        # 根據(jù)K值選出分類結(jié)果, ["A", "B", "B", "A", ...]
        class_list = [ self.labels[ sorted_dist_index[i] ] for i in range(self.n_neighbors)]
        result_dict = collections.Counter(class_list)   # 計(jì)算各個(gè)分類出現(xiàn)的次數(shù)
        ret = sorted(result_dict.items(), key=lambda x: x[1], reverse=True) # 采用多數(shù)表決,即排序后的第一個(gè)分類
        return ret[0][0]

這個(gè)分類器不需要訓(xùn)練,因此在 fit 函數(shù)中僅僅保存其數(shù)據(jù)集和結(jié)果集即可。在預(yù)測(cè)函數(shù)中,需要依次計(jì)算測(cè)試樣本與數(shù)據(jù)集中每個(gè)樣本的距離。篩選出前 K 個(gè),采用多數(shù)表決的方式。

測(cè)試

還是使用 sklearn 中提供的虹膜數(shù)據(jù)。

if __name__ == "__main__":
    from sklearn import datasets
    iris = datasets.load_iris()
    knn = KNeighborsClass(n_neighbors=5)
    knn.fit(iris.data, iris.target)
    predict = knn.predict([0.1, 0.2, 0.3, 0.4])
    print(predict)  # output: 1

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41137.html

相關(guān)文章

  • 分類算法之鄰近算法:KNN(應(yīng)用篇)

    摘要:起步這次使用的訓(xùn)練集由模塊提供,關(guān)于虹膜一種鳶尾屬植物的數(shù)據(jù)。它的品種分類有山鳶尾,變色鳶尾,菖蒲錦葵三種。構(gòu)造分類器參數(shù)級(jí)是指定獲取個(gè)鄰近點(diǎn)。訓(xùn)練訓(xùn)練的函數(shù)一般就是測(cè)試模擬一些測(cè)試數(shù)據(jù),使用剛剛的模型進(jìn)行預(yù)測(cè) 起步 這次使用的訓(xùn)練集由 sklearn 模塊提供,關(guān)于虹膜(一種鳶尾屬植物)的數(shù)據(jù)。 showImg(https://segmentfault.com/img/remote/...

    zilu 評(píng)論0 收藏0
  • k-鄰近算法(kNN

    摘要:鄰近算法算法背景假設(shè)我們要給一堆音樂分類,我們可以分成搖滾,民謠,戲曲等等,搖滾的音樂激昂,節(jié)奏快。這種基于某一特征出現(xiàn)的次數(shù)來區(qū)分事物的算法,我們使用鄰近算法。 k-鄰近算法 算法背景 假設(shè)我們要給一堆mp3音樂分類,我們可以分成搖滾,民謠,戲曲等等,搖滾的音樂激昂,節(jié)奏快。民謠舒緩節(jié)奏慢,但是搖滾中也有可能存在舒緩節(jié)奏慢點(diǎn)旋律, 同理民謠中也會(huì)有激昂,快的旋律。那么如何區(qū)分他們呢,...

    william 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

GeekQiaQia

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<