k-NN
优点:精度高,对异常值不明显,无数据输入假定
缺点:计算复杂度高,空间复杂度高
适用数据范围:数值型和标称型
(疑惑:时空复杂度具体为的多少?
工作原理:将输入数据的每个特征与样本数据的特征进行比较,选择样本数据集中前k个最相似的数据,提取其中出现次数最多的分类标签
一般流程:
1. 收集数据:可以使用任意方法
2. 准备数据:距离计算(或者相似计算)所需要的格式
3. 分析数据:可以使用任意方法
4. 训练算法:不适用
5. 测试算法:计算错误率
6. 使用算法:首先需要输入样本数据和格式化的输出结果。然后运行k-NN算法判定输入数据分别属于哪种类别,最后应用对计算出的分类执行后续的处理。
伪代码:
1. 计算已知类别数据集中的点与当前点之间的距离;
2. 按照距离递增次序排序;
3. 选取与当前点距离最小的k个点;
4. 确定前k个点所在类别的出现频率;
5. 返回前k个点出现频率最高的类别作为当前点的预测分类。(也可以使用加权投票的方法)
(k的选择一般低于训练样本数的平方根
归一化数据:
为了使各个特征的权重相同,需做预处理。下面公式将任意取值范围的特征值转换至[0, 1]区间
new_value = (old_value - min) / (max - min)
(没有详细了解的知识:
numpy模板:
tile(A, reps) 将A以reps提供的次数进行复制,reps可以是单个整型,也可以是tuple。
sum 以及其参数axis 直接举例,二维的矩阵:axis=0是列相加, axis=1是行相加
argsort 返回排序的编号
matplotlib模板:
pyplot模板的用法
应该查看官方文档
python:
operator模板中的itemgetter
返回一个可调用的对象(实际上是一个函数),执行下标获取操作。这里的下标可以是列表等接受的整型或者切片,也可以是字典能接受的任意可hash的对象。