k-近邻

  • 概述
  • 例子
    • 欧式距离
  • 练习

概述

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

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

  • 优点: 精度高, 对异常值不敏感, 无数据输入假定
  • 缺点: 计算复杂度高, 空间复杂度高
  • 使用数据范围: 数值型和标称型

例子

电影可以按照题材分类, 那每个题材又是如何定义的呢?

假如两种类型的电影, 动作片和爱情片. 我们发现动作片中打斗镜头次数较多, 而爱情片中接吻镜头相对更多. 当然动作片中也有一些接吻镜头, 爱情片中也有一些打斗镜头. 所以不能单纯通过是否存在打斗镜头或者接吻镜头来判断影片的类别. 那么现在我们有 6 部影片已经明确了类别, 也有打斗镜头和接吻镜头的次数, 还有一部电影类型未知.

电影名称 打斗镜头 接吻镜头 电影类型
California Man 3 104 爱情片
He’s not Really into dues 2 100 爱情片
Beautiful Woman 1 81 爱情片
Kevin Longblade 101 10 动作片
Robo Slayer 3000 99 5 动作片
Amped II 98 2 动作片
? 18 90 未知

那么我们使用 K- 近邻算法来分类爱情片和动作片: 存在一个样本数据集合, 也叫训练样本即, 样本个数 M 个, 知道每一个数据特征与类别的对应关系, 然后存在未知类型数据集合 1 个. 那么我们要选择一个测试样本数据域训练样本中 M 个的距离, 排序过后选出最近的 K 个, 这个取值一般不大于 20 个. 选择 K 个最相近数据中次数最多的分类. 那我们我们更加这个原则去判断未知电影的分类.

电影名称 与未知电影的距离
California Man 20.5
He’s not Really into dues 18.7
Beautiful Woman 19.2
Kevin Longblade 115.3
Robo Slayer 3000 117.4
Amped II 118.9

我们假设 K 为 3, 那么排名前三个电影的类型都是爱情片, 所以我们判定这个位置电影也是一个爱情片. 那么距离是怎么样计算的呢?

欧式距离

欧式距离: 对于两个向量点 a1 和 a2 之间的距离, 可以通过该公式表示:

如果是输入变量有四个特征, 例如 (1, 3, 5, 2) 和 (7, 6, 9, 4) 之间的距离计算为:

练习

Facebook 入住地点

from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
import pandas as pddef knncls():"""K-近邻预测用户签到位置:return: None"""# 读取数据data = pd.read_csv("train.csv")print(data)# 处理数据# 1. 缩小数据, 查询数据筛选data = data.query("x > 1.0 & x < 1.25 & y > 2.5 & y< 2.75")# 2. 处理时间的数据time_value = pd.to_datetime(data["time"], unit="s")print(time_value.head())# 3. 把时间格式转换成字典格式time_value = pd.DatetimeIndex(time_value)print(time_value)# 4. 构造一些特征data["day"] = time_value.daydata["hour"] = time_value.hourdata["weekday"] = time_value.weekdayprint(data.head(10))# 5. 把时间戳特征删除data = data.drop(["time"], axis=1)print(data.head(10))# 6. 删除row_id小于3的数据place_count = data.groupby("place_id").count()print(place_count)tf = place_count[place_count.row_id > 10].reset_index()print(tf)data = data[data["place_id"].isin(tf.place_id)]data = data.drop(["row_id"], axis=1)print(data)# 7. 取出数当中的特征值和目标值y = data["place_id"]x = data.drop(["place_id"], axis=1)# 8. 进行数据分割训练集合和测试集x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)# 特征工程 (标准化)std = StandardScaler()# 1. 对测试集和训练集的特征进行标准化x_train = std.fit_transform(x_train)x_test = std.transform(x_test)# 1. 进行算法流程knn = KNeighborsClassifier(n_neighbors=5)# 2. fitknn.fit(x_train, y_train)# 3. 得出预测结果y_predict = knn.predict(x_test)print("预测的目标签到位置为: ", y_predict)# 4. 得出准确率print("预测的准确率: ", knn.score(x_test, y_test))return Noneif __name__ == "__main__":knncls()输出结果:
预测的目标签到位置为:  [6603539415 2355236719 6766324666 ... 6683426742 7707808405 3312463746]
预测的准确率:  0.5055147058823529

