今天下午想要明白如何将一个标准数据集通过代码的方式分为Non-iid的,然后在实验室思考这个问题了好一会儿,也调查了好一会儿。作为一个菜鸡来简单回答一下,如有不对之处欢迎大家指正。
首先,我们先看看西瓜书是怎么说明iid的(即独立同分布independent and identically distributed).
输入空间X的所有样本服从一个隐含未知的分布,训练数据所有样本都是独立地从这个分布上采样而得。
在Wiki百科里面,是这么说的:
在概率论与统计学中,独立同分布(英语:Independent and identically distributed,缩写为IID)是指一组随机变量中每个变量的概率分布都相同,且这些随机变量互相独立。一组随机变量独立同分布并不意味着它们的样本空间中每个事件发生概率都相同。例如,投掷非均匀骰子得到的结果序列是独立同分布的,但掷出每个面朝上的概率并不相同。
可能这么说还不是很直观,我们分开陈述:
1. 独立:每次抽样之间没有关系,不会相互影响。比如你在随便丢骰子,每次抛到的数字是几就是几,是独立的。 但如果我要求你要两次抛到的数字和大于等于9,第一次和第二次抛就不独立,因为他们相互关联。 2. 同分布:你丢骰子,每次丢骰子到任何一个数字的概率都是1/6,是相等概率。或者说,在概率空间里面, 你不论进行几次抽样实验,他们都服从同样一个分布。又比如说,现在一个大小为pi的圆放在大小为4的 正方形,你丢一根针进去,结果分为在圆里面和圆外面。每次丢进这个圆的概率都是pi/4,你重复+∞次会 无限接近于这个pi/4.
怎么样,现在是不是对iid认识要清楚一些了。
机器学习是基于符号和概率,在传统有监督机器学习研究里,IID是一个重要假设,因为人们希望训练集和测试集满足IID,这是通过训练数据获得的模型能够在测试集表现较好效果的重要保障。
有一个用于跑实验的标准数据集叫cifar-10,该数据集有6w张图片,分为10类,每类均为6k张图片,是32*32大小的像素。我们在做传统的图像分类实验中,数据集采用均匀划分的5w个作为训练集,1w个样本作为测试集。因为训练集和测试集都是均匀划分的,你在这两个集合中随便抽取一个样本,它属于其中一类的概率都是1/10。这就是IID。
假设现在我们现在让10个人去随心所欲去收集一个fake Cifar-10数据集,也不去限制他每一类要收集多少张,最后也是合起来一共6w张,然后我们再非常随机的进行训练集和测试集的划分。比如训练集中,“ship”占训练集的1/5。而我们在测试集中,“ship”发现只占“1/20”。如果我们将这些类进行投票,并且绘制在一个柱状统计图中。测试集一眼看过去的曲线趋势和训练集的曲线趋势完全不一样,所以训练集和测试集99.999999999%概率不是独立同分布的。
在一些研究领域中,我们不仅会关注上述标签分布的Non-iid,有的时候也会关注到数据本身的Non-iid,举个例子的话,一个橘子,你在不同的光照下去拍得到的照片本身也会有分布的不一致,而这样在不同光照下的拍摄的照片放在一起,整体上也是数据分布的Non-iid。
值得一提的是,现在的研究也开始着眼于Non-iid场景了。