7

算法通俗解释(1)特征、信息量和特征工程

 3 years ago
source link: https://zhuanlan.zhihu.com/p/311995528
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

引子

开一个新系列吧,算法的通俗解释,目标是希望没有公式的情况下,尽可能解释算法原理。

本公众号染上了挖更的恶习,已有系列更新缓慢又开新坑。最近业余时间都在《刺客信条:英灵殿》中帮助维京人征服英格兰,公众号已经变成周更了,我检讨,但让我努力更新的话,得等我势力遍布英格兰,杀了魔狼芬里尔。

新系列也不是空穴来风,本来想更新策略产品经理二三事系列的推荐系统部分,感觉不能就讲协同过滤这种简单算法,而目前用的比较多的算法底层都是一堆高数公式,读者没法看。所以为了更这个系列,我感觉有必要先开一个系列通俗地讲一讲算法。

而且这一两年我和这个互联网世界慢慢和解了,之前我觉得公司相关人员不懂算法是他们蠢,他们应该闭嘴看我表演。后来发现,要推动一个系统发展,解释性远比算法效率重要。而且往往解释性强的方法,系统的泛化能力也更强。

当前的互联网行业里,在不懂算法的人眼里,算法就是魔法。可是毕竟这是个麻瓜占据多数的世界,如果能通俗解释算法,也是一个不错的尝试。

四大名著也有少儿简化版,高中物理也在不引入微积分的情况下把原理都讲了,算法也未尝不能科普。

于是有了这个系列。

一个大的原则就是:一般不放公式,除非逼不得已,如果一定要放,公式复杂度不超过初中的运算。

那么,这一期就从基本概念开始吧。

特征

如果你的工作需要和算法系统打交道,那么想必你一定听过特征这个词。

特征的通俗理解就是一类事物某个维度的值,群体中的每个个体在这个维度上可能有不同的值。比如人的性别、民族、身高就是典型的特征。一般而言性别只分男女(LGBT团体对不起!),因为是两个取值,在数据上可以用布尔值表示,还有一些类似的取值为”是否“和”有无“的特征——是不是会员,有没有下载客户端。民族是一个分类值,就是有分类但是分类的值只是区分,没有大小之分,各民族平等。身高是典型的连续值,有零有整的数。当然除此之外还有别的数据类型,比如取值表示等级的游戏段位,一个维度的不同类别之间有相对大小关系。

当我们有了越来越多的特征,对一个事物的描述就越具体。但是这并不意味着特征越多越好。有的时候新增的特征并没有什么用,可能是因为这个因素本身对于具体的问题不重要,或者就是因为这个特征和已有特征完全相关。

没什么用可以理解,比如预测外卖员的准时程度和外卖员的星座就应该没啥关系。

为了解释特征完全不相关,引入一个新概念——相关性。在线性代数里面会描述向量之间的相关性,如果一个向量可以被某几个其他向量用线性组合的方式表示,则可以认为这个向量和其他向量线性相关。一个特征如果可以被其他特征组合表示的话,也可以认为这个特征和其他特征完全相关。

完全相关是我造出来的概念,相关性一般有大小关系,完全相关代表新的特征可以用老的特征完全造出来,因为现在算法不是只用到线性关系,所以我们也不要求是新特征需要老特征用线性组合表示,只要是老特征能推导出新特征,新特征就和老的特征完全相关。

这里有点绕,举个例子。比如身高和体重都是人的特征,BMI( 身体体重指数)也是人的特征,但是BMI就和身高、体重这两个特征完全相关,因为,BMI=体重(千克)除以身高(米)的平方。对于算法而言,如果需要用BMI的特征做计算,算法在理论上不需要引入BMI这个新的特征。

信息量

信息量也是一个大家常说的词,香农给出了一个准确的定义以及数学表达。这里不展开这部分精确的描述。仅仅谈一些通俗的解释和理解。

我们平时说一个事件信息量大,一般是说,这个事件罕见、影响大、对之前的认知有很大的改变。这些感觉实际上和信息量的基本定义基本吻合,信息量就是描述不确定性降低的程度。

当我们不知道一个人的某些事情时,我们对这个人的了解有很大的不确定性,如果知道了这个人的一些八卦,我们对这个人认知的不确定性就降低了,我们就可以说,这些八卦信息量大。

在实际工作用中,孤立地讨论信息量意义不大,一般都是需要一些比较。

“引入了某个信息量很大的特征之后,模型效果提升明显。“这里的信息量是对特征的修饰,代表着引入了这个特征,提高了模型预估的准确性,降低了算法预估的不确定性。

“特征A的信息量比特征B的信息量更大。”这里是引入特征A和引入特征B相比,引入特征A对于模型效果提升更加明显。

”引入新特征效果不明显,新特征信息量几乎为零。“这里的意思是新的特征中蕴含的信息在老的特征中已有,所以引入新的特征没有意义。

这里讨论信息量主要围绕特征展开,上面提到的新特征和老特征完全相关,也是因为新特征没有给系统带来新的信息量。

之所以提这个概念,是希望大家有一个新的视角。我在考虑各种算法系统的时候,都是在用信息量的视角去思考的,哪些处理可以更好利用信息量,哪些数据引入可以更大程度提高信息量。

特征工程

虽然在理论上引入一些完全相关的特征对于模型没有影响,但大部分算法并不能完全开发出信息量。所以就我们上面的例子讨论,比如预测人的一些消费习惯,在有身高、体重的情况下,引入BMI可能依旧有意义。

与此同时,虽然在理论上加入特征越多,系统信息至少不会减少,对算法有益。但是算法在引入特征时,不仅仅接入了特征中的信息,同时也接受了无效信息,而这会给算法带来误差。所以对于算法而言,减少无效特征会提升算法模型的效率。

对于原始的数据特征进行各种参数处理,让特征中的信息量更容易被系统挖掘,这一系列的方法叫做特征工程。就像是从金矿中冶炼好金子一样,粗加工去除杂质非常重要。这样的预处理对于算法的效果意义重大。

这个领域有一句有名的话——”More data beats clever algorithms, but better data beats more data“,更多的数据打败聪明的算法,更好的数据打败更多的数据。这也是在强调特征工程的重要性。

而特征的选取和处理是数据分析和业务理解之后的结果,并不一定非得是算法工程师的工作,也可以数据分析师或者产品经理去做。但一切的前提,都是这个角色的人能够对算法、数据、产品有足够深入的理解。

最后:

通俗意味着没有采用最准确的描述,同时算法这个部分我本身也就是泥腿子,水平有限如有错误,欢迎留言纠正。

如果有没写清楚的也欢迎交流。

这个系列的下一篇主要聊算法系统的评价。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK