python机器学习基础K近邻算法详解KNN

目录
  • 一、k-近邻算法原理及API
    • 1.k-近邻算法原理
    • 2.k-近邻算法API
    • 3.k-近邻算法特点
  • 二、k-近邻算法案例分析案例信息概述
    • 第一部分:处理数据
      • 1.数据量缩小
      • 2.处理时间
      • 3.进一步处理时间
      • 4.提取并构造时间特征
      • 5.删除无用特征
      • 6.签到数量少于3次的地点,删除
      • 7.提取目标值y
      • 8.数据分割
    • 第二部分:特征工程
      • 标准化
    • 第三部分:进行算法流程
      • 1.算法执行
      • 2.预测结果
      • 3.检验效果

一、k-近邻算法原理及API

1.k-近邻算法原理

如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。(相似的样本,特征之间的值应该都是相近的。)

样本之间的距离求法:

2.k-近邻算法API

3.k-近邻算法特点

k值取很小,容易受异常点的影响。

k值取很大,容易受k值数量(类别)波动

优点:简单,易于理解,易于实现,无需估计参数,无需训练(不需要迭代)

缺点:懒惰算法,对测试样本分类时的计算量大,内存开销大

综上,使用该算法时必须指定K值,K值选择不当则分类精度不能保证。同时若样本数量非常多,算法花费的时间就会很长,因此使用场景一般是小数据场景。

二、k-近邻算法案例分析案例信息概述

knn使用案例:以预测客人的入住位置(假设住的是酒店)为例。准备好的数据中的特征为:酒店编号(place_id)、入住登记(row_id)、客人横坐标(x)、客人纵坐标(y)、时间戳(time)、客人定位准确度(accuracy)

也就是说,我们的目标是预测客人将会入住哪个编号的酒店。则此问题是一个分类问题。根据k-近邻算法,我们通常考虑让客人入住距离他最近的酒店。但同时,根据给出的其他信息,是否入住某酒店还会受其他因素影响,比如入住时间,定位准确度。

因此,我们第一步对数据进行处理的时候,需要将我们认为对客人入住有影响的所有因素考虑在内。比如客人的坐标、入住时间、定位准确度。

接下来对特征进行处理,把需要的添加进列表,不需要的删除,或者筛选部分数据。最终处理好后,将目标值单独拿出来作为y_train,就可以使用x_train和y_train来训练算法了。

第一部分:处理数据

1.数据量缩小

假设已导入了data数据,由于数据量太大,因此为了演示的速度,将数据量缩小。

代码:

data.query('x>0.1 & x<0.2 & y>0.5 & y<0.6')

选择x的坐标范围,以及y的坐标范围

2.处理时间

时间给出的是时间戳格式,需要使用pd.to_date_time进行转化

代码:

time = pd.to_date_time(data['time'], unit='s')

此时得出的时间是类似于这样:1970-01-01 18:09:40

3.进一步处理时间

将时间提取出来,转换成 ”可以任意提取,年月日时分秒均可“ 的字典格式

代码:

time_value = pd.DatetimeIndex(time)

4.提取并构造时间特征

直接将提取的时间特征,选择一个特征名,加入原数据表中即可,想加几个加几个

代码:

data['day'] = time_value.day

5.删除无用特征

使用drop方法,方法中,axis=1代表整列。只要认为没有用的特征,均可删除

代码:data = data.drop(['row'], axis=1)

6.签到数量少于3次的地点,删除

首先对数据进行分组,要删除地点,就以地点来分组,并统计其他特征基于地点的数量

代码:

place_count = data.groupby('place_id').count()

此处返回的数据表,索引就是地点place_id,其他的特征对应的列,数据都变成了“基于place_id”所进行的数量统计。

关于groupby().count()的解释,以一个简单的数据为例:

原来的特征有5个,分别为:year, team, rank, points, goals,现在按照year来分组并统计数量,那么第一行第一列的数据“4”,意思就是:在2014年,有4个team

回到本例,row_id代表的是“登记事件的id”,也就是说每次有人登记入住一个place,那么place_id对应的就会有一个row_id数据出现。若同一个地方有三个人登记了,那么同一个place_id对应的row_id就会有三个。

因此,本例中按照groupby.count()处理之后,place_id和row_id对应的关系就是:在place_id中的a这个地方,row_id对应的数量为3。也就是相当于在a地点,有3人登记入住了。

接下来,将入住人数少于3的place_id删除:

place_count[place_count.row_id>3]
# 选择入住人数大于三人的数据

tf = place_count[place_count.row_id>3].reset_index() #将索引重置,place_id还放回到特征

data = data[data['place_id'].isin (tf.place_id)]
#对data中的数据进行筛选

7.提取目标值y

提取之后,需将原数据表中的目标值那一列删除

y = data['place_id']
x = data.drop(['place_id'], axis=1)

8.数据分割

前面需要导入分割方法:from sklearn.model_selection import train_test_split

代码:

x_train, x_test, y_train,
 y_test = train_test_split(x, y, test_size=0.25)

