scikit-learn的使用_04 KNN算法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

KNN算法简单说就是一种分类方法,它的依据是以数据周围点的大多数类型来作为判断依据。

一、KNN是什么?

KNN,即K-Nearest Neighbors(K最近邻)算法,是一种基础且广泛应用的分类与回归算法。其核心思想是:一个样本的标签通常由与其最近的K个邻居的标签决定,这些邻居是在特征空间中与该样本距离最近的K个样本点。

二、简单应用

1.应用于鸢尾花数据集

代码如下(示例):

from sklearn.datasets import load_iris  # 导入iris数据集  
from sklearn.model_selection import train_test_split  # 导入用于分割数据集的函数  
from sklearn.preprocessing import StandardScaler  # 导入用于数据标准化的类  
from sklearn.neighbors import KNeighborsClassifier  # 导入K近邻分类器  
  
if __name__ == '__main__':  
      
    # 加载iris数据集  
    iris = load_iris()  
      
    # 分割数据集为训练集和测试集,random_state=0确保每次分割结果一致  
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=0)  
      
    # 初始化StandardScaler对象,用于数据标准化  
    sc = StandardScaler()  
      
    # 对训练集进行拟合和转换  
    x_train = sc.fit_transform(x_train)  
      
    # 对测试集进行转换,使用训练集的均值和标准差  
    x_test = sc.transform(x_test)  
      
    # 初始化KNeighborsClassifier对象,设置邻居数量为3  
    KNeighborsClassifier = KNeighborsClassifier(n_neighbors=3)  
      
    # 使用训练集数据训练K近邻分类器  
    KNeighborsClassifier.fit(x_train, y_train)  
      
    # 使用训练好的分类器对测试集进行预测  
    y_pred = KNeighborsClassifier.predict(x_test)  
      
    # 打印预测结果  
    print(y_pred)  
      
    # 打印预测结果与实际测试集标签的比较  
    print(y_test == y_pred)  
      
    # 计算并打印分类器在测试集上的准确率  
    score = KNeighborsClassifier.score(x_test, y_test)  
    print(score)

2.注意事项

1-----iris.data和iris.target分别是数据集的特征(Features)和目标(Target),
特征是用于描述数据集中每个样本的属性或变量。在鸢尾花(Iris)数据集中,特征可能包括花瓣的长度、花瓣的宽度、花萼的长度和花萼的宽度等。这些特征是用来帮助模型识别或预测鸢尾花种类的依据。
目标是数据集中每个样本的标签或结果,是模型需要预测或分类的值。在鸢尾花数据集中,目标就是鸢尾花的种类,比如Setosa、Versicolour或Virginica。

2------KNeighborsClassifier = KNeighborsClassifier(n_neighbors=3):
这行代码创建了一个KNeighborsClassifier的实例,并通过参数n_neighbors=3指定了邻居的数量为3。这意味着在进行分类时,算法将考虑距离查询点最近的3个邻居。

3------fit_transform方法:这个方法首先计算训练集x_train的缩放参数(比如均值和标准差,如果是标准化的话),然后使用这些参数来转换训练集数据。因此,fit_transform既计算了参数也应用了转换。
--------transform方法:这个方法只应用已经计算好的缩放参数来转换数据。在x_test上使用transform意味着我们使用与训练集相同的缩放参数来转换测试集,这是为了确保模型在训练和测试时看到的是一致的数据分布。
--------如果你对x_test使用fit_transform,那么你会为测试集计算一组新的缩放参数,这通常是不希望发生的,因为这样会引入数据泄露(即测试集的信息被不当地用在了模型训练中),并且可能导致模型在测试集上的表现过于乐观(过拟合)。

因此,正确的做法是使用fit_transform来拟合并转换训练集,然后使用transform来仅转换测试集,确保两者使用相同的缩放参数。

4-----调整K值n_neighbors和random值来观察精确度的改变。

3.程序运行结果

[2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 1 1 0 0 2 1 0 0 2 0 0 1 1 0 2 1 0 2 2 1 0
 2]
[ True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True False]
0.9736842105263158

其中True是正确,可见精度还是比较高的

总结

这段代码是一个完整的机器学习流程,使用了K近邻算法(KNN)对鸢尾花(Iris)数据集进行分类。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值