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. 不知道怎么显示数学公式以及排版文章.所以如果觉得文章下面格式乱的话请自行跳转到上述链接.后续我将不再对数学公式进行截图,毕竟行内公式截图的话排版会很乱.看原博客地址会有更 ...
随机推荐
- UVA10228 A Star not a Tree?
[返回模拟退火略解] 题目描述 一平面上有 nnn 个点 {Ai}\{A_i\}{Ai},求一个点 XXX 使得σ=∑i=1ndis(Ai,X)\sigma=\sum_{i=1}^{n}{dis(A ...
- Google研发面试题
今天很开心找到了一个很不错的研发面试题,很考验临时反应能力,特地拿出来和大家分享一下此题以及自己做该题的心得体会!!! 题目: 总共有12个外表都一样的金属球,其中有11个球的重量是相同的,1个球的重 ...
- Python开发【第八篇】元组
元组 元组是不可改变的序列,元组是可以存储任意类型数据的容器 元组和字符串的共同点:它们都是容器,都是不可变的序列 元组和字符串的不同点:元组可以存储任意的数据类型的元素,字符串只能存储字符 元组和列 ...
- opencv::处理边缘
卷积边界问题 图像卷积的时候边界像素,不能被卷积操作,原因在于边界像素没有完全跟kernel重叠,所以当3x3滤波时候有1个像素的边缘没有被处理,5x5滤波的时候有2个像素的边缘没有被处理. 处理边缘 ...
- 1,下载和部署开发环境--AutoCAD二次开发
环境需求为: AutoCAD 2020版 ObjectARX SDK 下载地址:https://www.autodesk.com/developer-network/platform-technolo ...
- Js极客之路 - 简化操作
1.对字符串使用单引号(避免动态添加元素时html会出现的双引号"引起的冲突,方便操作 - 单引号一个键,双引号两个键) // bad var name = "Barrior&qu ...
- Qt 表格的使用
参考 http://doc.qt.io/qt-5/qtablewidget.html http://doc.qt.io/qt-5/qtablewidgetitem.html https://blog. ...
- webStrom快捷键快速创建React组件
1. rcc + tab键 - - 用ES6模块系统创建一个React组件类 2. rccp + tab键 - - 创建一个带有PropTypes和ES6模块系统的React组件类 3. rcfc + ...
- Fiddler抓包工具的基本操作
Fiddler ——位于客户端和服务器端的HTTP代理 代理:客户端所有请求都先经过fiddler,然后转发到相应服务器 服务器端所有相应都先经过fiddler,然后发送到客户端 1. 常用的HTTP ...
- 函数基础(三) 装饰器\闭包 day 12
目录 昨日回顾 可变长参数 * ** 函数对象 函数嵌套 名称空间和作用域 今日内容 闭包函数 装饰器 语法糖 装饰器模板 迭代器 昨日回顾 可变长参数 * *形参:接受多余的位置实参 *实参(可迭代 ...