开集识别(open-set)算法(1)

所有内容基于目标识别

一、开集识别

    对于一个特定的识别问题,常用的识别方法是闭集识别(支持向量机分类器(SVM)、K-近邻分类器(KNN)、最大相关系数分类器(MCC)以及自适应高斯分类器(AGC)),即假定输入的待测样本一定属于已知的数据库。

    但在实际作战环境中,测试样本中常常含有未知样本,如果继续使用闭集识别系统,系统将错误地将来自未知类的测试样本识别为属于已知闭合集类之一正确率下降。为解决这个问题引入开集识别开集识别的目标识正确划分类别且正确拒绝其他未知类别。

二、目前先进的开集识别算法

OpenMax:利用来自预训练的深度神经网络的倒数第二层的激活矢量。使用EVT从每个类的平均值建模这些激活矢量的距离&#x

  • 9
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
好的,我来回答你的问题。手写数字识别是一个常见的机器学习问题,KNN算法是其中一种经典的算法。下面是一个简单的Python代码实现KNN算法进行手写数字识别,不使用sklearn库: ```python import numpy as np import operator def classify(input_data, data_set, labels, k): # 计算距离 data_size = data_set.shape[0] diff_mat = np.tile(input_data, (data_size, 1)) - data_set sq_diff_mat = diff_mat ** 2 sq_distances = sq_diff_mat.sum(axis=1) distances = sq_distances ** 0.5 # 选择距离最小的k个点 sorted_dist_indices = distances.argsort() class_count = {} for i in range(k): vote_label = labels[sorted_dist_indices[i]] class_count[vote_label] = class_count.get(vote_label, 0) + 1 # 返回最终分类结果 sorted_class_count = sorted(class_count.items(), key=operator.itemgetter(1), reverse=True) return sorted_class_count[0][0] def load_data(file_path): data_set = [] labels = [] with open(file_path) as f: for line in f.readlines(): line = line.strip() if not line: continue data = list(map(int, line.split(','))) data_set.append(data[1:]) labels.append(data[0]) return np.array(data_set), np.array(labels) if __name__ == '__main__': train_data, train_labels = load_data('train.csv') test_data, test_labels = load_data('test.csv') num_test = test_data.shape[0] error_count = 0 for i in range(num_test): predict_label = classify(test_data[i], train_data, train_labels, k=3) if predict_label != test_labels[i]: error_count += 1 print('错误率为:%f' % (error_count / float(num_test))) ``` 以上代码主要包含了三个函数:classify()、load_data()和main()。其中,classify()函数是KNN算法的核心实现,用于对一个测试样本进行分类;load_data()函数用于加载数据集;main()函数用于测试KNN算法,并输出错误率。 在上述代码中,我们首先使用load_data()函数加载数据集,这里我们使用的是MNIST手写数字数据集。然后,对于测试集中的每一个样本,我们将其传入classify()函数进行分类,并将分类结果与真实标签进行比较,以计算错误率。 需要说明的是,由于本代码实现简单,所以对于大规模的数据集,其运行速度可能会比较慢,因此在实际使用中需要进行优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值