一、KNN 简介
KNN:K-近邻算法 (K Nearest Neighbor)
算法思想:一个样本最相似的 k 个样本中的大多数属于某一个类别,则该样本也属于这个类别
距离计算:欧氏距离
二、KNN 解决两类问题
分类问题与回归问题
分类流程:
- 计算未知样本到每一个训练样本的距离
- 将训练样本根据距离大小升序排列
- 取出距离最近的 K 个训练样本
- 进行多数表决,统计 K 个样本中哪个类别的样本个数最多
- 将未知的样本归属到出现次数最多的类别
回归流程:
- 计算未知样本到每一个训练样本的距离(欧式距离:对应维度差值的平方和 开平方根)
- 将训练样本根据距离大小升序排列
- 取出距离最近的 K 个训练样本
- 把这个 K 个样本的目标值计算其平均值
- 作为将未知的样本预测的值
其中K值的选择:需要一些方法来寻找这个最合适的K值 交叉验证、网格搜索
- K值过小 ,过拟合,容易受到异常点的影响,整体模型变得复杂
- K值过大 ,欠拟合,整体的模型变得简单
三 、KNN算法API的使用
首先机器学习的开发环境,安装:基于Python的 scikit-learn 库
分类问题与回归问题
分类问题
'''
分类问题
KNN算法 代码实现步骤
1:导包
2:创建模型对象
3:准备训练集
4:准备测试集
5:模型训练
6:模型预测,并打印结果
'''
# 1:导包
from sklearn.neighbors import KNeighborsClassifier
#2:创建模型对象
estimator = KNeighborsClassifier(3)
#3、准备训练集 列表嵌套 二维 [样本数量,特征数量]
#外层列表 样本数 4个
#内层列表 特征数量 1列
x_train = [[0], [1], [2], [3]]
#一维的 [样本数量] 4个
y_train = [0, 0, 0, 1]
#4、准备测试集 易错点2:注意这里x_test是二维的
x_test = [[4]]
#5、模型训练
#参1:训练集特征 参2:训练集标签
estimator.fit(x_train, y_train)
#6、模型预测
y_test = estimator.predict(x_test)
#打印结果
print(y_test)
回归问题
'''回归问题'''
#1、导包
from sklearn.neighbors import KNeighborsRegressor
#2、创建模型(算法)对象 注意!!这里是回归问题
estimator = KNeighborsRegressor(2)
#3、准备训练集
x_train = [[0, 0, 1],
[1, 1, 0],
[3, 10, 10],
[4, 11, 12]]
y_train = [0.1, 0.2, 0.3, 0.4]
#4、测试集(x_test)
x_test = [[3, 11, 10]]
#5、模型训练
estimator.fit(x_train, y_train)
#6、模型预测(y_test)
y_test = estimator.predict(x_test)
#打印结果
print(y_test)