首页 > 技术文章 > k临近算法

helloandhey 2019-04-23 22:35 原文

1.KNN

K近邻算法的工作机制就是给定测试样本,基于某种距离度量找出训练集中与其最靠近的k个训练样本,然后基于这k个“邻居”的信息来进行预测。

2.思维导图

3.代码

import numpy as np
#训练数据

class K_neigbors:
    def __init__(self,k):
        self.k = k
    def fit(self,x_train,y_train):
        self.x = x_train
        self.y = y_train
    def predict(self,x_test):
        dist_list = [(-np.linalg.norm(x_test - self.x[i], ord=2), self.y[i], i)
                     for i in range(len(self.y))]  #计算欧式距离
        target = list(self.y)
        idol_target = 0
        for i in range(self.k):
            index = dist_list.index(max(dist_list))  #选取最大值       #
            target_try = target[index]     #最大值target
            dist_list.remove(dist_list[index])
            target.remove(target[index])
            if(target_try<0):
                idol_target -= 1
            else:
                idol_target += 1
        if idol_target >=0:
            return 1
        else:
            return -1

def main():
    #训练数据
    x_train = np.array([[5,9],[9,6],[4,7],[2,3],[8,1],[7,2]])
    y_train = np.array([1,1,1,-1,-1,-1])
    #测试数据
    x_test = np.array([5,3])
    #实例化模型
    k=3
    model = K_neigbors(k=k)
    model.fit(x_train,y_train)
    y_predict = model.predict(x_test)
    print("k={},被分类为:{}".format(k, y_predict))

if __name__ == "__main__":
    main()

 

推荐阅读