至此,数据处理完毕。数据处理过程中,我们需要考虑有哪些数据是需要舍弃的,有哪些是需要我们构造的,是否需要对特征进行筛选,条件如何设置等。最终,将我们需要的目标值提取出来,剩余的作为训练集。并调用分割方法,按一定的比例进行数据分割。(此处25%的数据作为测试集)

第二部分:特征工程

标准化

先导入标准化类:from sklearn.preprocessing import StandardScaler

训练集和测试集,标准化的时候,所使用的均值与标准差,都是训练集的!因此,对测试集标准化的时候,只调用transform方法即可。

x_train = std.fit_transform(x_train)

x_test = transform(x_test)

第三部分:进行算法流程

1.算法执行

先导入算法:from sklearn.neighbors import KNeighborsClassifier

使用该算法,将训练集数据输入,即可训练完毕,得到一个模型。

代码:

knn = KNeighborsClassifier(x_train, y_train)

2.预测结果

使用predict方法, 输入测试集数据即可得出预测的y

代码:

y_predict = knn.predict(x_test)

3.检验效果

使用score方法,输入测试集数据,以及测试集的目标值,即可得出分数

代码:

score = knn.score(x_test, y_test)

以上就是python机器学习基础K近邻算法详解KNN的详细内容,更多关于python机器学习K近邻算法的资料请关注我们其它相关文章!

(0)

