KNN是通过测量不同特征值之间的距离进行分类。它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,其中K通常是不大于20的整数。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。

其算法的描述为:

1)计算测试数据与各个训练数据之间的距离;

2)按照距离的递增关系进行排序;

3)选取距离最小的K个点;

4)确定前K个点所在类别的出现频率;

5)返回前K个点中出现频率最高的类别作为测试数据的预测分类。

应用1:自己编写knn算法如下:

import pandas as pd
import numpy as np '''
约会样本数据说明datingTestSet.txt, 以tab键分开:
1、FlyMiles: 每年获得的飞行常客里程数;
2、PlayTime: 玩视频游戏所耗费的时间百分比
3、IceCream: 每周消费的冰淇淋公斤数
4、对约会对象的感觉
'''
#url表示数据文件存放的地址
url = 'Data/datingTestSet.txt' data = pd.read_table(url, sep='\t', header=None, names=['FlyMiles', 'PlayTime', 'IceCream', 'LikeDegree'])
#将LikeDegree一列由字符串转化为数字
like_mapping = {label: idx for idx, label in enumerate(np.unique(data['LikeDegree']))}
data['LikeDegree'] = data['LikeDegree'].map(like_mapping) #归一化
def autoNorm(data):
normal = (data - data.min()) / (data.max() - data.min())
scope = data.max() - data.min()
min = data.min()
return normal, scope, min # knn算法
def knn(inX, normal, label, k):
data_sub = normal - inX
data_square = data_sub.applymap(np.square)
data_sum = data_square.sum(axis=1)
data_sqrt = data_sum.map(np.sqrt)
dis_sort = data_sqrt.argsort()
#加上测试数numTest
k_label = label[dis_sort[:k] + 200]
label_sort = k_label.value_counts()
res_label = label_sort.index[0]
return res_label #测试结果
def datingTest():
normal, scope, min = autoNorm(data[['FlyMiles', 'PlayTime', 'IceCream']])
label = data.iloc[:, -1]
m = normal.shape[0]
numTest = int(m * 0.2)
errorCount = 0.0
for i in range(numTest):
result = knn(normal.iloc[i, :], normal.iloc[numTest : m, :], label[numTest : m], 3)
print("the classifier came back with: %d, the real answer is: %d" % (result, label[i]))
if(result != label[i]):
errorCount += 1.0
print("the total error rate is: %f" % (errorCount / float(numTest))) datingTest()

应用2:利用sklearn库函数

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier data = pd.read_table('Data/datingTestSet.txt', sep='\t', header=None, names=['FlyMiles', 'PlayTime', 'IceCream', 'LikeDegree'])
like_mapping = {label: idx for idx, label in enumerate(np.unique(data['LikeDegree']))}
data['LikeDegree'] = data['LikeDegree'].map(like_mapping)
X = data.iloc[:, 0:3]
y = data.iloc[:, -1] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=32)
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
right_rate = knn.score(X_test, y_test)
print('the right rate is: %f' % right_rate)