机器学习进阶 第一节 第十课相关推荐

  1. 机器学习进阶 第一节 第七课

    sklarn-learn 数据集 概述 sklearn.datasets datasets.load_() datasets.fetch_() datasets.make_() 返回类型 数据集目录 ...

  2. 机器学习进阶 第一节 第五课

    降维案例 案例一 步骤 步骤一 步骤二 步骤三 案例一 探究: 用户对物品类别的喜好细分降维. 数据: products.csv 商品信息 order_products__prior.csv 订单与商 ...

  3. 1-2 李宏毅2021春季机器学习教程-第一节(下)-深度学习基本概念简介

    上篇文章1-1 李宏毅2021春季机器学习教程-第一节(上)-机器学习基本概念简介介绍了回归的一些知识,重点介绍了机器学习寻找函式的三个步骤.接着我们继续学习第一节Introduction的内容. 目 ...

  4. c语言min函数_C语言探索之旅 | 第一部分第十课:第一个C语言小游戏

    内容简介 前言 准备工作和建议 我的代码 改进方案 第一部分第十一课预告 1. 前言 上一课是 C语言探索之旅 | 第一部分第九课:循环语句 . 经过前面这么多课的努力,我们终于迎来了第一个比较正式的 ...

  5. 小程的第一节C语言课

    大家好,我是来自中北大学的小程,目前是一位大一小白,当然,目标肯定是成为一名最牛逼的程序员,成为那种三年不开张,开张吃三年的那种. 学习编程肯定不是一件简单的事,需要大量的练习,我打算通过线上网课线下 ...

  6. Linux基础 第一节 第三课

    [toc] 创建用户 # useradd iamlittlewhilte # passwd iamlittlewhite 在 Linux 系统下, 默认情况下, 创建一个用户的同时会给用户在系统目录下 ...

  7. 数学加强 第一节 第三课

    [toc] 代码展示1 示例1 执行结果: 案例2 执行结果: 案例3 执行结果:

  8. Java基础 第二节 第二十课

    引用类型用法总结 概述 class 作为成员变量 武器类 盔甲类 角色类 测试类 interface 作为成员变量 定义接口 定义角色类 定义测试类 interface 作为方法参数和返回值类型 定义 ...

  9. 第一节毛概课我的收获

    1,大学让人越来越聪明."聪"字有"耳",意为我们用耳听,听讲座,听报告,听所有对我们有益之言语:右边"口"之上为"眼" ...

最新文章

  1. asp.net 2.0 中GridView里设置日期格式
  2. Microsoft Surface Toolkit Beta 版发布
  3. Android 5.0中的FDE功能实现
  4. Oracle中Cursor介绍
  5. java打jar包的方式,jar命令,maven
  6. UML部署图和构件图
  7. docker开启mysql的binlog日志
  8. 云小课|打造企业数据“高内聚,低耦合”--试试GaussDB(DWS)逻辑集群,实现数据物理隔离
  9. matlab中的pzmap的意思,Matlab 学习
  10. 计算机系徽 节徽设计,数学节节徽设计图
  11. CMT2300A 433MHz SUB-1G无线收发芯片
  12. Composition API 监听属性
  13. 计算机excel无法打开,电脑excel打不开的解决方法
  14. 解决springboot的pom.xml文件第一行报错问题
  15. DIY装机之入围产品
  16. 抖音一般多久能上热门 视频修改MD5工具
  17. debian通过odbc连接mysql_PHP从Debian Etch使用ODBC和FreeTDS访问MSSQL数据库
  18. 海贼王英文版 ONE PIECE百度网盘
  19. mac电脑如何与手机同步复制粘贴_Mac新手教程:如何将照片和视频从 iPhone、iPad传输到Mac电脑上?...
  20. windows录屏html文件,windows录屏怎么录?还有其他方法吗?

热门文章

  1. C++ Primer Plus(学习笔记之——一会儿指南、一会儿指北)
  2. 长微博工具,文转图 C#实现
  3. 【nodeJS】从nodejs原生的博客网站搭建到 koa框架实现个人博客网站搭建
  4. sklearn逻辑回归为什么要归一化
  5. 天边一朵云-最终章动画化决定,看云卷云舒
  6. 《C++ Primer》 chapter 15 TextQuery
  7. nao机器人python库安装_NAO机器人学习笔记(1)
  8. Notes of Python Cookbook (Chr1-Chr3)
  9. 第三方推送服务:个推服务推送流程
  10. 2020年河南科技大学892西方经济学考研真题题库等资料汇总