问:在机器学习训练时候,有时候会出现正负样本极其不平衡的情况,什么情况下会出现这种情况?有何有效的方法避免此类问题?
答:
场景:在一般人群中生病vs没病;在一般工作状态下故障vs无故障;在一般交易中正常vs欺诈,等。
解决方法:
1、收集更多或不同的数据。
2、生成合成的样本。
3、数据重采样。
4、将性能指标更改为混淆矩阵、精确性和召回率。F1得分,kappa,ROC曲线等。
5、采用内建非平衡算法,如 RUS Boost Tree等。
6、添加惩罚函数,将惩罚项加入到不同的cost函数中。
7、尝试异常检测,改变检测算法。
问:为啥要用Focal Loss,为啥不用SoftMax Loss?
答:
1、Focal Loss在训练过程中,会根据分类样本的难易性,自动调整样本的权重,这样训练过程中,可以将关注点集中于难以分类的样本上,不会关注过多的简单样本,可以解决样本不均衡的问题。
2、在图像分割类问题中,对于小物体的分割,背景的像素点比前景要多很多,正负样本存在不均衡的问题,Focal Loss可以集中于难以分类的像素上,解决简单样本过多的问题,都是softmax loss不具备的。
问:不直接使用第三方库,写一个计算二维灰度图像的直方图函数histogram,bin个数为256?
答:
代码:
def hist(im):
assert isinstance(im, np.ndarray) and (im.dtype == np.dtype('uint8'))
ret = np.zeros((256,), dtype=np.float)
for elem in im.flatten():
assert 0 <= elem < 256
ret[elem] += 1
ret = ret / np.sum(ret)
return ret