python pandas教程百家号_学习Python机器的实战1-KNN

这是一个KNN(K-最近邻)分类器的Python实现。代码中定义了一个KNNClassifier类,包括初始化、训练和预测方法。在训练时,它会保存训练数据;预测时,它计算输入数据与训练数据之间的欧氏距离,找到最近的k个邻居,并根据邻居的标签进行投票以决定预测结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import numpy as np

from math import sqrt

from collections import Counter

class KNNClassifier:

def __init__(self,k):

assert k >= 1 , "k must be valied"

self.k = k

self._X_train = None

self._Y_train = None

def fit(self,X_train,Y_train):

# fit 返回自身,这样调用,就能赋值。

assert X_train.shape[0] == Y_train.shape[0],"the size of X_train mast be equal to the size of Y_train"

assert self.k <= X_train.shape[0] , "the size of X_train must be at least k."

self._X_train = X_train

self._Y_train = Y_train

return self

def predict(self,X_predict):

assert self._X_train is not None and self._Y_train is not None,"must be fit before predict"

assert X_predict.shape[1] == self._X_train.shape[1], "the feature number of X_predict must be equal to X_train"

Y_predict = [self._predict(x) for x in X_predict]

return np.array(Y_predict)

#_私有

def _predict(self,x):

assert self._X_train.shape[1] == x.shape[0]

distances = [sqrt(np.sum((x_train - x) ** 2)) for x_train in self._X_train]

nearest = np.argsort(distances)

topK_y = [self._Y_train[i] for i in nearest[:self.k]]

votes = Counter(topK_y)

return votes.most_common(1)[0][0]

def __repr__(self):

return "KNN(k=%d)" % self.k

import numpy as np

from math import sqrt

from collections import Counter

class KNNClassifier:

def __init__(self,k):

assert k >= 1 , "k must be valied"

self.k = k

self._X_train = None

self._Y_train = None

def fit(self,X_train,Y_train):

# fit 返回自身,这样调用,就能赋值。

assert X_train.shape[0] == Y_train.shape[0],"the size of X_train mast be equal to the size of Y_train"

assert self.k <= X_train.shape[0] , "the size of X_train must be at least k."

self._X_train = X_train

self._Y_train = Y_train

return self

def predict(self,X_predict):

assert self._X_train is not None and self._Y_train is not None,"must be fit before predict"

assert X_predict.shape[1] == self._X_train.shape[1], "the feature number of X_predict must be equal to X_train"

Y_predict = [self._predict(x) for x in X_predict]

return np.array(Y_predict)

#_私有

def _predict(self,x):

assert self._X_train.shape[1] == x.shape[0]

distances = [sqrt(np.sum((x_train - x) ** 2)) for x_train in self._X_train]

nearest = np.argsort(distances)

topK_y = [self._Y_train[i] for i in nearest[:self.k]]

votes = Counter(topK_y)

return votes.most_common(1)[0][0]

def __repr__(self):

return "KNN(k=%d)" % self.k

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值