机器学习-5.k-近邻算法(knn)(代码片段)

wyply115 wyply115     2022-12-06     248

关键词:

1. 定义

  • 定义:所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居), 这K个实例的多数属于某个类,就把该输入实例分类到这个类中。
  • 白话来讲就是通过你的“邻居”来推断你的类别。
  • 上述概念中讲最临近,那如何求最临近?也就是如何求距离?
  • 两个样本的距离可通过如下公式进行计算,又叫做欧式距离。
  • 比如说,a(a1,a2,a3),b(b1,b2,b3),则:
    欧 式 距 离 = ( a 1 − b 1 ) 2 + ( a 2 − b 2 ) 2 + ( a 3 − b 3 ) 2 欧式距离 = \\sqrt(a1-b1)^2 + (a2-b2)^2 + (a3-b3)^2 =(a1b1)2+(a2b2)2+(a3b3)2
  • 由上述公式看出有平方和平方根,因此在计算距离时需要做标准化处理
  • API:sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm=‘auto’)
  1. n_neighbors:int,可选(默认=5),k_neighbors查询默认使用的邻居数。
  2. algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’},可选用于计算最近邻居的算法,ball_tree将会使用BallTree;kd_tree将使用KDTree;auto将尝试根据传递给fit方法的值来决定最合适的算法。(不同实现方式影响效率,一般auto即可。)

2. 案例

  • 案例:facebook和kaggle推出的一项竞赛题,根据提供的数据预测入驻签到位置。
  • 数据可从:https://www.kaggle.com/c/facebook-v-predicting-check-ins/data 中下载test.csv和train.csv。官网上可以看到竞赛最高分数:0.62279。当然这里仅演示knn算法,目的不是如何分析得出高分。
  • 数据的结构:

    如上,row_id:签入事件的id;x y :坐标; acuracy:定位精度即误差;time:时间戳;place_id:业务id,预测的目标值。
  • 分析:row_id 和预测的入住位置没有关系。xy坐标、acuracy精度、时间戳对预测入住位置都会有影响,可以作为特征值。place_id是目标值,有特征值和目标值,可以做监督学习,由于预测目标值是离散数据,属于分类问题。这里讲knn算法,因此在这里就用knn算法了。
  • 特征值:xy坐标、acuracy、时间戳(一般需要进行处理,这里处理为年、月、日、周、时分秒,当作新特征)
  • 目标值:place_id,类别太多,降低了准确性,可以将制定签到人数的位置删除(比如一个酒店一年就入驻3人,就没必要要了)
  • 数据展示如下:
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
import pandas as pd

def knncls():
    '''
    k近邻预测用户签到位置
    开发流程:
    1. 数据的基本处理(读取数据、处理数据、分割数据集)
    2. 特征工程(标准化)
    3. 建立模型(这里演示用knn算法)
    4. 模型评估(计算得分)
    :return: None
    '''

    # 读取数据
    data = pd.read_csv("./data/train.csv")

    # 处理数据
    # 1.缩小数据(数据较多,如果运行太慢,为了方便演示可以缩小下数据)
    data = data.query("x>1.0 & x<1.25 & y>2.5 & y<2.75")

    # 2. 处理时间
    train_time_value = pd.to_datetime(data['time'],unit="s") # 返回格式是:1970-01-01 22:25:01
    # 3. 把时间转换为字典格式
    train_time_value = pd.DatetimeIndex(train_time_value)

    # 根据时间戳构造新特征
    data['day'] = train_time_value.day
    data['hour'] = train_time_value.hour
    data['weekday'] = train_time_value.weekday

    # 把签到数量少于n个的位置删除,先分组统计数量,然后保留>n个的,最后根据保留的place_id将data里多余的删除
    place_count = data.groupby('place_id').count()
    tf = place_count[place_count.row_id > 3].reset_index()
    data = data[data['place_id'].isin(tf.place_id)]

    # 删除无用的特征,时间戳和row_id
    data = data.drop(['time'], axis=1)  # pandas中1表示列,和sklearn中正好相反
    data = data.drop(['row_id'], axis=1)

    # 取出数据中的特征值x和目标值y
    y = data['place_id']
    x = data.drop(['place_id'],axis=1)

    # 进行数据的分割成一部分训练集和测试集
    # 0.25是测试集的保留比例,返回:训练特征值、测试特征值、训练目标值、测试目标值
    x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25)

    # 特征工程(标准化)
    std = StandardScaler()
    # 对测试集和训练集的特征值进行标准化
    x_train = std.fit_transform(x_train)
    x_test = std.fit_transform(x_test)

    # 进行算法预测
    knn = KNeighborsClassifier(n_neighbors=5)
    knn.fit(x_train,y_train)
    y_predict = knn.predict(x_test) # 预测出的目标值
    print("预测的准确率:", knn.score(x_test,y_test))

    return None


