k近邻算法(KNN)-分类算法

                                 k近邻算法(KNN)-分类算法

1 概念

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

k-近邻算法采用测量不同特征值之间的距离来进行分类。

2 优缺点

优点:简单,易于理解,易于实现,无需估计参数,无需训练

缺点:懒惰算法,对测试样本分类时的计算量大,内存开销大 必须指定K值,K值选择不当则分类精度不能保证

使用数据范围:数值型和标称型

3 欧式距离

两个样本的距离可以通过如下公式计算,又叫欧式距离。如a(a1,a2,a3),b(b1,b2,b3)两点用如下公式表示

4 sklearn k-近邻算法API

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')

KNeighborsClassifier类的实例化所需参数如下

n_neighbors

(默认= 5),k_neighbors查询默认使用的邻居数
algorithm{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’},可选用于计算最近邻居的算法:‘ball_tree’将会使用 BallTree,‘kd_tree’将使用 KDTree。‘auto’将尝试根据传递给fit方法的值来决定最合适的算法。 (不同实现方式影响效率)
n_jobs(默认= 1),用于邻居搜索的并行作业数。如果-1,则将作业数设置为CPU内核数。不影响fit方法。

方法:

(1)fit(X, y):使用X作为训练数据拟合模型,y作为X的类别值。X,y为数组或者矩阵

(2)kneighbors(X=None, n_neighbors=None, return_distance=True):找到指定点集X的n_neighbors个邻居,return_distance为False的话,不返回距离

(3)predict(X):预测提供的数据的类标签

(4)predict_proba(X):返回测试数据X属于某一类别的概率估计

5 实例流程

①数据集的处理

②分割数据集

③对数据集进行标准化

④estimator流程进行分类预测

6 k近邻算法实例-预测入住位置

数据来源:https://www.kaggle.com/c/facebook-v-predicting-check-ins/data

这里根据X y坐标值,定位准确性,时间作为特征值,入住的id为目标值

from sklearn.neighbors import KNeighborsClassifier
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler#1 读取数据
data = pd.read_csv("./data/train.csv")#2 处理数据,截取部分数据
data = data.query("x > 1.0 &  x < 1.5 & y > 2.5 & y < 3")
#处理日期数据,将data里的time特征下的时间错装换为(年-月-日 时:风:秒)格式,unit='s'设置转换的最小单位为s
timev = pd.to_datetime(data['time'],unit='s')
#把日期转换为字典格式,为了构造一些天数等特征,所以要将time转换为可以获取day,month的参数
#那就需要把日期格式转换为字典格式,就把每一行转换为字典格式,那就可以单独获取里面的时分秒
timev = pd.DatetimeIndex(timev)#构造新特征
data['day']=timev.day
data['hour'] = timev.hour
data['weekday'] = timev.weekday
#删除时间特性,pandas的列是1,sklearn的列是0
data.drop(['time'],axis=1)'''把签到数量少于n个目标位置删除,用分组,然后统计求和
根据palce_id分组'''
data_count = data.groupby('palce_id').count()'''以某个值进行分组之后,前面的索引就是该值,然后才是每一列特征,row_id是入住的id,现在已经变成具体的次数了
这里把row_id大于3的保留下来,然后调用reset_index,reset_index()的所用是把索引palce_id变成某一列,就能获取了
前面的索引就变成0,1..一个个计数'''tf = data_count[data_count.row_id>5].reset_index()#筛选data里面id是tf里面的id,在就保留下来
data[data['place_id'].isin(tf.place_id)]# 取出数据当中的特征值和将place_id作为目标值,
y = data['place_id']
x = data.drop(['place_id'], axis=1)# 将数据的分割成训练集合测试集
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25)#3 特征工程标准化,训练集做标准化了,测试集也要做标准化,目标值不要计算距离不用做标准化
#标准化就是想让每一列数据在同一个标准上面进行计算
std = StandardScaler()
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)#进行算法流程 超参数
knn = KNeighborsClassifier(n_neighbors=5)
#fit输入数据
knn.fit(x_train,y_train)
#得出预测结果
y_predict = knn.predict(x_test)
print("预测的目标位置为:", y_predict)
# 得出准确率,这里得出的准确率并不高,因为还有一些特征的影响如row_id,可以将其从特征值中删除
print("预测的准确率:", knn.score(x_test, y_test))

