iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >【python】机器学习-K-近邻(KNN)算法
  • 234
分享到

【python】机器学习-K-近邻(KNN)算法

pythonmatlab机器学习算法 2023-10-22 08:10:46 234人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

         目录 一 . K-近邻算法(KNN)概述  二、KNN算法实现 三、 MATLAB实现 四、 实战 一 . K-近邻算法(KNN)概述          K-近邻算法(KNN)是一种基本的分类算法,它通过计算数据点之

        

目录

一 . K-近邻算法(KNN)概述 

二、KNN算法实现

三、 MATLAB实现

四、 实战


一 . K-近邻算法(KNN)概述 

        K-近邻算法(KNN)是一种基本的分类算法,它通过计算数据点之间的距离来进行分类。在KNN算法中,当我们需要对一个未知数据点进行分类时,它会与训练集中的各个数据点进行特征比较,并找到与之最相似的前K个数据点。然后根据这K个数据点的类别来确定未知数据点所属的类别。

        KNN算法的步骤非常简单: 1)计算未知数据点与训练集中各个数据点之间的距离。常用的距离度量包括欧氏距离和曼哈顿距离。 2)按照距离递增的顺序对数据点进行排序。 3)选择距离最小的K个数据点。 4)根据这K个数据点的类别来确定未知数据点的类别。通常采用多数表决的方式,即统计K个数据点中各个类别出现的次数,将出现次数最多的类别作为未知数据点的预测类别。

        KNN算法的特点是简单易懂,容易实现。它没有显式的训练过程,仅依赖于已有的训练数据。然而,KNN算法的计算复杂度较高,尤其是当训练集很大时。此外,KNN算法还对训练样本的质量和数量敏感,需要合理地选择K值和距离度量方法。

     在KNN中,通过计算对象间距离来作为各个对象之间的非相似性指标,避免了对象之间的匹配问题,在这里距离一般使用欧氏距离或曼哈顿距离:

    

        同时,KNN通过依据k个对象中占优的类别进行决策,而不是单一的对象类别决策。这两点就是KNN算法的优势。

   接下来对KNN算法的思想总结一下:就是在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那个分类,其算法的描述为:

  1. 首先需要收集足够的带有标签的训练数据,这些数据包含了输入特征和相应的输出标签。

  2. 对于输入的测试数据,需要计算它与每个训练数据之间的距离(如欧氏距离、曼哈顿距离等)。

  3. 选取距离测试数据最近的K个训练数据,并统计它们中出现最多的标签类别。

  4. 将测试数据归类为出现次数最多的标签类别。

二、KNN算法实现

        KNN算法的实现通常可以使用python编程语言进行实现

        

import numpy as npclass KNN():    def __init__(self, k=3, distance='euclidean'):        self.k = k        self.distance = distance            def fit(self, X, y):        self.X_train = X        self.y_train = y            def predict(self, X):        y_pred = []        for x in X:            distances = []            for i, x_train in enumerate(self.X_train):                if self.distance == 'euclidean':                    dist = np.linalg.nORM(x - x_train)                elif self.distance == 'manhattan':                    dist = np.sum(np.abs(x - x_train))                distances.append((dist, self.y_train[i]))            distances.sort()            neighbors = distances[:self.k]            classes = {}            for neighbor in neighbors:                if neighbor[1] in classes:                    classes[neighbor[1]] += 1                else:                    classes[neighbor[1]] = 1            max_class = max(classes, key=classes.get)            y_pred.append(max_class)        return y_pred

        这段代码实现了基本的KNN分类算法,包括fit函数进行训练集拟合,predict函数进行预测。其中k参数表示要选择的最近邻居数,distance参数为距离度量方法。在上述示例代码中,欧氏距离和曼哈顿距离两种距离度量方法均已实现。

        通过选择不同的数据集和参数,可以验证KNN算法的分类性能。在实现KNN算法时,还可以采用更加高效的数据结构(如kd树、球树)和距离度量方法等技巧,来对算法进行优化和改进。

