在新环境linux和不太熟悉的python语言环境下开始了机器学习的学习。
首先学的就是k近邻算法。
k近邻算法很简单,简单来说,就是在一个平面坐标系上给出一些坐标,其中一些标记为A,一些标记为B,将他们作为训练样本,输入测试样本的时候,k近邻算法会根据测试样本的坐标,算出训练样本中所有点离该点的距离,取最近的前k个点中大部分点属于的那个类别标记作为该点的标记。
这是书上一个样例代码
from numpy import *
import operator
def createDataSet():
group = array([[1,1.1],[1,1],[0,0],[0,0.1]])
labels = ['A','A','B','B']
return group,labels
def classify0(inX, dataSet, labels, k):
#inX is the data needed to be classsified
#dataSet is sample training data
#k is how many nearest neighbors should be choosed
dataSetSize = dataSet.shape[0]
#shape[0] is the length of row, shape[1] is of coloum
diffMat = tile(inX, (dataSetSize,1)) - dataSet
#tile means new a x*y matrix,x is row. with all pivot is inX
print diffMat
sqDiffMat = diffMat**2
print sqDiffMat
sqDistances = sqDiffMat.sum(axis=1)
# c = np.array([[0, 2, 1], [3, 5, 6], [0, 1, 1]])
#print c.sum()
#print c.sum(axis=0)
#print c.sum(axis=1)
#answers are 19, [3 8 8], [ 3 14 2]
print sqDistances
这是学习这个代码的笔记
note for mathine learing
python{
1.reload()
2.Python 字典(Dictionary) get()函数返回指定键的值,如果值不在字典中返回默认值。
3.sorted{
描述
sorted() 函数对所有可迭代的对象进行排序操作。
sort 与 sorted 区别:
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
语法
sorted 语法:
sorted(iterable[, cmp[, key[, reverse]]])
参数说明:
iterable -- 可迭代对象。
cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
}
4.dict.iteritems():将字典转化成二元列表
5.x.itergetter(a):获取x第a个域的元素
}
numpy{
1.array and matrix are different.
2.mat(array): from array to mat
3. Matname.I: the reverse of Matname
4.matname.shape:建立一个4×2的矩阵c, c.shape[1]为第一维的长度,c.shape[0] 为第二维的长度。
5.tile numpy.tile([0,0],(2,1))#在列方向上重复[0,0]1次,行2次
6.argsort(): sort and return index
}
看了一下书上的kNN手写识别算法,想通过python+opencv实现一个用k近邻算法识别鼠标做图做出的数字图像。同时学习一下opencv,熟悉一下python。
KNN手写识别算法已经发在另一篇博客里面了。
刚刚发现可以直接通过opencv调用knn算法
knn = cv2.ml.KNearest_create()
knn.train(trainData,responses)
ret, results, neighbours ,dist = knn.find_nearest(newcomer, 3)