K-近邻算法总结
2016-06-08 21:40
218 查看
k近邻学习是一种常见的监督学习方法,工作机制是给定测试样本,基于某种距离度量找出训练集中与其最近的k个训练样本,然后根据投票法确定测试样本的类别,k紧邻法是懒惰学习的著名代表。
当k=1时,假设给定样本是x,它的最近的邻居是z,则此时出错的概率为x与z标记不同的概率,不超过贝叶斯最优分类器的错误率的两倍
K近邻算法主要有以下特点
优点:精度高,对异常值不敏感,无输入数据嘉定,没有训练过程
缺点是每次都要计算所有样本和测试样例的距离,而且要对距离排序,计算复杂度高,空间复杂度高
下面是python实现的k近邻算法,假设从文件读入数据,输入数据由三维特征和标记构成
当k=1时,假设给定样本是x,它的最近的邻居是z,则此时出错的概率为x与z标记不同的概率,不超过贝叶斯最优分类器的错误率的两倍
K近邻算法主要有以下特点
优点:精度高,对异常值不敏感,无输入数据嘉定,没有训练过程
缺点是每次都要计算所有样本和测试样例的距离,而且要对距离排序,计算复杂度高,空间复杂度高
下面是python实现的k近邻算法,假设从文件读入数据,输入数据由三维特征和标记构成
from numpy import * import matplotlib import matplotlib.pyplot as plt import operator #参考自《机器学习实战》 # 从文件处理输入 def fileToMatrix(filename): fr = open(filename, 'r') arrayOfLines = fr.readlines() numberOfLines = len(arrayOfLines) sampleMatrix = zeros((numberOfLines, 3)) labels = [] index = 0 for line in arrayOfLines: line = line.strip() listFromLine = line.split('\t') for i in range(3): sampleMatrix[index][i] = float(listFromLine[i]) labels.append(int(listFromLine[-1])) index += 1 return sampleMatrix, labels # 归一化特征值 # 在处理不同取值范围的特征值时,我们通常采用的方法是将数值归一化 # 如果不归一化的话,那么取值范围大的特征将对结果产生更大的影响 def autoNorm(dataset): minVals = dataset.min(0) maxVals = dataset.max(0) ranges = maxVals - minVals length = dataset.shape(0) base = tile(minVals, (length, 1)) dataset = (dataet-base) / (tile(ranges, (length, 1))) return dataset # 分类 def classify(inX, dataset, labels, k): datasetSize = dataset.shape[0] dataX = tile(inX, (datasetSize, 1)) dataDiffSquare = (dataset-dataX) ** 2 dataDist = (dataDiffSquare.sum(axis = 1)) ** 0.5 indiciesOrder = dataDist.argsort() voteCount = {1 : 0, 2 : 0, 3 : 0} for i in range(k): voteCount[labels[indiciesOrder[i]]] += 1 ans = sorted(voteCount.items(), key=lambda d:d[1], reverse=True) return ans[0][0] dataset, labels = fileToMatrix('datingTestSet.txt') inX = [40923,7.326976,0.953952] ans = classify(inX, dataset, labels, 9) #print(ans) fig = matplotlib.pyplot.figure() ax = fig.add_subplot(111) ax.scatter(dataset[:, 1], dataset[:, 2]) matplotlib.pyplot.show()
相关文章推荐
- 用Python从零实现贝叶斯分类器的机器学习的教程
- My Machine Learning
- 机器学习---学习首页 3ff0
- Spark机器学习(一) -- Machine Learning Library (MLlib)
- 反向传播(Backpropagation)算法的数学原理
- 关于SVM的那点破事
- 也谈 机器学习到底有没有用 ?
- TensorFlow人工智能引擎入门教程之九 RNN/LSTM循环神经网络长短期记忆网络使用
- TensorFlow人工智能引擎入门教程之十 最强网络 RSNN深度残差网络 平均准确率96-99%
- TensorFlow人工智能引擎入门教程所有目录
- 如何用70行代码实现深度神经网络算法
- 量子计算机编程原理简介 和 机器学习
- 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)
- 已经证实提高机器学习模型准确率的八大方法
- 初识机器学习算法有哪些?
- 机器学习相关的库和工具
- 10个关于人工智能和机器学习的有趣开源项目
- 机器学习实践中应避免的7种常见错误
- 机器学习常见的算法面试题总结
- 不平衡数据处理技术——RUSBoost