one class问题
- one class与2分类,多分类的区别?
- two class:"是"自行车,或者"不是"自行车,训练集里有自行车的数据和不是自行车的数据。模型判断是属于自行车类,还是others类。
- mutil class: 人脸识别等,每个人就是一个类别;COCO数据集包含80个class的数据;
- one class:"是"自行车,或者"不是"自行车,但是训练集里只给了自行车的数据。模型直接把不属于这一类的数据归为不是,而不是由于属于另一类才返回的“不是”结果。
- 场景:
进入商场的人是否购买一件商品(比如牛奶)的数据,肯定是买的人占总体比例少,但是如果two class的话,正负样本十分不均衡,训练器会偏向负样本,甚至全分过去,精度也不会低,这时候当做one class问题考虑的话,只把购买的人的数据放进训练集,来判断一个人是不是购买这个商品。 - 常用方法:
- SVDD(Support Vector Data Description):
采用一个球形方法,该算法在特征空间中获得数据周围的球形边界,这个超球体的体积是最小化的,从而最小化异常点的影响。当只有一个class,训练出一个最小的超球面,将定义的类别的数据用球面全部“包起来”,当测试阶段,有一个新的数据点时,如果这个数据点落在超球面内,就属于这个类,否则不是。 - OCSVM(one class support vector machine):
将数据样本通过核函数映射到高维特征空间,使其具有更良好的聚集性,在特征空间中求解一个最优超平面实现目标数据与坐标原点的最大分离,坐标原点被假设为唯一的一个异常样本。
- SVDD(Support Vector Data Description):
few shot(one-shot)问题
- zero-shot learning和one-shot learning?
- zero-shot learning
训练集中没有某个类别的样本,但是可以学到一个映射,能通过这个映射得到这个新类的特征。
即: 对训练集中没有出现过的类别,模型能自动创造出相应的映射: X -> Y - one-shot learning
训练集中,每个类别都有样本,但都只是少量样本(只有一个或几个)。可以在一个更大的数据集上或者利用knowledge graph、domain-knowledge 等方法,学到一个一般化的映射,然后再到小数据集上进行更新升级映射。
- zero-shot learning
一篇综述:https://zhuanlan.zhihu.com/p/61215293
异常检测问题
- 什么是异常检测?
给定数据集x(1),x(2),…,x(m),我们假使数据集是正常的,我们希望知道新的数据xtest是不是异常的,即这个测试数据不属于该组数据的几率如何。我们所构建的模型应该能根据该测试数据的位置告诉我们其属于一组数据的可能性P(x)。 - 类别:
- 奇异点检测(novelty detection):当训练数据中没有离群点,目标是用训练好的模型去检测另外未见过的样本;
- 离群点检测(outlier detection):当训练数据中包含离群点,模型训练时要匹配训练数据的中心样本,忽视训练样本中的其它异常点;
- 场景:
- 数据预处理
- 病毒木马检测
- 工业制造产品检测
- 网络流量检测
- 常用方法:
- sklearn中的方法OneClassSVM(奇异点检测)
- Isolation Forest(离群点检测)
- Local Outlier Factor(离群点检测)等