if __name__ == '__main__':
    knncls()
  • 输出结果:预测的准确率: 0.474468085106383

3. 总结

  • knn算法中的k值取值多少合适,有什么影响?
  1. k值取很小时:容易受异常点影响
  2. k值取很大时:容易受k值数量(类别)波动
  • knn算法优点:简单易于理解,易于实现,无需估计参数(算法内的参数),无需训练。
  • 缺点
  1. 懒惰算法,对测试样本分类时的计算量大,内存开销大。
  2. 必须指定k值,k值取值不当时分类精度不能保证。
  • 适用场景:小数据场景,几千到几万样本,具体场景具体去测试看效果。

机器学习-k-近邻算法(代码片段)

...邻算法(k-nearestneighborsalgorithm),又称为KNN算法,是这学期机器学习课教的第一个算法,也是我接触的第一个机器学习算法。学习之后的感触便是:机器学习和我想象的有点不一样KNN是真滴简单(? ̄△ ̄)?算法介绍KNN属于有监督的分... 查看详情

机器学习实战☛k-近邻算法(k-nearestneighbor,knn)(代码片段)

机器学习实战☛k-近邻算法(K-NearestNeighbor,KNN)文章目录机器学习实战☛k-近邻算法(K-NearestNeighbor,KNN)k-近邻算法概述原理简介k-近邻算法一般流程伪代码与实现示例:使用kNN改进约会网站的配对效... 查看详情

机器学习机器学习分类算法--k近邻算法knn(下)(代码片段)

六、网格搜索与K邻近算法中更多的超参数七、数据归一化FeatureScaling解决方案:将所有的数据映射到同一尺度      八、scikit-learn中的Scalerpreprocessing.pyimportnumpyasnpclassStandardScaler:def__init__(self):self.mean_=None 查看详情

机器学习实战task1(knn)k近邻算法的应用(代码片段)

...算法的简介k-近邻算法是属于一个非常有效且易于掌握的机器学习算法,简单的说就是采用测量不同特征值之间距离的方法对数据进行分类的一个算法。(2)k近邻算法的工作原理给定一个样本的集合,这里称为训... 查看详情

转:机器学习算法原理解析-分类(代码片段)

...KNN概述K最近邻(k-NearestNeighbor,KNN)分类算法是最简单的机器学习算法。KNN算法的指导思想是“近 查看详情

机器学习算法之knn最近邻详解和python实现(代码片段)

作者:RayChiu_Labloy版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处目录概念KNN相关的三个事情 1.K值的确定2.距离的度量计算距离注意一定要做数据缩放:归一化和标准化3.... 查看详情

机器学习k-近邻算法(代码片段)

目录1K-近邻算法简介2K-近邻算法(KNN)2.1定义2.2距离公式3电影类型分析3.1问题3.2K-近邻算法数据的特征工程处理4K-近邻算法API5案例:预测签到位置5.1分析5.2代码5.3结果分析6K-近邻总结1K-近邻算法简介目标说明K-近邻算法的距离... 查看详情