7 K近邻算法问题:

①K值取多大,有什么影响?

K值取小了,比如取最近一个他的类别是什么类别我就是什么类别,这样容易受异常点影响假设这个最近的点就是异常点,就预测错了

K值取大了,容易受K值数量(类别)波动影响

如何处理K值取值问题见模型选择与调优

②性能问题:每一个样本来了,要一个个去计算距离时间复杂度很高

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 822. 翻转卡片游戏(哈希)

文章目录1. 题目2. 解题1. 题目 在桌子上有 N 张卡片&#xff0c;每张卡片的正面和背面都写着一个正数&#xff08;正面与背面上的数有可能不一样&#xff09;。 我们可以先翻转任意张卡片&#xff0c;然后选择其中一张卡片。 如果选中的那张卡片背面的数字 X 与任意一张卡片…

朴素贝叶斯算法-分类算法

朴素贝叶斯算法-分类算法 1 概率基础 概率定义为一件事情发生的可能性 联合概率&#xff1a;包含多个条件&#xff0c;且所有条件同时成立的概率&#xff0c;记作P(A,B) 条件概率&#xff1a;事件A在另一个事件B已经发生条件下的发送概率&#xff0c;记作P(A|B) 在A1,A2相…

django简介及环境搭建

MVC简介 MVC框架的核心思想是&#xff1a;解耦&#xff0c;让不同的代码块之间降低耦合&#xff0c;增强代码的可扩展性和可移植性&#xff0c;实现向后兼容 M全拼为Model&#xff0c;主要封装对数据库层的访问&#xff0c;内嵌ORM框架&#xff0c;实现面向对象的编程来操作数据…

LeetCode 1312. 让字符串成为回文串的最少插入次数(区间DP)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s &#xff0c;每一次操作你都可以在字符串的任意位置插入任意字符。 请你返回让 s 成为回文串的 最少操作次数 。 「回文串」是正读和反读都相同的字符串。 示例 1&#xff1a; 输入&#xff1a;s "zzazz" 输出&…

Django创建项目

创建项目的名称为test1&#xff0c;完成“图书-英雄”信息的维护&#xff0c;创建应用名称为booktest 创建项目 cd /home/Desktop/ mkdir pytest cd pytest 创建项目的命令如下&#xff1a; django-admin startproject test1 项目默认目录说明 进入test1目录&#xff0c;查看…

分类模型的评估

分类模型的评估 在许多实际问题中&#xff0c;衡量分类器任务的成功程度是通过固定的性能指标来获取。一般最常见使用的是准确率&#xff0c;即预测结果正确的百分比&#xff0c;方法为estimator.score() 1 混淆矩阵 有时候&#xff0c;我们关注的是样本是否被正确诊断出来。…

LeetCode 996. 正方形数组的数目(回溯+剪枝)

文章目录1. 题目2. 解题1. 题目 给定一个非负整数数组 A&#xff0c;如果该数组每对相邻元素之和是一个完全平方数&#xff0c;则称这一数组为正方形数组。 返回 A 的正方形排列的数目。两个排列 A1 和 A2 不同的充要条件是存在某个索引 i&#xff0c;使得 A1[i] ! A2[i]。 …

[Java]java反射随笔

类是面向对象的灵魂&#xff0c;一切事物都可以以类来抽象。 在java使用过程中&#xff0c;我们可能会经常用到一个反射的知识&#xff0c;只是别人都封装好的&#xff0c;如jdbc的加载驱动类有一句Class.for(“…jdbc…”).newInstance.当然框架也是离不开了反射&#xff0c;s…

模型的选择与调优

模型的选择与调优 1 交叉验证 1.1 交叉验证过程 交叉验证&#xff1a;为了让被评估的模型更加准确可信 交叉验证的意义&#xff1a;为了使一部分数据即当成验证集&#xff0c;也做过训练集&#xff0c;更加准确得出准确率&#xff0c;把最后的准确率取平均值。 注意&#…

