对于图像处理方面的任务来说,常规的套路:
- 收集数据并给定标签
- 训练一个分类器
- 测试,评估
def train(train_images, train_labels):
# build a model for images -> labels...
return model
def predict(model, test_images):
# predict test_labels using the model...
return test_labels
K近临算法(KNN)
- 如果K=3,绿色圆点的最近的3个邻居是2个红色小三角形和1个蓝色小正方形,少数从属于多数,基于统计的方法,判断绿色的这个待分类点属于红色的三角形一类
- 如果K=5,绿色圆点的最近的5个邻居是2个红色三角形和3个蓝色的正方形,还是少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于蓝色的正方形一类
对于未知类别属性数据集中的点:
- 计算已知类别数据集中的点与当前点的距离
- 按照距离依次排序
- 选取与当前距离最小的K个点
- 确定前K个点所在类别的出现概率
- 返回前K个点出现频率最高的类别作为当前点预测分类
概述:KNN算法本身简单有效,它是一种lazy-learning算法。分类器不需要使用训练集进行训练,训练时间复杂度为0。KNN分类的计算复杂度和训练集中的文档数目成正比,也就是说,如果训练集中文档总数为n,那么KNN的分类时间复杂度为O(n)。
对于K值的选取,距离度量和分类决策规则是该算法的三个基本要素。
- KNN算法缺点:当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。
- 解决办法:不同的样本给予不同的权重项
计算方法:
KNN算法代码:
import numpy as np
class NearestNeighbor:
def __init__(self):
pass
# 记录所有训练数据
def train(self, X, y):
"""X is N*D where each row is an example. Y is l-dimension of size N"""
# the nearest neighbor classifier simply remembers all the training data
self.Xtr = X