常见的分类算法
1、 K-近邻算法(KNN)
2、贝叶斯分类器
3、决策树
4、人工神经网络
5、支持向量机(SVM)
K-近邻算法(KNN)
KNN是通过测量不同特征值之间的距离进行分类。
在KNN中,通过计算对象间距离来作为各个对象之间的非相似性指标,避免了对象之间的匹配问题,在这里距离一般使用欧氏距离或曼哈顿距离:
同时,KNN通过依据k个对象中占优的类别进行决策,而不是单一的对象类别决策。这两点就是KNN算法的优势。
思想总结:就是在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那个分类,其算法的描述为:
1)计算测试数据与各个训练数据之间的距离;
2)按照距离的递增关系进行排序;
3)选取距离最小的K个点;
4)确定前K个点所在类别的出现频率;
5)返回前K个点中出现频率最高的类别作为测试数据的预测分类。
from numpy import *
import operator
#从列方向拓展
#tile(a,(2,1)) 2行1列
def knn(k,testdata,traindata,labels):
traindatasize=traindata.shape[0] #获取训练集行数
dif=tile(testdata,(traindatasize,1))-traindate
sqdif=dif**2
sumsqdif=sqdif.sum(axis=1) #求和 a.sum(axis=1) 各行求和 a.sum(axis=0) 各列求和
distance=sumsqdif**0.5
sortdistince=distance.argsort() #从小到大排序并编号
count={}
for i in range(0,k):
vote=label[sortdistince[i]]
count[vote]=count.get(vote,0)+1
sortcount=sorted(count.items(),operator.itemgetter(1).reverse=True) #降序统计类别计数
return sortcount[0][0]