【机器学习笔记】KNN

简介

KNN,监督学习模型,支持分类与回归任务,通过定义距离方式,找到距离目标点最近的K个邻居,取它们的target均值或众数作为目标点target的预测值;

距离

  1. 欧式距离(L2范数):在这里插入图片描述

  2. 曼哈顿距离(L1范数):
    在这里插入图片描述

  3. 切比雪夫距离:
    在这里插入图片描述

  4. 闵可夫斯基距离:
    在这里插入图片描述

  5. 其他:余弦距离、汉明文本距离、杰卡德距离、马氏距离等;

K值选取

一般通过kfold交叉验证去选择一个表现最好且稳定的K;

sklearn实战

重要参数

class sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=1):
	# n_neighbors		最近邻样本数量	默认为5;
	# weights			最近邻样本权重	"uniform"均权, "distance"权重与距离成反比;
	# metric			距离计算方式		默认闵可夫斯基距离;
	# p					距离计算方式		1为曼哈顿距离,2为欧式距离,趋近无穷大则为切比雪夫距离;
	# n_jobs			并行处理任务数	-1则所有cpu参与计算;
class sklearn.neighbors.KNeighborsRegressor(n_neighbors=5, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=1):
	# 同上;

分类与回归任务

# 分类任务
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split 

# 威斯康星-乳腺癌数据
data = datasets.load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(data["data"], data["target"], test_size=0.3, random_state=41)

# KNN分类
model = KNeighborsClassifier()
model.fit(X_train, y_train)
print("train acc: ", model.score(X_train, y_train))
print("test acc: ", model.score(X_test, y_test))
# 回归任务
from sklearn import datasets
from sklearn.neighbors import KNeighborsRegressor
from sklearn.model_selection import train_test_split 

# 糖尿病数据
data = datasets.load_diabetes()
X_train, X_test, y_train, y_test = train_test_split(data["data"], data["target"], test_size=0.3, random_state=42)

# KNN回归
model = KNeighborsRegressor()
model.fit(X_train, y_train)
print("train loss: ", model.score(X_train, y_train))
print("test loss: ", model.score(X_test, y_test))

优缺点

  1. 优点:算法简单,对分类回归任务均可支持,对异常值不敏感;
  2. 缺点:距离计算空间复杂度高、分类任务容易受到不均衡样本集影响;

参考

https://blog.csdn.net/itcast_cn/article/details/125186202
https://blog.csdn.net/qq_25990967/article/details/122748881
https://blog.csdn.net/weixin_39345735/article/details/105014581

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值