三、 MATLAB实现

        

  1. 使用pdist2函数计算欧氏距离,而不是手动计算,可以极大地提高计算速度。

  2. 在计算距离之后,直接利用sort函数进行排序,并选择前k个最近邻。这样可以简化代码,并且使用向量化计算,计算速度更快。

  3. 使用mode函数求取邻居中出现次数最多的类别作为预测结果,并且使用2维输入方式保证正确性。

function y_pred = knn(X_train, y_train, X_test, k)    n_train = size(X_train, 1);    n_test = size(X_test, 1);    y_pred = zeros(n_test, 1);    % 计算欧氏距离    distances = pdist2(X_train, X_test);        % 选择前k个最近邻    [~, indices] = sort(distances);    neighbors = y_train(indices(1:k,:));        % 使用投票法预测标签    y_pred = mode(neighbors, 1)';end

四、 实战

     在这里根据一个人收集的约会数据,根据主要的样本特征以及得到的分类,对一些未知类别的数据进行分类,大致就是这样。 

     我使用的是Python 3.4.3,首先建立一个文件,例如date.py,具体的代码如下:

#coding:utf-8from numpy import *import operatorfrom collections import Counterimport matplotlibimport matplotlib.pyplot as plt###导入特征数据def file2matrix(filename):    fr = open(filename)    contain = fr.readlines()###读取文件的所有内容    count = len(contain)    returnMat = zeros((count,3))    classLabelVector = []    index = 0    for line in contain:        line = line.strip() ###截取所有的回车字符        listFromLine = line.split('\t')        returnMat[index,:] = listFromLine[0:3]###选取前三个元素,存储在特征矩阵中        classLabelVector.append(listFromLine[-1])###将列表的最后一列存储到向量classLabelVector中        index += 1        ##将列表的最后一列由字符串转化为数字,便于以后的计算    dictClassLabel = Counter(classLabelVector)    classLabel = []    kind = list(dictClassLabel)    for item in classLabelVector:        if item == kind[0]:            item = 1        elif item == kind[1]:            item = 2        else:            item = 3        classLabel.append(item)    return returnMat,classLabel#####将文本中的数据导入到列表##绘图(可以直观的表示出各特征对分类结果的影响程度)datingDataMat,datingLabels = file2matrix('D:\python\Mechine learing in Action\KNN\datingTestSet.txt')fig = plt.figure()ax = fig.add_subplot(111)ax.scatter(datingDataMat[:,0],datingDataMat[:,1],15.0*array(datingLabels),15.0*array(datingLabels))plt.show()## 归一化数据,保证特征等权重def autoNorm(dataSet):    minVals = dataSet.min(0)    maxVals = dataSet.max(0)    ranges = maxVals - minVals    normDataSet = zeros(shape(dataSet))##建立与dataSet结构一样的矩阵    m = dataSet.shape[0]    for i in range(1,m):        normDataSet[i,:] = (dataSet[i,:] - minVals) / ranges    return normDataSet,ranges,minVals##KNN算法def classify(input,dataSet,label,k):    dataSize = dataSet.shape[0]    ####计算欧式距离    diff = tile(input,(dataSize,1)) - dataSet    sqdiff = diff ** 2    squareDist = sum(sqdiff,axis = 1)###行向量分别相加,从而得到新的一个行向量    dist = squareDist ** 0.5        ##对距离进行排序    sortedDistIndex = argsort(dist)##argsort()根据元素的值从大到小对元素进行排序,返回下标    classCount={}    for i in range(k):        voteLabel = label[sortedDistIndex[i]]        ###对选取的K个样本所属的类别个数进行统计        classCount[voteLabel] = classCount.get(voteLabel,0) + 1    ###选取出现的类别次数最多的类别    maxCount = 0    for key,value in classCount.items():        if value > maxCount:            maxCount = value            classes = key    return classes##测试(选取10%测试)def datingTest():    rate = 0.10    datingDataMat,datingLabels = file2matrix('D:\python\Mechine learing in Action\KNN\datingTestSet.txt')    normMat,ranges,minVals = autoNorm(datingDataMat)    m = normMat.shape[0]    testNum = int(m * rate)    errorCount = 0.0    for i in range(1,testNum):        classifyResult = classify(normMat[i,:],normMat[testNum:m,:],datingLabels[testNum:m],3)        print("分类后的结果为:,", classifyResult)        print("原结果为:",datingLabels[i])        if(classifyResult != datingLabels[i]):      errorCount += 1.0    print("误分率为:",(errorCount/float(testNum)))      ###预测函数def classifyPerson():    resultList = ['一点也不喜欢','有一丢丢喜欢','灰常喜欢']    percentTats = float(input("玩视频所占的时间比?"))    miles = float(input("每年获得的飞行常客里程数?"))    iceCream = float(input("每周所消费的冰淇淋公升数?"))    datingDataMat,datingLabels = file2matrix('D:\python\Mechine learing in Action\KNN\datingTestSet2.txt')    normMat,ranges,minVals = autoNorm(datingDataMat)    inArr = array([miles,percentTats,iceCream])    classifierResult = classify((inArr-minVals)/ranges,normMat,datingLabels,3)    print("你对这个人的喜欢程度:",resultList[classifierResult - 1])

