knn算法

本文介绍了使用欧式距离找出最近的k个训练样本中分类最多的标签的K-Nearest Neighbors (KNN)算法。讲解了如何定义和初始化KNN类,以及如何使用sklearn库进行KNN模型训练和预测。重点在于k值的选择和预测阶段的决策过程。
摘要由CSDN通过智能技术生成

原理:返回欧式距离中最近的k个点中 分类数目最多的那个label

#定义一个knn函数:
class Knnclassify:
    def __init__(self,k):
        assert k>0,'error'
        self.k = k
        self._xtrain = None
        self._ytrain = None
    
    def fit(self,xdata,ydata):
        assert xdata.shape[0] == ydata.shape[0],'error'
        assert self.k <= xdata.shape[0],'error'
        
        self._xtrain = xdata
        self._ytrain = ydata
        
        return self
    
    def predict(self,target):
        assert self._xtrain is not None and self._ytrain is not None,'error'
        assert target.shape[1] == self._xtrain.shape[1],'error'
        
        res = [self._predict(i) for i in target]
        return np.array(res)
    
    def _predict(self,x):
        assert x.shape[0] == self._xtrain.shape[1],'error'
        dis = [sqrt(np.sum((i-x)**2)) for i in x_train]
        nearest = np.argsort(dis) 
        top = [y_train[j] for j in nearest[:k]]
        return Counter(top).most_common(1)[0][0]
    
    def __repr__(self):
        return f'knn(k={self.k})'

调用sklearn中封装好的knn:

from sklearn.neighbors import KNeighborsClassifier
#传入k的值
knn_classifier = KNeighborsClassifier(n_neighbors=6)
#传入数据集进行拟合
knn_classifier.fit(x_train,y_train)

#传入目标值,必须是一个矩阵形式
x = np.array([])
knn_classifier.predict(x.reshape(1,-1))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值