相关推荐

  • python机器学习基础决策树与随机森林概率论

    目录 一.决策树原理概述 1.决策树原理 2.信息论 ①信息熵 ②决策树的分类依据 ③其他决策树使用的算法 ④决策树API 二.决策树算法案例 1.案例概述 2.数据处理 3.特征工程 4.使用决策树进行预测 5.决策树优缺点及改进 三.随机森林 1.集成学习方法 2.单个树建立过程 3.随机森林API 4.随机森林使用案例 5.随机森林的优点 一.决策树原理概述 1.决策树原理 决策树的分类原理,相当于程序中的if-then结构,通过条件判断,来决定结果. 2.信息论 ①信息熵 假设有32支球

  • 基于Python和Scikit-Learn的机器学习探索

    你好,%用户名%! 我叫Alex,我在机器学习和网络图分析(主要是理论)有所涉猎.我同时在为一家俄罗斯移动运营商开发大数据产品.这是我第一次在网上写文章,不喜勿喷. 现在,很多人想开发高效的算法以及参加机器学习的竞赛.所以他们过来问我:"该如何开始?".一段时间以前,我在一个俄罗斯联邦政府的下属机构中领导了媒体和社交网络大数据分析工具的开发.我仍然有一些我团队使用过的文档,我乐意与你们分享.前提是读者已经有很好的数学和机器学习方面的知识(我的团队主要由MIPT(莫斯科物理与技术大学)和

  • jquery.AutoComplete.js中文修正版(支持firefox)

    复制代码 代码如下: jQuery.autocomplete = function(input, options) { // Create a link to self var me = this; // Create jQuery object for input element var $input = $(input).attr("autocomplete", "off"); // Apply inputClass if necessary if (optio

  • python机器学习基础特征工程算法详解

    目录 一.机器学习概述 二.数据集的构成 1.数据集存储 2.可用的数据集 3.常用数据集的结构 三.特征工程 1.字典数据特征抽取 2.文本特征抽取 3.文本特征抽取:tf-idf 4.特征预处理:归一化 5.特征预处理:标准化 6.特征预处理:缺失值处理 一.机器学习概述 机器学习是从数据中,自动分析获得规律(模型),并利用规律对未知数据进行预测. 二.数据集的构成 1.数据集存储 机器学习的历史数据通常使用csv文件存储. 不用mysql的原因: 1.文件大的话读取速度慢: 2.格式不符合

  • python机器学习朴素贝叶斯算法及模型的选择和调优详解

    目录 一.概率知识基础 1.概率 2.联合概率 3.条件概率 二.朴素贝叶斯 1.朴素贝叶斯计算方式 2.拉普拉斯平滑 3.朴素贝叶斯API 三.朴素贝叶斯算法案例 1.案例概述 2.数据获取 3.数据处理 4.算法流程 5.注意事项 四.分类模型的评估 1.混淆矩阵 2.评估模型API 3.模型选择与调优 ①交叉验证 ②网格搜索 五.以knn为例的模型调优使用方法 1.对超参数进行构造 2.进行网格搜索 3.结果查看 一.概率知识基础 1.概率 概率就是某件事情发生的可能性. 2.联合概率 包

  • python机器学习算法与数据降维分析详解

    目录 一.数据降维 1.特征选择 2.主成分分析(PCA) 3.降维方法使用流程 二.机器学习开发流程 1.机器学习算法分类 2.机器学习开发流程 三.转换器与估计器 1.转换器 2.估计器 一.数据降维 机器学习中的维度就是特征的数量,降维即减少特征数量.降维方式有:特征选择.主成分分析. 1.特征选择 当出现以下情况时,可选择该方式降维: ①冗余:部分特征的相关度高,容易消耗计算性能 ②噪声:部分特征对预测结果有影响 特征选择主要方法:过滤式(VarianceThreshold).嵌入式(正

  • python机器学习基础K近邻算法详解KNN

    目录 一.k-近邻算法原理及API 1.k-近邻算法原理 2.k-近邻算法API 3.k-近邻算法特点 二.k-近邻算法案例分析案例信息概述 第一部分:处理数据 1.数据量缩小 2.处理时间 3.进一步处理时间 4.提取并构造时间特征 5.删除无用特征 6.签到数量少于3次的地点,删除 7.提取目标值y 8.数据分割 第二部分:特征工程 标准化 第三部分:进行算法流程 1.算法执行 2.预测结果 3.检验效果 一.k-近邻算法原理及API 1.k-近邻算法原理 如果一个样本在特征空间中的k个最相

  • Python机器学习之PCA降维算法详解

    一.算法概述 主成分分析 (Principal ComponentAnalysis,PCA)是一种掌握事物主要矛盾的统计分析方法,它可以从多元事物中解析出主要影响因素,揭示事物的本质,简化复杂的问题. PCA 是最常用的一种降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中,并期望在所投影的维度上数据的方差最大,以此使用较少的维度,同时保留较多原数据的维度. PCA 算法目标是求出样本数据协方差矩阵的特征值和特征向量,而协方差矩阵的特征向量的方向就是PCA需要投影的方向.使样本

  • python实现决策树C4.5算法详解(在ID3基础上改进)

    一.概论 C4.5主要是在ID3的基础上改进,ID3选择(属性)树节点是选择信息增益值最大的属性作为节点.而C4.5引入了新概念"信息增益率",C4.5是选择信息增益率最大的属性作为树节点. 二.信息增益 以上公式是求信息增益率(ID3的知识点) 三.信息增益率 信息增益率是在求出信息增益值在除以. 例如下面公式为求属性为"outlook"的值: 四.C4.5的完整代码 from numpy import * from scipy import * from mat

  • Python机器学习之K-Means聚类实现详解

    本文为大家分享了Python机器学习之K-Means聚类的实现代码,供大家参考,具体内容如下 1.K-Means聚类原理 K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大.其基本思想是:以空间中k个点为中心进行聚类,对最靠近他们的对象归类.通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果.各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开. 算法大致流程为:(1)随机选取k个点作为种子点(这k个点不一定属于数据集)

  • Python集成学习之Blending算法详解

    一.前言 普通机器学习:从训练数据中学习一个假设. 集成方法:试图构建一组假设并将它们组合起来,集成学习是一种机器学习范式,多个学习器被训练来解决同一个问题. 集成方法分类为: Bagging(并行训练):随机森林 Boosting(串行训练):Adaboost; GBDT; XgBoost Stacking: Blending: 或者分类为串行集成方法和并行集成方法 1.串行模型:通过基础模型之间的依赖,给错误分类样本一个较大的权重来提升模型的性能. 2.并行模型的原理:利用基础模型的独立性,

  • python中实现k-means聚类算法详解

    算法优缺点: 优点:容易实现 缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢 使用数据类型:数值型数据 算法思想 k-means算法实际上就是通过计算不同样本间的距离来判断他们的相近关系的,相近的就会放到同一个类别中去. 1.首先我们需要选择一个k值,也就是我们希望把数据分成多少类,这里k值的选择对结果的影响很大,Ng的课说的选择方法有两种一种是elbow method,简单的说就是根据聚类的结果和k的函数关系判断k为多少的时候效果最好.另一种则是根据具体的需求确定,比如说进行衬衫尺寸的聚

  • Python编程实现蚁群算法详解

    简介 蚁群算法(ant colony optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法.它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为.蚁群算法是一种模拟进化算法,初步的研究表明该算法具有许多优良的性质.针对PID控制器参数优化设计问题,将蚁群算法设计的结果与遗传算法设计的结果进行了比较,数值仿真结果表明,蚁群算法具有一种新的模拟进化优化方法的有效性和应用价值. 定义 各个蚂蚁在没有事先告诉

  • Python自然语言处理之切分算法详解

    一.前言 我们需要分析某句话,就必须检测该条语句中的词语. 一般来说,一句话肯定包含多个词语,它们互相重叠,具体输出哪一个由自然语言的切分算法决定.常用的切分算法有完全切分.正向最长匹配.逆向最长匹配以及双向最长匹配. 本篇博文将一一介绍这些常用的切分算法. 二.完全切分 完全切分是指,找出一段文本中的所有单词. 不考虑效率的话,完全切分算法其实非常简单.只要遍历文本中的连续序列,查询该序列是否在词典中即可.上一篇我们获取了词典的所有词语dic,这里我们直接用代码遍历某段文本,完全切分出所有的词

  • 机器学习10大经典算法详解

    本文为大家分享了机器学习10大经典算法,供大家参考,具体内容如下 1.C4.5 C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3算法.  C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进: 1)用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足: 2)在树构造过程中进行剪枝: 3)能够完成对连续属性的离散化处理: 4)能够对不完整数据进行处理. C4.5算法有如下优点:产生的分类规则易于理解,准确率较高.其缺点是:在构造树的过

随机推荐