国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

從零開始構造鄰近分類器KNN

GeekQiaQia / 3494人閱讀

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

起步

本章介紹如何自行構造 KNN 分類器,這個分類器的實現上算是比較簡單的了。不過這可能需要你之前閱讀過這方面的知識。

前置閱讀

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

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

歐拉公式衡量距離

關于距離的測量方式有多種,這邊采用歐拉距離的測量方式:

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

對應的 python 代碼:

import math
def euler_distance(point1: list, point2: list) -> float:
    """
    計算兩點之間的歐拉距離,支持多維
    """
    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) # 根據元素的值從大到小對元素進行排序,返回下標

        # 根據K值選出分類結果, ["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)   # 計算各個分類出現的次數
        ret = sorted(result_dict.items(), key=lambda x: x[1], reverse=True) # 采用多數表決,即排序后的第一個分類
        return ret[0][0]

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

測試

還是使用 sklearn 中提供的虹膜數據。

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41137.html

相關文章

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

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

    zilu 評論0 收藏0
  • k-鄰近算法(kNN

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

    william 評論0 收藏0

發表評論

0條評論

GeekQiaQia

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<