大数据-KNN算法的更多相关文章

  1. 大数据排序算法:外部排序,bitmap算法;大数据去重算法:hash算法,bitmap算法

    外部排序算法相关:主要用到归并排序,堆排序,桶排序,重点是先分成不同的块,然后从每个块中找到最小值写入磁盘,分析过程可以看看http://blog.csdn.net/jeason29/article/ ...

  2. Scala 大数据 常用算法收集

    一:IP转数字,用于比大小,用在求IP段范围中 def ip2Long(ip: String): Long = { val fragments = ip.split("[.]") ...

  3. 《零起点,python大数据与量化交易》

    <零起点,python大数据与量化交易>,这应该是国内第一部,关于python量化交易的书籍. 有出版社约稿,写本量化交易与大数据的书籍,因为好几年没写书了,再加上近期"前海智库 ...

  4. 后Hadoop时代的大数据架构(转)

    原文:http://zhuanlan.zhihu.com/donglaoshi/19962491 作者: 董飞       提到大数据分析平台,不得不说Hadoop系统,Hadoop到现在也超过10年 ...

  5. 年度钜献,108个大数据文档PDF开放下载

    1.大数据的开放式创新——吴甘沙 相关阅读:[PPT]吴甘沙:让不同领域的数据真正流动.融合起来,才能释放大数据的价值 下载:大数据的开放式创新——吴甘沙.pdf 2.微软严治庆——让大数据为每个人服 ...

  6. SparkSQL大数据实战:揭开Join的神秘面纱

    本文来自 网易云社区 . Join操作是数据库和大数据计算中的高级特性,大多数场景都需要进行复杂的Join操作,本文从原理层面介绍了SparkSQL支持的常见Join算法及其适用场景. Join背景介 ...

  7. 后Hadoop时代的大数据架构

    提到大数据分析平台,不得不说Hadoop系统,Hadoop到现在也超过10年的历史了,很多东西发生了变化,版本也从0.x进化到目前的2.6版本.我把2012年后定义成后Hadoop平台时代,这不是说不 ...

  8. 从技术 Leader 的招聘需求看,如何转岗为当前紧缺的大数据相关人才?

    前段时间,跟候选人聊天的时候,一个有多年工作经验的资深 iOS 工程师告诉我,他最近正在学习 Machine Learning 相关的知识.他觉得,对于程序员来说,技术进步大大超过世人的想象,如果你不 ...

  9. 带你装B,带你飞的大数据时代

    我接触过的大数据有: 1.美国棱镜计划 2.前几天新闻报道的,苹果公司窃取用户隐私 3.百度的用户搜素习惯统计分析 4.淘宝的用户购物习惯分析,智能推荐宝贝 5.浏览器的智能标签页 ... 最想了解的 ...

随机推荐

  1. AcWing 138. 兔子与兔子 hash打卡

    很久很久以前,森林里住着一群兔子. 有一天,兔子们想要研究自己的 DNA 序列. 我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DNA 序列可能包含 26 个小写英文字母). 然后我们每 ...

  2. CSS:CSS Id 和 Class选择器

    ylbtech-CSS:CSS Id 和 Class选择器 1.返回顶部 1. CSS Id 和 Class id 和 class 选择器 如果你要在HTML元素中设置CSS样式,你需要在元素中设置& ...

  3. hive调用MapReduce之后遇到kill command之后卡住或者一直开在MapReduce之前

    https://blog.csdn.net/weixin_42158422/article/details/88876943

  4. yang文件语法格式

    前言 NETCONF(Network Configuration Protocol),该协议的配置功能非常强大,同时兼顾监控和故障管理,安全验证和访问控制,得到业界的一致认可,被广泛用来配置网络 NE ...

  5. CH1201 最大子序和 (单调队列)

    题目链接: AcWing 牛客 题目描述 输入一个长度为n的整数序列,从中找出一段不超过m的连续子序列,使得整个序列的和最大. 例如 1,-3,5,1,-2,3 当m=4时,S=5+1-2+3=7 当 ...

  6. 7-MySQL-Ubuntu-操作数据表的基本操作(二)

    修改数据表的结构 (1)向数据表中添加新的字段 alter table 表名 add 字段名 类型及约束;  (2)修改字段的属性(字段的数据类型和约束) 注:modify不能修改字段名,只能修改字段 ...

  7. str2int HDU - 4436 后缀自动机求子串信息

    题意: 给出 n 个串,求出这 n 个串所有子串代表的数字的和. 题解; 首先可以把这些串构建后缀自动机(sam.last=1就好了), 因为后缀自动机上从 root走到的任意节点都是一个子串,所有可 ...

  8. python之保留有限的历史记录(collections.deque)

    1.deque(maxlen=N)创建一个固定长度的队列,当有新的记录加入而队列已经满时,会自动移除老的记录. from collections import deque q = deque(maxl ...

  9. C语言指针和数组

    #include <stdio.h> int main() { /********************************************* * * 指针和数组: * 定义 ...

  10. CSS兼容问题资料汇集

    CSS兼容问题一直困扰着CSSer,面对各浏览器,往往感觉束手无策,愁眉不展.CSS Hack是在标准CSS没办法兼容各浏览器显示效果时才会用上的补救方法,在各浏览器厂商解析CSS没有达成一致前,我们 ...