06_K-近邻算法
k-近邻算法
算法介绍
定义: 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一类别,则该样本也属于这个类别。
计算距离公式:欧式距离 (两点之间距离)
需要做标准化处理,防止某一类特征值权重过大
Sklearn API
- sklearn.neighbors.KNeighborsClassifier
- n 的取值会影响最终结果
算法实例 (Facebook Check in)
解决思路
分类:
- 特征值: x,y 坐标, 定位准确性, 年,日,时,周
- 目标值: 入住位置的id
处理: 0<x<10 0<y<10
- 由于数据量大,节省时间,x,y 缩小
- 时间戳进行(年,月,日,周,时分秒), 当做新特征
- 少于指定签到人数的位置删除
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
import pandas as pd
def knncls():
"""
K-近邻预测用户签到位置
:return: None
"""
# 读取数据
data = pd.read_csv('./train.csv')
# print(data.head(10))
# 处理数据
# 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)
# 3. 构造一些特征, 把日期格式转换为字典格式
time_value = pd.DatetimeIndex(time_value)
data['day'] = time_value.day
data['weekday'] = time_value.weekday
data['hour'] = time_value.hour
# 4.把时间戳特征删除
data = data.drop(['time'],axis=1)
# print(data)
# 5.把签到数量少于n个的目标位置删除
place_count = data.groupby('place_id').count() # 统计place_id次数,变成行索引
tf = place_count[place_count.row_id > 3].reset_index() # row_id 具体次数,reset_index 把place_id生成新的一列
data = data[data['place_id'].isin(tf.place_id)] # 筛选place_id
# print(data)
# 6.取出数据中的特征值和目标值
y = data['place_id']
x = data.drop(['place_id', 'row_id'], axis=1) # 去掉row_id 可以增加精度
# 7.分割训练集和测试集
x_train, x_test, y_train, y_text = train_test_split(x, y, test_size=0.25)
# 8.特征工程(标准化)
std = StandardScaler()
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)
# 进行算法流程 fit, predict, score #超参数
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(x_train, y_train)
# 得出预测结果
y_predict = knn.predict(x_test)
print('预测的目标签到位置为:', y_predict)
# 得出准确率
print('预测的准确率为:', knn.score(x_test, y_text))
return None
if __name__ == '__main__':
knncls()
总结
问题
k值取多大,有什么影响?
- k值取很小:容易受异常点影响
- k值取很大:容易受K值数量(类别)波动
性能问题
优缺点
优点: 简单,易于理解实现,无需估计参数,无需训练
缺点:
- 懒惰算法,对测试样本分类时的计算量打,内存开销大
- 必须指定K值,k值选择不当则分类精度不能保证
使用场景:小数据(几千~几万),基本不常用
06_K-近邻算法的更多相关文章
- 机器学习实战笔记--k近邻算法
#encoding:utf-8 from numpy import * import operator import matplotlib import matplotlib.pyplot as pl ...
- 机器学习实战笔记(Python实现)-01-K近邻算法(KNN)
--------------------------------------------------------------------------------------- 本系列文章为<机器 ...
- KNN近邻算法
K近邻(KNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表.kNN算法的核 ...
- k近邻算法的Java实现
k近邻算法是机器学习算法中最简单的算法之一,工作原理是:存在一个样本数据集合,即训练样本集,并且样本集中的每个数据都存在标签,即我们知道样本集中每一数据和所属分类的对应关系.输入没有标签的新数据之后, ...
- 基本分类方法——KNN(K近邻)算法
在这篇文章 http://www.cnblogs.com/charlesblc/p/6193867.html 讲SVM的过程中,提到了KNN算法.有点熟悉,上网一查,居然就是K近邻算法,机器学习的入门 ...
- 从K近邻算法谈到KD树、SIFT+BBF算法
转自 http://blog.csdn.net/v_july_v/article/details/8203674 ,感谢july的辛勤劳动 前言 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章 ...
- 机器学习之K近邻算法(KNN)
机器学习之K近邻算法(KNN) 标签: python 算法 KNN 机械学习 苛求真理的欲望让我想要了解算法的本质,于是我开始了机械学习的算法之旅 from numpy import * import ...
- k近邻算法
k 近邻算法是一种基本分类与回归方法.我现在只是想讨论分类问题中的k近邻法.k近邻算法的输入为实例的特征向量,对应于特征空间的点,输出的为实例的类别.k邻近法假设给定一个训练数据集,其中实例类别已定. ...
- KNN K~近邻算法笔记
K~近邻算法是最简单的机器学习算法.工作原理就是:将新数据的每一个特征与样本集中数据相应的特征进行比較.然后算法提取样本集中特征最相似的数据的分类标签.一般来说.仅仅提取样本数据集中前K个最相似的数据 ...
- 机器学习03:K近邻算法
本文来自同步博客. P.S. 不知道怎么显示数学公式以及排版文章.所以如果觉得文章下面格式乱的话请自行跳转到上述链接.后续我将不再对数学公式进行截图,毕竟行内公式截图的话排版会很乱.看原博客地址会有更 ...
随机推荐
- 玩转OneNET物联网平台之MQTT服务⑦ —— 远程控制LED(数量无限制)+ Android App控制 优化第一版
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- HashMap - 类注释
了解到Java8以后HashMap的实现换了,也看了很多博客一直在向我这个小菜鸡说HashMap的重要.因此我决定洗心革面,好好正视HashMap 基于jdk 8 先从类注释开始入手学习,顺便提高提高 ...
- The usage of Markdown---代码块
目录 1. 序言 2. 代码块 3. 引用中的代码 4. 列表中的代码块 更新时间:2019.09.14 1. 序言 在写技术博客的时候,我们常常需要添加一下代码块用来做演示说明,实际上在这篇博客 ...
- The value for the useBean class attribute is invalied
JSP: The value for the useBean class attribute XXX is ...
- 数据结构(四十一)多路查找树(B树)
一.多路查找树的背景 前面所讨论的查找算法都是在内存中进行的,它们适用于较小的文件,而对于较大的.存放在外存储器上的文件就不合适了,对于此类大规模的文件,即使是采用了平衡二叉树,在查找效率上仍然较低. ...
- VuforiaAR 教程
Vuforia AR不仅可以识别图片也可以识别三维物体 直接上步骤: 1)开发环境 unity2017直接集成了Vuforia AR开发环境,不过在安装时要选择此项,也可以后续去unity官网下载相 ...
- 服务器配置:ECS+Nginx+uWSGI+Flask——各部分详细介绍
希望在阿里云ECS上搭建一个flask框架的web应用,经典的形式便是flask+uWSGI+nginx模式 服务器:CentOS 7.3 python版本:3.8.0 先贴一张全局图,这张图很清楚的 ...
- 【MySQL】MySQL 8.0.X的安装与卸载命令
1.请读者自行下载MySQL Server https://dev.mysql.com/downloads/mysql/ 2.解压.zip文件 将mysql-8.0.12-winx64.zip解压到 ...
- Windows 程序包管理器 Chocolatey:一条命令装软件
Windows 程序包管理器 Chocolatey:一条命令装软件 本文原始地址:https://sitoi.cn/posts/46278.html 介绍 Chocolatey 是一种软件管理解决方案 ...
- shell 队列实现线程并发控制
需求:并发检测1000台web服务器状态(或者并发为1000台web服务器分发文件等)如何用shell实现? 方案一:(这应该是大多数人都第一时间想到的方法吧) 思路:一个for循环1000次,顺序执 ...