ML一:python的KNN算法
(1):list的排序算法:
参考链接:http://blog.csdn.net/horin153/article/details/7076321
示例: DisListSorted = sorted(DisList, key = lambda DisList: DisList[1], reverse =False) 使用lambda函数,利用元素索引作为key;
在 Python 中, 当需要对一个 list 排序时, 一般可以用 list.sort() 或者 sorted(iterable[, cmp[, key[, reverse]]]).
其中:
cmp(e1, e2) 是带两个参数的比较函数, 返回值: 负数: e1 < e2, 0: e1 == e2, 正数: e1 > e2. 默认为 None, 即用内建的比较函数;
key 是带一个参数的函数, 用来为每个元素提取比较值. 默认为 None, 即直接比较每个元素;
reverse 是一个布尔值, 表示是否反转比较结果.。reverse =False 代表从小到大...
(2):几种排序算法:
1, 通常, key 和 reverse 比 cmp 快很多, 因为对每个元素它们只处理一次; 而 cmp 会处理多次.
也就是说, 同等情况下, 写 key 函数比写 cmp 函数要高效很多. 2, 对一些貌似比较复杂的排序, 也是不需要写 cmp 函数的, 举例如下:
>>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10),] 用元素索引做 key:
>>> sorted(students, key=lambda student: student[2]) # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] 用元素已经命名的属性做 key:
>>> sorted(students, key=lambda student: student.age) # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] 用 operator 函数来加快速度, 上面两个排序等价于:
>>> from operator import itemgetter, attrgetter
>>> sorted(students, key=itemgetter(2))
>>> sorted(students, key=attrgetter('age')) 用 operator 函数进行多级排序, 这个就是比较复杂的应用. 按我以前的理解, 是一定要写个定制的 cmp 函数的. 现在看来, 以前真的够笨.
# sort by grade then by age
>>> sorted(students, key=itemgetter(1,2))
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
>>> sorted(students, key=attrgetter('grade', 'age'))
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)] 3, 根据字典值排序
>>> d = {'a':2, 'b':23, 'c':5, 'd':17, 'e':1} #1, 返回 pair 对:
from operator import itemgetter
>>> sorted(d.iteritems(), key=itemgetter(1), reverse=True)
[('b', 23), ('d', 17), ('c', 5), ('a', 2), ('e', 1)] #2, 仅返回 keys:
>>> sorted(d, key=d.__getitem__, reverse=True)
['b', 'd', 'c', 'a', 'e'] 4, sorted() 会返回一个新的已经排好序的 list.
list.sort() 是就地排序, 以节约空间, 当然就不会返回一个排好序的新的 list 了. 这对大的 list 排序是有空间优势的.
(3):KNN算法实例:
<p># DataMatrix 为向量数组 列表
</p><p> def creatDataSetLabel(DataMatrix, LabelVec):
Classifier ={}
if len (LabelVec) !=len (DataMatrix):
return Classifier
for idx in range(len (LabelVec)):
Classifier[LabelVec[idx] ] = DataMatrix[idx]
return Classifier</p>
<p>#filename 为文件夹
</p><p>def trainClassifier(filename):
DataMatrix= creatDataSet(filename)
LabelNum = len(DataMatrix )
LabelVec = creatLabel(LabelNum)
Classifier= creatDataSetLabel(DataMatrix,LabelVec)
return Classifier
</p><p>
</p><p>#输入向量,返回k近邻!
</p><p>def classify(Classifier, Feature ,K):
if len(Feature) != len(Classifier[0] ):
return 0
kNear = []
Distance ={}# similarity
for i in range(len(Classifier) ):
DisVec = Classifier[i] - Feature
DisMat = DisVec **2
Distance[i] = DisMat.sum()
DisList =[]
for key in Distance:
DisList.append([key, Distance[key] ])</p><p>
DisListSorted = sorted(DisList, key = lambda DisList: DisList[1], reverse =False) #排序 距离
for i in range(K):
kNear.append(DisListSorted[i] )
return kNear
</p>
ML一:python的KNN算法的更多相关文章
- Python实现KNN算法及手写程序识别
1.Python实现KNN算法 输入:inX:与现有数据集(1xN)进行比较的向量 dataSet:已知向量的大小m数据集(NxM) 个标签:数据集标签(1xM矢量) k:用于比较的邻居数 ...
- Python实现KNN算法
Python实现Knn算法 关键词:KNN.K-近邻(KNN)算法.欧氏距离.曼哈顿距离 KNN是通过测量不同特征值之间的距离进行分类.它的的思路是:如果一个样本在特征空间中的k个最相似(即特征空间 ...
- [Python] 应用kNN算法预测豆瓣电影用户的性别
应用kNN算法预测豆瓣电影用户的性别 摘要 本文认为不同性别的人偏好的电影类型会有所不同,因此进行了此实验.利用较为活跃的274位豆瓣用户最近观看的100部电影,对其类型进行统计,以得到的37种电影类 ...
- 利用Python实现kNN算法
邻近算法(k-NearestNeighbor) 是机器学习中的一种分类(classification)算法,也是机器学习中最简单的算法之一了.虽然很简单,但在解决特定问题时却能发挥很好的效果.因此,学 ...
- 基于python 实现KNN 算法
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/11/7 14:50 # @Author : gylhaut # @Site ...
- 吴裕雄 python 机器学习-KNN算法(1)
import numpy as np import operator as op from os import listdir def classify0(inX, dataSet, labels, ...
- knn算法详解
邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代 ...
- 机器学习回顾篇(6):KNN算法
1 引言 本文将从算法原理出发,展开介绍KNN算法,并结合机器学习中常用的Iris数据集通过代码实例演示KNN算法用法和实现. 2 算法原理 KNN(kNN,k-NearestNeighbor)算法, ...
- [Python]基于K-Nearest Neighbors[K-NN]算法的鸢尾花分类问题解决方案
看了原理,总觉得需要用具体问题实现一下机器学习算法的模型,才算学习深刻.而写此博文的目的是,网上关于K-NN解决此问题的博文很多,但大都是调用Python高级库实现,尤其不利于初级学习者本人对模型的理 ...
随机推荐
- Selenium三种等待的使用方式
在UI自动化测试中,必然会遇到环境不稳定,网络慢的情况,这时如果你不做任何处理的话,代码会由于没有找到元素,而报错.这时我们就要用到wait(等待),而在Selenium中,我们可以用到一共三种等待, ...
- [置顶]
来自 Google 的高可用架构理念与实践
转自: https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=402738153&idx=1&sn=af5e76aad ...
- POJ 1979 Red and Black (BFS)
链接 : Here! 思路 : 简单的搜索, 直接广搜就ok了. /****************************************************************** ...
- UNIX C 文件权限 Part2_day01
1.文件访问测试 测试调用进程对指定文件是否拥有足够的访问权限 #include <unistd.h> int access(const char* pathname,int mode); ...
- UOJ #310 黎明前的巧克力 (FWT)
题目传送门 题目大意:给你一个序列,定义一个子序列的权值表示子序列中元素的异或和,现在让你选出两个互不相交的子序列,求选出的这两个子序列权值相等的方案数,$n,a_{i}\leq 10^{6}$ 这是 ...
- python爬虫08 | 你的第二个爬虫,要过年了,爬取豆瓣最受欢迎的250部电影慢慢看
马上就要过年啦 过年在家干啥咧 准备好被七大姑八大姨轮番「轰炸」了没? 你的内心 os 是这样的 但实际上你是这样的 应付完之后 闲暇时刻不妨看看电影 接下来咱们就来爬取豆瓣上评分最高的 250部电影 ...
- UVa - 11283 - PLAYING BOGGLE
先上题目 Problem F PLAYING BOGGLE Boggle® is a classic word game played on a 4 by 4 grid of letters. The ...
- mongodb-主从复制
1 主从复制: 一个概念,在sqlserver或者说是mysql也有 2 主从复制解决了哪些问题??? 读写压力:以前是一个mongodb去承载海量的读和写,这样的话终有瓶颈的.使用一主多从, 从服务 ...
- [bzoj1090][SCOI2003]字符串折叠_区间dp
字符串折叠 bzoj-1090 SCOI-2003 题目大意:我说不明白...链接 注释:自己看 想法:动态规划 状态:dp[i][j]表示从第i个字符到第j个字符折叠后的最短长度. 转移:dp[l] ...
- Ajax json 数据格式
ajax : 是么是同步 什么事异步 同步现象:客户端发送请求到服务端,当服务端返回响应之前,客户端都处于等待卡死状态. 异步现象:客户端发送请求到服务器端,无论服务器是否返回,客户端都可以随意做其他 ...