K-近邻算法笔记

本文深入介绍了K-近邻算法,包括其原理、距离度量方法(如欧式距离、曼哈顿距离等)以及k值选择的影响。提到了kd树在搜索中的作用,并展示了使用sklearn库实现KNN的步骤。通过鸢尾花数据集演示了特征预处理(如归一化、标准化)及模型训练和评估的完整流程。

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

1.K-近邻算法

1.1 K-近邻算法简介

​ 1.定义:
​ 就是通过你的"邻居"来判断你属于哪个类别
​ 2.如何计算你到你的"邻居"的距离
​ 一般时候,都是使用欧氏距离

1.2 k近邻算法api初步使用

​ 1.sklearn
​ 优势:
​ 1.文档多,且规范,
​ 2.包含的算法多
​ 3.实现起来容易
​ 2.sklearn中包含内容
​ 分类、聚类、回归
​ 特征工程
​ 模型选择、调优
​ 3.knn中的api
​ sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)
​ 参数:
​ n_neighbors – 选定参考几个邻居
​ 4.机器学习中实现的过程
​ 1.实例化一个估计器
​ 2.使用fit方法进行训练

1.3 距离度量[###]

​ 1.欧式距离
​ 通过距离平方值进行计算
​ 2.曼哈顿距离(Manhattan Distance):
​ 通过举例的绝对值进行计算
​ 3.切比雪夫距离 (Chebyshev Distance):
​ 维度的最大值进行计算
​ 4.闵可夫斯基距离(Minkowski Distance):
​ 当p=1时,就是曼哈顿距离;
​ 当p=2时,就是欧氏距离;
​ 当p→∞时,就是切比雪夫距离。
​ 小结:前面四个距离公式都是把单位相同看待了,所以计算过程不是很科学

5.标准化欧氏距离 (Standardized EuclideanDistance):
    在计算过程中添加了标准差,对量刚数据进行处理
6.余弦距离(Cosine Distance)
    通过cos思想完成
7.汉明距离(Hamming Distance)【了解】:
    一个字符串到另一个字符串需要变换几个字母,进行统计
8.杰卡德距离(Jaccard Distance)【了解】:
    通过交并集进行统计
9.马氏距离(Mahalanobis Distance)【了解】
    通过样本分布进行计算

1.4 k值选择[***]

​ K值过小:
​ 容易受到异常点的影响
​ 过拟合
​ k值过大:
​ 受到样本均衡的问题
​ 欠拟合
​ 拓展:
​ 近似误差 – 过拟合 --在训练集上表现好,测试集表现不好
​ 估计误差好才是真的好!

1.5 kd树[###]

​ 1.构建树
​ 2.最近领域搜索
​ 案例:
​ 一,构建树
​ 第一次:
​ x轴-- 2,5,9,4,8,7 --> 2,4,5,7,8,9
​ y轴-- 3,4,6,7,1,2 --> 1,2,3,4,6,7

    首先选择x轴, 找中间点,发现是(7,2)

    第二次:
    左面: (2,3), [4,7], [5,4] --> 3,4,7
    右面: (8,1), (9,6) --> 1,6

    从y轴开始选择, 左边选择点是(5,4),右边选择点(9,6)

    第三次:
    从x轴开始选择

二,搜索
    1.在本域内,没有进行跨域搜索
    2.要跨到其他域搜索

1.6 案例:鸢尾花种类预测–数据集介绍[]

​ 1.获取数据集
​ sklearn.datasets.
​ 小数据:
​ sklearn.datasets.load_*
​ 注意:
​ 该数据从本地获取
​ 大数据集:
​ sklearn.datasets.fetch_*
​ 注意:
​ 该数据从网上下载
​ subset–表示获取到的数据集类型:train test all
​ 2.数据集返回值介绍
​ 返回值类型是bunch–是一个字典类型
​ 返回值的属性:
​ data:特征数据数组
​ target:标签(目标)数组
​ DESCR:数据描述
​ feature_names:特征名,
​ target_names:标签(目标值)名
​ 3.数据可视化
​ import seaborn
​ seaborn.lmplot()
​ 参数
​ x,y – 具体x轴,y轴数据的索引值
​ data – 具体数据
​ hue – 目标值是什么
​ fit_reg – 是否进行线性拟合
​ 4.数据集的划分
​ api:
​ sklearn.model_selection.train_test_split(arrays, *options)
​ 参数:
​ x – 特征值
​ y – 目标值
​ test_size – 测试集大小
​ ramdom_state – 随机数种子
​ 返回值:
​ x_train, x_test, y_train, y_test

1.7 特征工程-特征预处理[]

​ 1.定义
​ 通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程
​ 2.包含内容:
​ 归一化*

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zcI59biH-1635670119099)(F:\笔记\MarkDown\人工智能\picture\归一化公式.png)]

​ 标准化

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cssC0UBv-1635670119104)(F:\笔记\MarkDown\人工智能\picture\标准化公式.png)]

​ 3.api
​ sklearn.preprocessing
​ 4.归一化
​ 定义:
​ 对原始数据进行变换把数据映射到(默认为[0,1])之间
​ api:
​ sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… )
​ 参数:
​ feature_range – 自己指定范围,默认0-1
​ 总结:
​ 鲁棒性比较差(容易受到异常点的影响)
​ 只适合传统精确小数据场景(以后不会用你了)
​ 5.标准化
​ 定义:
​ 对原始数据进行变换把数据变换到均值为0,标准差为1范围内
​ api:
​ sklearn.preprocessing.StandardScaler( )
​ 总结:
​ 异常值影响小
​ 适合现代嘈杂大数据场景(以后就是用你了)

1.8 案例:鸢尾花种类预测—流程实现[***]

​ 1.api
​ sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm=‘auto’)
​ algorithm – 选择什么样的算法进行计算
​ auto,ball_tree, kd_tree, brute
​ 2.案例流程
​ 1.获取数据集

load_iris()

​ 2.数据基本处理

train_test_split()

​ 3.特征工程

# 归一化
MinMaxScaler()
# 标准化
StandardScaler()

​ 4.机器学习(模型训练)

KNeighborsClassifier(n_neighbors=5).fit(x_train,y_train)

​ 5.模型评估

# 预测
estimator.predict(x_test)
# 输出准确率
estimator.score(x_test,y_test)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值