def classify0(inX, dataSet, labels, k):
dataSetSize = dataSet.shape[0] 计算行数return group, labels
#####说明:sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(1), reverse=True)
函数参数解释:sorted(iterable[, cmp[, key[, reverse]]])
sorted第一个参数为list(即[]序列)或者迭代器(本例)。
cmp参数:指定排序时进行比较的函数,可以指定一个函数或者lambda函数,如:
cmp接受一个函数,拿整形举例,形式为:
def f(a,b):
return a-b
如果排序的元素是其他类型的,如果a逻辑小于b,函数返回负数;a逻辑等于b,函数返回0;a逻辑大于b, 函数返回正数就行了
key参数:指定序列中排序的元素,这里调用opertor.itemgetter(1),就是取classcount序列的每个元素第2个值排序。 再如: students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)],其中key=operator.itemgetter(1,2),就是表示取 students的每个元素的第2个值
reverse参数:接受False 或者True 表示是否逆序
=======================================
调用
import os
os.chdir('C:\\Users\\admin\\Desktop')
import kNN
group,label=kNN.createDataSet()
t,myset,sort=kNN.classify0([0,0],group,label,3)
for key in myset:
print(key+':')
print(myset[key])
==================================================================
需要了解的背景知识
==============================================================
operator.itemgetter函数
operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子。
a = [1,2,3]
>>> b=operator.itemgetter(1) //定义函数b,获取对象的第1个域的值
>>> b(a)
2
>>> b=operator.itemgetter(1,0) //定义函数b,获取对象的第1个域和第0个的值
>>> b(a)
(2, 1)
要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。
sorted函数
Python内置的排序函数sorted可以对list或者iterator进行排序,官网文档见:http://docs.python.org/2/library/functions.html?highlight=sorted#sorted,该函数原型为:
sorted(iterable[, cmp[, key[, reverse]]])
参数解释:
(1)iterable指定要排序的list或者iterable,不用多说;
(2)cmp为函数,指定排序时进行比较的函数,可以指定一个函数或者lambda函数,如:
students为类对象的list,没个成员有三个域,用sorted进行比较时可以自己定cmp函数,例如这里要通过比较第三个数据成员来排序,代码可以这样写:
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
sorted(students, key=lambda student : student[2])
(3)key为函数,指定取待排序元素的哪一项进行排序,函数用上面的例子来说明,代码如下:
sorted(students, key=lambda student : student[2])
key指定的lambda函数功能是去元素student的第三个域(即:student[2]),因此sorted排序时,会以students所有元素的第三个域来进行排序。
有了上面的operator.itemgetter函数,也可以用该函数来实现,例如要通过student的第三个域排序,可以这么写:
sorted(students, key=operator.itemgetter(2))
sorted函数也可以进行多级排序,例如要根据第二个域和第三个域进行排序,可以这么写:
sorted(students, key=operator.itemgetter(1,2))
即先跟句第二个域排序,再根据第三个域排序。
(4)reverse参数就不用多说了,是一个bool变量,表示升序还是降序排列,默认为false(升序排列),定义为True时将按降序排列。
sorted函数更多的例子可以参考官网文档:https://wiki.python.org/moin/HowTo/Sorting/。
第一章 K-neans算法
1,pip list 查看安装的包
2,os.chdir(‘’)设置工作目录
==========================================================
3.from import 与import的区别
导入modules,import与from...import的不同之处在于,简单说:
# 如果你想在程序中用argv代表sys.argv,
# 则可使用:from sys import argv
# 一般说来,应该避免使用from..import而使用import语句,
# 因为这样可以使你的程序更加易读,也可以避免名称的冲突
==============================================================
4.numpy.tile(A,reps)函数的使用,即数组A的重复次数reps
(1)A的类型众多,几乎所有类型都可以:array, list, tuple, dict, matrix以及基本数据类型int, string, float以及bool类型。
reps的类型也很多,可以是tuple,list, dict, array, int,bool.但不可以是float, string, matrix类型。
假定A的维度为d,reps的长度为len
(2)函数操作示例
首先给几个示例:
>>> tile(1.3,2)
array([ 1.3, 1.3])
array([1, 2, 1, 2, 1, 2])
>>> tile((1,2,3),2)
array([1, 2, 3, 1, 2, 3])
>>> a=[[1,2,3],[4,5,5]]
>>> tile(a,2)
array([[1, 2, 3, 1, 2, 3],
[4, 5, 5, 4, 5, 5]])
>>> tile([1,2,3],[2,2,2,2])
array([
[ [[1, 2, 3, 1, 2, 3],[1, 2, 3, 1, 2, 3]], [[1, 2, 3, 1, 2, 3],[1, 2, 3, 1, 2, 3]] ],
[ [[1, 2, 3, 1, 2, 3], [1, 2, 3, 1, 2, 3]],[[1, 2, 3, 1, 2, 3],[1, 2, 3, 1, 2, 3]] ]
])
===========================================================================
5,数组项目的求和,比如数组A
A.sum(axis=(0或者1)),其中axis=0,表示列求和;axis=1,表示行求和
===============================================================
6.数组的大小索引函数argsort()
举例: a=numpy.array([1,3,2]) a.argsort()
输出结果为[0,2,1]就是每个向量的值大小的索引
举例: x = numpy.array([[0, 3], [2, 2]]) x.argsort()
[[0,1],[0,0]]