机器学习初探———【K-近邻算法】

来源:互联网 发布:怎么加雷盾网络验证 编辑:程序博客网 时间:2024/05/02 05:03

一句话:测量不同特征值之间的距离进行分类


优点:精度高,对异常值不敏感,无数据假定输入。

缺点:计算复杂度高,空间复杂度高。

使用数据范围:数值型和标称型。



k-近邻算法的一般流程:

收集数据:任何方法。

准备数据:距离计算所需要的数值,最好是结构化数据格式。

分析数据:任何方法。

训练方法:此步骤不适用于k-近邻算法。

测试方法:计算错误率。

使用算法:输入样本和结构化输出结果>>>>运行k-近邻算法判断属于哪一个类>>>>对分类后续处理



下面开始:

在文件夹下建立kNN.py

1.导入数据:


from numpy import *  //numpy科学计算包import operator      //运算符模块def createDataSet():    group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])    labels = ['A','A','B','B']    return group, labels


因为我们通常只能可视化处理三维以下特征,所以每个数据点通常使用两个特征


可以在python下键入,查看下数据;

>>>import kNN>>>group, labels = kNN.createDataSet()>>>group

2.从文本中解析数据:

该函数是将每组数据划分到某一类中:

伪代码:

(1)计算已知数据集中的点与当前点的距离。

(2)按照距离递增次序排序。

(3)选取与当前点距离最小的k个点。

(4)确定前k个点所在类别的出现频率。

(5)返回当前k个点出现频率最高的类别作为当前的预测分类(看哪个类别出现的多就是了)。


def classify0(inX, dataSet, labels, k)://你要分类的数据,训练集,标签向量(元素数目和矩阵dataSet的行数相同),k个近邻
//计算距离    dataSetSize = dataSet.shape[0]      //    diffMat = tile(inX, (dataSetSize,1)) - dataSet    sqDiffMat = diffMat**2    sqDistances = sqDiffMat.sum(axis=1)    distances = sqDistances**0.5    sortedDistIndicies = distances.argsort()         classCount={} 
//选择距离最小的k个点             for i in range(k):        voteIlabel = labels[sortedDistIndicies[i]]        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
//排序    sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)    return sortedClassCount[0][0]






0 0
原创粉丝点击