1.常见的分类算法:
(1).KNN算法
(2).贝叶斯算法
(3).决策树算法
(4)人工神经网络算法
(5)支持向量机(SVM)算法
2.今天我们用KNN算法解决手写体数字的识别问题(包括验证码识别,二维码识别等都可以归属为同一类问题)
KNN算法又名K-近邻算法,总体思想是:通过把现实中的数据映射到坐标系,然后通过计算"点"之间的距离(欧几里得公式)sqr[(x1-xm)**2+(y1-ym)**2]
可以翻译成如下步骤:
(1).计算欧式距离
(2).按照递增顺序排位
(3).选取与当前距离最小的K个点
(4).确定前K个点所在的类的出现频率
(5)返回前K个点出现频率最高的类别作为当前点的预测分类
3.算法实现步骤:
(1)处理数据
(2)数据向量化
(3)计算欧几里得距离
(4)根据距离分类
4.KNN算法优点:
(1).简单、易实现、易理解,无需参数估计及训练
(2).适用于多分类问题
(3).总的思想是:"物以类聚"
KNN算法模块:
#KNN算法模块:
def knn(k,testdata,traindata,labels):
#k代表分类数,测试数据,训练数据,所得到的测试结果属于哪一类(labels)
traindata.shape[0]
#shape返回两个参数(数组),shape[0]得到训练集行数
dif=np.tile(testdata,(traindata,1))-traindata
#利用numpy中的tile扩展维数后,才能进行计算,列数确定一直,扩展行(行扩展一直,列不变)
sqdif=dif**2
#对差值的每个元素取平方
sumsqdif=sqdif.sum(axis=1)
#按行进行计算,得到列向量组,axis=0则得到的是行向量
distance=sumsqdif**0.5
sortdistance=distance.argsort()
#按照升序去排
count={} #建立一个空字典
for i in range(0,k):
vote=labels[sortdistance[i]]
count[vote]=count.get(vote,0)+1
#get(5,0)+1,意思是在count字典中出现一次vote值,则对应加1{5:1,,,},多次循环累加
sortcount=sorted(count.items(),key=operator.itemgetter(1),reverse=True)
#排序依据字典中的第一个词去排序,默认是升序(False)
#key指定依据哪个区排,operator.itemgeter(1)指定第一个元素去排
return sortcount[0][0]
手写体字体的识别(数字、图片、二维码、验证码(1-26个字母)等与此类似):
手写体--->拍照--->标准化(设定长和宽的像素大小)--->转文本--->加载数据--->训练数据---用