kNN-------k-邻近算法
1.kNN是non-parametric分类器,既不做分布式假设,直接从数据估计概率密度;
2.kNN不适用于高维数据
优点:
1.无需估计参数,无需训练;
2.特别适合于多分类问题(对象具有多个标签)。
缺点:
1.当样本容量不平衡是,输入有个新样本,该样本的K个邻值中大容量样本占多数,对分类不利;
2.计算量过大,需要计算待分类文本到每个样本的距离。
改进办法:
1.实现对样本属性进行适当删减,删除对结果影响较小的属性;
2.对距离加权,采取和样本距离小的待分类文本距离权重大。
算法伪代码:
1.计算已知类别数据集中的点与当前点之间的距离;
2.按照距离递增次排序;
3.选取与当前点距离最小的k个点;
4.确定前k个点所在类别的出现频率
5.返回前k个点出现频率最高的类别作为当前点的预测分类
python代码实现KNN算法
def kNN(inX, dataSet, labels, k):
dataSetSize = dataSet.shape[0] #shape[0]读取数组一维长度,既知道有多少个数组
diffMat = tile(inX, (dataSetSize,1)) - dataSet