机器学习(算法篇)——k-近邻算法(代码片段)

...法简介K-近邻算法(KNN)概念实现流程k近邻算法api初步使用机器学习流程:Scikit-learn工具介绍Scikit-learn包含的内容K-近邻算法API距离度量欧式距离(EuclideanDistance)曼哈顿距离(ManhattanDistance)切比雪夫距离(ChebyshevDistance)闵可夫斯基距... 查看详情

机器学习-knn算法(代码片段)

从KNN算法步入机器学习殿堂本文中介绍的机器学习算法中的一种监督学习的算法:KNN算法,全称是K-NearestNeighbor,中文称之为K近邻算法。它是机器学习可以说是最简单的分类算法之一,同时也是最常用的分类算法... 查看详情

《机器学习实战》-k近邻算法(代码片段)

目录K-近邻算法k-近邻算法概述解析和导入数据使用Python导入数据实施kNN分类算法测试分类器使用k-近邻算法改进约会网站的配对效果收集数据准备数据:使用Python解析文本文件分析数据:使用Matplotlib画二维散点图准备数据:归... 查看详情

机器学习-knn算法(代码片段)

...K最近邻(k-NearestNeighbor,KNN)分类算法可以说是最简单的机器学习算法了。它采用测量不同特征值之间的距离方法进行分类。它的思想很简单:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数... 查看详情

机器学习算法:基于horse-colic数据的knn近邻(k-nearestneighbors)预测分类(代码片段)

机器学习算法(三):基于horse-colic数据的KNN近邻(k-nearestneighbors)预测分类机器学习算法(三):基于horse-colic数据的KNN近邻(k-nearestneighbors)预测分类项目链接参考:https://www.heywhale.com/home/column/64141d6b1c8c8b518ba97dcc1KNN的介绍和应用1.... 查看详情

机器学习算法原理解析——分类(代码片段)

...KNN概述K最近邻(k-NearestNeighbor,KNN)分类算法是最简单的机器学习算法。KNN算法的指导思想是“近朱者赤,近墨者黑”,由你的邻居来推断你的类型。本质上,KNN算法就是用距离来衡量样本之间的相似度。1.2算法图示从训... 查看详情

监督学习算法_k-近邻(knn)分类算法_源代码

因为自己想学着去写机器学习的源码,所以我最近在学习《机器学习实战》这本书。《机器学习实战》是利用Python2完成的机器学习算法的源代码,并利用机器学习方法来对实际问题进行分析与处理。(《机器学习实战》豆瓣读... 查看详情

《机器学习实战》读书笔记2:k-近邻(knn)算法

声明:文章是读书笔记,所以必然有大部分内容出自《机器学习实战》。外加个人的理解,另外修改了部分代码,并添加了注释1、什么是K-近邻算法?简单地说,k-近邻算法采用测量不同特征值之间距离的方法进行分类。不恰当... 查看详情

机器学习k近邻算法鸢尾花种类预测(代码片段)

目录1再识K-近邻算法API2案例:鸢尾花种类预测2.1数据集介绍2.2步骤分析2.3代码过程3案例小结4KNN算法总结4.1k近邻算法优缺点汇总1再识K-近邻算法APIsklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm=‘auto’)n_neighbors:i... 查看详情

机器学习之knn(k近邻)算法(代码片段)

1、算法介绍k近邻算法是学习机器学习的入门算法,可实现分类与回归,属于监督学习的一种。算法的工作原理是:输入一个训练数据集,训练数据集包括特征空间的点和点的类别,可以是二分类或是多分类。预测时,输入没有... 查看详情

机器学习之k-近邻(knn)算法(代码片段)

 一.K-近邻算法(KNN)概述   最简单最初级的分类器是将全部的训练数据所对应的类别都记录下来,当测试对象的属性和某个训练对象的属性完全匹配时,便可以对其进行分类。但是怎么可能所有测试对象都会找到... 查看详情