新建test.py文件了解程序的运行结果,代码:

#coding:utf-8from numpy import *import operatorfrom collections import Counterimport matplotlibimport matplotlib.pyplot as pltimport syssys.path.append("D:\python\Mechine learing in Action\KNN")import datedate.classifyPerson()

来源地址:https://blog.csdn.net/m0_73367097/article/details/133957979

--结束END--

本文标题: 【python】机器学习-K-近邻(KNN)算法

本文链接: https://www.lsjlt.com/news/435947.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 【python】机器学习-K-近邻(KNN)算法
             目录 一 . K-近邻算法(KNN)概述  二、KNN算法实现 三、 MATLAB实现 四、 实战 一 . K-近邻算法(KNN)概述          K-近邻算法(KNN)是一种基本的分类算法,它通过计算数据点之...
    99+
    2023-10-22
    python matlab 机器学习 算法
  • python机器学习基础K近邻算法详解KNN
    目录一、k-近邻算法原理及API1.k-近邻算法原理2.k-近邻算法API3.k-近邻算法特点二、k-近邻算法案例分析案例信息概述第一部分:处理数据1.数据量缩小2.处理时间3.进一...
    99+
    2024-04-02
  • Python机器学习之KNN近邻算法
    目录一、KNN概述二、使用Python导入数据三、numpy.array()四、实施KNN分类算法五、计算已知类别数据集中的点与当前点之间的距离六、完整代码七、数据处理、分析、测试八...
    99+
    2024-04-02
  • Python机器学习k-近邻算法怎么实现
    这篇文章主要介绍“Python机器学习k-近邻算法怎么实现”,在日常操作中,相信很多人在Python机器学习k-近邻算法怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python机器学习k-近邻算法怎...
    99+
    2023-06-21
  • Python机器学习实战之k-近邻算法的实现
    目录K-近邻算法概述工作原理实施KNN算法示例:手写识别系统K-近邻算法概述 简单地说, k-近邻算法采用测量不同特征值之间的距离方法进行分类。 k-近邻算法 优点:精度高...
    99+
    2024-04-02
  • Python sklearn转换器估计器和K-近邻算法
    目录一、转换器和估计器1. 转换器2.估计器(sklearn机器学习算法的实现)3.估计器工作流程二、K-近邻算法1.K-近邻算法(KNN)2. 定义3. 距离公式三、电影类型分析1...
    99+
    2024-04-02
  • python基础中K近邻算法是怎样的
    python基础中K近邻算法是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、k-近邻算法原理及API1.k-近邻算法原理如果一个样本在特征空间中的k个最相似(即特征空...
    99+
    2023-06-25
  • Python实现K-近邻算法的示例代码
    目录一、介绍二、k-近邻算法的步骤三、Python 实现四、约会网站配对效果判定五、手写数字识别六、算法优缺点优点缺点一、介绍 k-近邻算法(K-Nearest Neighbour ...
    99+
    2024-04-02
  • 机器学习_K近邻Python代码详解
    k近邻优点:精度高、对异常值不敏感、无数据输入假定;k近邻缺点:计算复杂度高、空间复杂度高import numpy as npimport operatorfrom os import listdir# k近邻分类器def classify...
    99+
    2023-01-30
    近邻 详解 机器
  • Ignite中如何使用k-最近邻分类算法
    Ignite中如何使用k-最近邻分类算法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先,要获取原始数据并将其拆分成训练数据(60%)和测试数据(40%)。然后再次使用S...
    99+
    2023-06-19
  • Python机器学习之手写KNN算法预测城市空气质量
    目录一、KNN算法简介二、KNN算法实现思路三、KNN算法预测城市空气质量1. 获取数据2. 生成测试集和训练集3. 实现KNN算法一、KNN算法简介 KNN(K-Nearest N...
    99+
    2024-04-02
  • 使用K近邻算法与CSS动态字体加密后Python怎么反爬虫
    本篇内容主要讲解“使用K近邻算法与CSS动态字体加密后Python怎么反爬虫”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“使用K近邻算法与CSS动态字体加密后Python怎么反爬虫”吧!  1....
    99+
    2023-06-02
  • Python怎么用scikit-learn实现近邻算法分类
    今天小编给大家分享一下Python怎么用scikit-learn实现近邻算法分类的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧...
    99+
    2023-07-05
  • 机器学习——线性回归-KNN-决策树(实
    1 import numpy as np 2 import pandas as pd 3 from sklearn.linear_model import LinearRegression 4 from sklearn.preproc...
    99+
    2023-01-30
    线性 机器 决策树
  • (机器学习)——使用KNN进行水果分类
    (机器学习)——使用KNN进行水果分类(详解) 实验目标是:导入素材文件fruit_data.txt,使用SKlearn中的neighbors模块对水果数据进行分类,然后预测A、B两种水果的类别。 以...
    99+
    2023-10-26
    分类 python
  • 【数据科学系统学习】机器学习算法 #
    本篇内容为《机器学习实战》第 6 章 支持向量机部分程序清单。所用代码为 python3。 支持向量机优点:泛化错误率低,计算开销不大,结果易解释。 缺点:对参数调节和核函数的选择敏感,原始分类器不加修改仅适用于处理二分类问题。适用数据...
    99+
    2023-01-31
    算法 机器 科学
  • Python实现机器学习算法的分类
    Python算法的分类 对葡萄酒数据集进行测试,由于数据集是多分类且数据的样本分布不平衡,所以直接对数据测试,效果不理想。所以使用SMOTE过采样对数据进行处理,对数据去重,去空,处...
    99+
    2024-04-02
  • Python机器学习入门(五)之Python算法审查
    目录1.审查分类算法1.1线性算法审查1.1.1逻辑回归1.1.2线性判别分析1.2非线性算法审查1.2.1K近邻算法1.2.2贝叶斯分类器1.2.3分类与回归树1.2.4支持向量机...
    99+
    2024-04-02
  • 【机器学习】DBSCAN聚类算法(含Python实现)
    文章目录 一、算法介绍二、例子三、Python实现3.1 例13.2 算法参数详解3.3 鸢尾花数据集 一、算法介绍 DBSCAN(Density-Based Spatial Clus...
    99+
    2023-10-01
    聚类 机器学习 python BBSCAN
  • Python利用scikit-learn实现近邻算法分类的示例详解
    scikit-learn库 scikit-learn已经封装好很多数据挖掘的算法 现介绍数据挖掘框架的搭建方法 1.转换器(Transformer)用于数据预处理,数据转换 2.流水...
    99+
    2023-02-28
    Python scikit-learn近邻算法分类 Python 近邻算法分类 Python scikit-learn
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作