各位大家好,明天就是小年了,已经感受到了过年的味道了,提前祝大家小年快乐。
好,话不多说,今天让我们来一起分享下怎么样来去选择一个好的特征,并且当我们区分出好的特征的时候,好的特征意味着什么。
在这一篇文章中,我们将会用到机器学习的分类器来作为贯穿整篇文章的例子,因为分类器只有在我们提供了好的特征以后才可以为我们的发挥出自己的好的效果,这也意味着找到好特征是机器学习能够学好的一个重要的前提之一,那么这个时候问题就来了,什么是好特征?你怎么知道他算得上是好特征?接下来,让我们来解决这些问题。
我们用特征来描述一个物体,比如说在这一类物体中,他们有长度,颜色,这两种特征的属性,那么用这个特征来描述这个类别的时候,好的特征会让我们更加轻松的来辨别出相应特征所代表的类别,而不好的特征会混乱我们的感官,会让一些没有用的分析来浪费我们的分析和计算资源。
好,现在我们来找一个更加贴近生活的实例。想想我们家都养的可爱的狗狗吧。比如说金毛和吉娃娃,他们其实可以有很多的特征进行对比,比如说眼睛的颜色,毛色,体重,身高,长度等等,为了简化上述的多种类型,我们接下来主要会用毛色,身高这两种属性,并且我们也只假设这两种狗只有偏黄色和偏白色这两种颜色属性。
那我们先来开始对比毛色,那么在我们构造的这个虚拟世界上有多少偏黄色或者偏白色的金毛呢?结果发现实际上偏黄色和偏白色的金毛都基本各占一半,并且当我们分析吉娃娃的时候,发现吉娃娃的颜色其实也是可以对半分的,这个时候我们将这些数据用两种属性展示出来,偏黄和偏白,然后我们分别用黄色和白色来分别表示吉娃娃所表示的比例,当我们得出数据做出我们可以很好观察到的表文时,我们会发现,无论是在偏黄的属性还是偏白的属性,吉娃娃和金毛的比例是大致相同的,如果这个时候再给你一只偏黄的狗,你是无法仅凭颜色来分辨出这是只吉娃娃还是只金毛,这其实就意味着通过毛色来判断这个狗是吉娃娃还是金毛是不恰当的。这个特征在区分品种上其实并没有起到什么什么作用,所以这个时候我们就要区分这些无意义的信息。
那么当这个毛色无法作为一个有效的特征值的时候,我们是不是想一想身高是不是可以作为一个很优秀的特征值呢?虽然说身高是一些很抽象的特征数字,但是我们同样可以将身高和这些数据进行可视化关联,这个时候我么就可以用Python来进行可视化的操作。
首先我们先输入Python中所需要的模块matplotlib和numpy,然后用两个简称来定义金毛和吉娃娃,分别是gold和chihh,并且各定义每种狗各有400个样本,然后生成一些身高的数据,现在我们假设金毛的身高为40cm,吉娃娃是25cm,并且因为每一只狗的身高都不是一个固定的数值,我们这个时候就给每只狗加上一个随机的变量,金毛的随机幅度可能大一些,吉娃娃的随机幅度可能小一些,,最后我们用柱状图来表示金毛和金娃娃的数量个数,蓝色代表吉娃娃的个数,红色代表金毛的数量个数。
这个时候我们拿这个图来具体说说,图中有很多的数据,当我们选择高度为50cm的时候,我们就基本上可以判定这只狗是金毛了,同样大于50cm的都是金毛,当我们在20cm的时候,我们其实也可以有相当大的信心说这只狗是吉娃娃,但是在当我们切换到30-40这个数据的时候,我们这个时候就不能够很肯定的说这只狗到底是金毛还是吉娃娃。在这个高度因为每一种狗的数量基本都差不多,所以说在这个高度之间的狗狗我们实际上是无法可以很好地用这个高度的特征来判断这个狗的品种,因为这个特征并不完美,这其实也就是我们为什么要包含更多的特征来去处理机器学习中的特征的问题。
这个时候当我们要获得更多的信息,我们就应该排除掉那些并不具备区分能力的信息,就像我们刚才提到的颜色其实并不是什么有用的信息,而高度能用,并且我们就应该找到更多的信息来去弥补高度所不能描述的那一段,比如说狗狗的体重,狗狗的眼镜的颜色,狗狗的耳朵长得怎么样等等。当我们将这些信息加起来,往往就能够弥补单一信息所缺失的信息量,有时候,我们也会有很多的单一的特征信息的数据,有一些数据虽然他们的信息虽然没有重复,但是他们所描述的意义却是相近的,比如说我们在描述距离的时候,数据里有里或者是公里,虽然他们在数值上并不重复,但是实际上他们表示的却是同一个意思。在机器学习中特征越多越好,但是像那两种类型相近的信息并不会对他有用,所以我们要区分重复性的信息。并且我们每个点都是带有经纬度,如果我们用经纬度来表示两地之间的距离,这个显然比用公里来麻烦的多,所以在机器学习中,选取两者特征值是一定要避免复杂的信息,因为特征与结果的模型越简单,机器学习就能够更好的学习到东西。
所以在我们选择特征的时候,我们要时刻想到这三点,避免无意义的信息,避免重复性的信息,避免复杂的信息。
好这就是我们这一篇文章中所聊到的如何区分好用的特征,如果大家有更好的建议或者想法,也欢迎大家和我多多交流,我很希望和大家一起交流观点。