sklearn中的K-近邻分类使用。

本文介绍了如何利用scikit-learn(sklearn)包进行K-近邻(KNN)分类。首先,文章讲解了如何准备数据集、划分训练测试集以及计算分类器准确率。接着,通过交叉验证评估分类器性能。此外,探讨了不同k值对分类准确率的影响,以及数据归一化的作用。最后,展示了如何使用流水线结构来整合数据预处理和分类步骤。
摘要由CSDN通过智能技术生成

在之前的文章中也介绍了KNN的算法原理,并且完成了两个案例进一步的理解了KNN。这都使用的是自己写的kNN分类器,scikit-learn包在机器学习和数据挖掘中是一个强大的包,其中就包含了许多的算法实现以及实用的功能。而在《Python数据挖掘入门与实践》这本书中,并没有像《机器学习》或者《机器学习实战》中的那样介绍原理或者自己实现某个算法,而是直接使用sklearn(scikit-learn)中的分类器,但是除此之外还介绍了一些实用的功能。下面就基于这本书的一个KNN例子,来简单介绍一下如何使用sklearn这个强大的包。


准备数据集。

书中的例子使用的是UCI机器学习数据库中的电离层数据,这些数据是由高频天线收集的。这些天线的目的是侦测在电离层和高层大气中存不存在由自由电子组成的特殊结构。如果一条数据能给出特殊结构存在的证据,这条数据就属于好的那一类(在数据集中用“g”表示),否则就是坏的(用“b”表示)。

下载下来看一下这些数据:

这里写图片描述

虽然不清楚这些数据代表什么意思,但是不影响我们的后续步骤,只需要知道这是一个351条数据,每条数据有35列,前34列分别代表17座天线采集的数据,每座天线采集两个数据。然后最后一列是代表这个数据是好还是坏,如果是‘g’就是好的,如果是‘b’就是坏的。

我们先将数据读取到矩阵中,设计loadDataSet函数,返回数据集以及对应的标签:

def loadDataSet():
    """
    加载数据集
    :return:
    """
    # 创建一个与数据集相等的矩阵,不包含标签
    x = np.zeros((351, 34), dtype=float)
    # 用来保存标签
    y = np.zeros((351, ), dtype=bool)
    # 加载数据集
    reader = csv.reader(open('ionosphere.data'))

    # 同时获取索引和值
    for i, row in enumerate(reader):
        # 将数据添加到x中
        data = [float(datum) for datum in row[:-1]]
        x[i] = data
        # 等于g设置为1,否则设置为0
        y[i] = row[-1] == 'g'

    return x, y

划分测试数据计算分类器准确率。

准备好数据集之后我们就可以直接调用sklearn中的knn分类器进行分类计算。但是为了能够看出这个分类器的准确率,我们还需要将数据集划分为训练集和测试集,使用训练数据集进行训练分类器,然后使用测试集观察正确率。

划分训练集和测试集可以使用sklearn中的train_test_split。

from sklearn.model_selection import train_test_split

该函数可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值