数据维度

对于维度这个词,总是给人一种高大上的感觉。这个词给我的第一印象是宇宙中的维度和爱因斯坦的《相对论》(下面是唠嗑时间)。

 

当时在上高中的时候,由于班主任是物理老师,所以对物理也比较感兴趣。记得教材里面有提到相对论,然后自己就找了本书去看,结果没过多久就放弃了。但是让我印象深刻的是,它里面维度的概念。书里面说:宇宙是又一个奇点而来,经过大爆炸产生了现在的多维空间,包括我们熟悉的三维空间,加一条时间线的四维空间,以及由多条时间线组成的五维空间等等。

 

上边所说的是物理中的维度,和数学中的维度还不太一样。

 

数学中的维度就很好理解啦,毕竟很常见!我们都说零维是点,一维是线,二维是面,三维是体,那么四维的?

 

我查了查资料,百度百科是这样解释的:“第四维是在系统的三个笛卡尔几何坐标之外增加的一个量,这种系统需要四个量(或坐标)来完全确定一个点在几何标架(或几何空间)中的位置。”(——摘自百度百科)

 

看完了这个解释,我想到了线性代数中的概念——。n个线性无关的向量组成的向量组的秩是n,如果有一组相关那么就减1,如果都相关,那么其秩为1。秩的意义就是说,最少有几组向量能表示全体。如果所有向量都相关,那么只要有一组向量就够了,可以通过初等变化来变化成其他的向量。

 

结合几何来想一下,在二维的笛卡尔系中,一个向量可以表示为(0, 1),(1, 0)等。我们一般使用这两个向量来作单位向量,因为这两个向量可以很好的表示所有二维平面上的向量,它们组成的向量组的秩为2,反之如果单位向量线性相关,如(1, 0), (-1, 0)那么无论如何也表示不出在y方向上的量,此时它们组成的向量组秩为1。

 

说完了数学,再来看看物理。这时候,数学中秩的概念,我便理解成了能够最小表示一个物体或概念的特征数量。在三维空间中,如果是一条线,那么我们可以用一个特征方向表示它,也就是说这时候它的最小特征数为1。还是在三维空间中,一个立方体,我们必须要使用三个特征即长、宽、高来表示,所以它最小的特征数为3。那么再加上时间线变成四维空间(如果不好想象,可以把三维空间想象为一个点,我们用手指点这个点,就会放大成一个三维空间,而这些三维空间点紧密排列,排成了一条线,物理上一般认为第四维是时间线,但是也可以不是,总之这条线就是由多个空间组成的,我们就认为它是时间线。),我们说某个时间的一个立方体,就要用长、宽、高和时刻四个特征值来表示这个物体。

 

而我们一个人,不仅有长宽高时间,还有很多其他特征,比如圆脸或方脸、男生或女生、0还是1(啊不是)……这些特征我们没办法用其他的特征去表示,即人的“秩”是很多甚至无限的。所以人,当然不止是人,几乎所有的事物都有很多维度,很多特征。(为特征工程铺路)

 

到这里关于维度的唠嗑就差不多了,想想平时机器学习中用到的数据,如果列成一个表格,那么行就表示某个类型的样本,列表示这一类型的特征。如下图

Python中爱因斯坦三维数组 爱因斯坦维度定义_Python中爱因斯坦三维数组

 

 

 

 特征工程

所谓特征工程,我理解的就是:什么样的特征能够影响到预测结果,那么这样的特征就是我们需要拿到的。

 

业界流传的一句很经典的话:数据和特征决定了机器学习的上限,模型和算法只是逼近这个上限而已。

 

也就是说,如果数据和特征选的不好,那么最终的效果必然不好。其实也很好理解,就好比说有一个很糟糕的数据集,给两张一样的图片标注了不一样的标签,比如同一个人的图片标注了男性和女性,那么最终模型一定不能很好地区分人物的性别,因为在学习时的数据就是错误的,即使给人去学习也是一样会错误的。有一个很形象的术语,叫喂(feed)数据,其实就是输入数据。可以想象到一个人每天吃的都是一块钱四个的窝窝头,长期下去身体肯定不会很健康。

 

比如上面的表格中,输入是电影名字,各种类型的镜头数量,预测结果是电影类型。那么显然这些特征是合理的,能够很好的去预判电影类型。举个例子,比如我们说到《霸道总裁和他的小娇妻》,是不是一下子就能反映过来是什么类型的小说,又或者小说中总出现“老公”、“老婆”、“抱抱”、“亲亲”、“举高高”,我们也能大概猜测小说讲了什么。

 

反之,如果我选的特征是电影时长、电影的大小、电影的上映时间等等,就不能够判断出来,它是什么电影。

 

那么我们具体应该如何选取特征呢?

 

一个很重要的思想就是降维。回想我上边括号里说的好长一段话,再搬下来:

  “那么再加上时间线变成四维空间(如果不好想象,可以把三维空间想象为一个点,我们用手指点这个点,就会放大成一个三维空间,而这些三维空间点紧密排列,排成了一条线,物理上一般认为第四维是时间线,但是也可以不是,总之这条线就是由多个空间组成的,我们就认为它是时间线。),我们说某个时间的一个立方体,就要用长、宽、高和时刻四个特征值来表示这个物体。”

 

我把三维空间想象成了一个点,也就是从三维降到了零维,这就是一个降维的过程。这样一来,很明显我们容易理解了,但是同时,三维空间内的细节被我们屏蔽了。也就是说,现在我们直观的去看时间线,我们其实只看到的是一个一维的数据——就是一个个的时刻,但是三维空间内部具体是怎么样的?我们看不到,降维一定意味着信息的丢失。

 

在特征工程中的降维也是如此,总有一部分信息会丢失,不过这些信息我们不需要,丢掉更好,可以减少无用数据的冗余。

 

降维的方法也是多样的,可以看一篇来自知乎的帖子:12种降维方法终极指南(含Python代码)

 

最后,总结一下。数据维度就是事物的特征,特征提取就是要选择与结果相关的特征。

世界真是奇妙啊🤔