Django创建图书管理项目(完整版

一、创建项目test1及应用booktest 创建应用booktest 二、安装应用 在test1/settings.py中INSTALLED_APPS下添加应用的名称就可以完成安装 初始项目的INSTALLED_APPS如下图&#xff1a; 在元组中添加一个新的项&#xff0c;当前示例为booktest booktest, 三、设计模型 1.定义模型…

05.序列模型 W3.序列模型和注意力机制

文章目录1. 基础模型2. 选择最可能的句子3. 集束搜索&#xff08;Beam Search&#xff09;4. 改进集束搜索5. 集束搜索的误差分析6. Bleu 得分7. 注意力模型直观理解8. 注意力模型9. 语音识别&#xff08;Speech recognition&#xff09;10. 触发字检测&#xff08;Trigger Wor…

决策树-分类算法

决策树-分类算法 1 认识决策树 决策树是一种基本的分类方法&#xff0c;也可以用于回归。我们一般只讨论用于分类的决策树。决策树模型呈树形结构&#xff0c;在分类问题中&#xff0c;表示基于特征对实例进行分类的过程&#xff0c;它可以认为是if-then规则的集合。在决策树…

在Visual Studio中利用NTVS创建Pomelo项目

刚看新闻&#xff0c;才知道微软发布了Node.js Tools for Visual Studio&#xff08;NTVS&#xff09;&#xff0c;受够了WebStorm输入法Bug的困扰&#xff0c;这下终于可以解脱了。以Pomelo为例&#xff0c;运行命令&#xff1a;pomelo init pomelo_test&#xff0c;生成一个默…

LeetCode 834. 树中距离之和(树上DP)*

文章目录1. 题目2. 解题1. 题目 给定一个无向、连通的树。树中有 N 个标记为 0...N-1 的节点以及 N-1 条边 。 第 i 条边连接节点 edges[i][0] 和 edges[i][1] 。 返回一个表示节点 i 与其他所有节点距离之和的列表 ans。 示例 1: 输入: N 6, edges [[0,1],[0,2],[2,3],[…

随机森林-集成学习方法(分类)

随机森林-集成学习方法&#xff08;分类&#xff09; 1 集成学习方法 集成学习通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器/模型&#xff0c;各自独立地学习和作出预测。这些预测最后结合成单预测&#xff0c;因此优于任何一个单分类的做出预测…

05.序列模型 W3.序列模型和注意力机制(作业:机器翻译+触发词检测)

文章目录作业1&#xff1a;机器翻译1. 日期转换1.1 数据集2. 用注意力模型进行机器翻译2.1 注意力机制3. 可视化注意力作业2&#xff1a;触发词检测1. 数据合成&#xff1a;创建语音数据集1.1 听一下数据1.2 音频转频谱1.3 生成一个训练样本1.4 全部训练集1.5 开发集2. 模型2.1…

线性回归分析-回归算法

线性回归分析-回归算法 1 回归算法 机器学习中监督学习算法分为分类算法和回归算法两种&#xff0c;其实就是根据类别标签分布类型为离散型、连续性而定义的。回归算法用于目标是连续的&#xff0c;在指定区间内可以是任意一个数值&#xff0c;针对的是数值型的样本&#xff0…

拟合与岭回归

目录 拟合与岭回归 1 什么是过拟合与欠拟合 2 模型复杂度 3 鉴别欠拟合与过拟合 4 过拟合解决方法 5 岭回归&#xff08;Ridge&#xff09; 6 模型的保存与加载 拟合与岭回归 1 什么是过拟合与欠拟合 通过下面两张图来解释过拟合和欠拟合&#xff1a; 左图中机器通过这…

LeetCode 778. 水位上升的泳池中游泳(二分查找+dfs)

文章目录1. 题目2. 解题1. 题目 在一个 N x N 的坐标方格 grid 中&#xff0c;每一个方格的值 grid[i][j] 表示在位置 (i,j) 的平台高度。 现在开始下雨了。当时间为 t 时&#xff0c;此时雨水导致水池中任意位置的水位为 t 。 你可以从一个平台游向四周相邻的任意一个平台&a…

pycharm快捷键、常用设置、配置管理

内容包含&#xff1a; pycharm学习技巧 Learning tips PyCharm3.0默认快捷键(翻译的) pycharm常用设置 pycharm环境和路径配置 Pycharm实用拓展功能&#xff1a;pycharm中清除已编译.pyc中间文件 python2转python3最快方式 [pycharm版本控制和数据库管理][PyCharm中的那些实用功…