技术干货|浅谈机器学习

10 6月

本文基于笔者过去3年算法开发,4年数据分析和数据挖掘方面的经验,浅谈下机器学习,在此文,你可以理清楚三个问题:

1、我适合做机器学习的工作吗?
2、机器学习能解决什么类型的问题?
3、通常的机器学习是怎么做的?

在本文的末尾,我会跟大家分享机器学习最有效的利器。

互联网经过20余年的快速发展,互联网技术已经成为了当今一种“基础设施”,互联网的增量网民,即新增用户量基本上到达上限,产品用户拉新面临越来越大的挑战,互联网开发已经进入下半场,精细化数据运营成为重中之重。

在精细化运营中,需要运用相关的数据分析技术,通常分为两大类:基于传统统计学的数据分析以及基于机器学习算法层面的数据分析。这两者的硬技能要求也有区别,前者更多的用到的工具如EXCEL/tableau等,后者通常需要的硬技能是SPSS/R/python等软件。在本文中,主要是浅谈后者。

第一个问题:经常会有不少做研发的朋友问我:我可以去做机器学习方面的工作吗?机器学习会很难吗?

我一般这样回答:机器学习可分为基础开发层和应用层,因人而异。

在基础开发方面,需要研究信息论、最优化理论、矩阵理论、概率论以及线性代数等,大部分情况下还得研究英文文献。通俗来讲,需要自己亲自去编写底层算法,诸如梯度下降等方法及其各种变体,掌握最优化理论,了解如何去求取最优解。技术不断变化,一些算法技术有其局限性,某种情况下,需要对既有理论进行改造,甚至需要创造性地发明新的算法,这部分人员称之为算法开发人员或算法工程师。此外,要成为顶级的算法开发人员,还需要精通数据结构,一句话总结算法开发人员:我认为是,坐得了冷板凳,奈得住寂寞,精通于数学。据公开资料,就目前的最火的人工智能AI而言,顶级的算法开发人员,全球不超过1000人,算法人员整体上还是个稀缺岗位。

应用层方面,相比基础开发,从技术层面而言,对个人的要求要降低很多,算法模型本身由算法开发人员封装成API,成为了一种工具,一般是面向数据分析/数据挖掘工程师,调用现有的算法模块即可,比如python的scikit-learn库,tensorflow等,对个人的要求是能够了解各种算法模型的原理及其优缺点,熟练调用相关模块,调节模块参数,让数据分析人员更聚焦于对实际业务的理解。

第二个问题:机器学习能解决什么问题?

机器学习分为三大类:监督学习、半监督学习以及无监督学习。主要是用来解决分类以及回归问题。分类即二分类或多分类,比如一张图片是狗、猫还是青蛙等;回归一般是指对目标进行数值型的预测。

监督学习,从规定的训练数据集中学习出一个函数(模型参数),当新的数据到来时,可以根据这个函数预测结果。监督学习的训练集要求包括输入和输出,也可以说是特征和目标,训练集中的目标是由人标注的。以监督学习解决分类问题为例,通过已有的训练样本去训练得到一个最优模型,再利用这个模型将所有的输入映射为相应的输出,对输出进行简单的判断从而实现分类的目的,也就具有了对未知数据分类的能力。常用的监督学习算法有:逻辑回归/支持向量机/KNN/决策树/神经网络等。

无监督学习,指的是输入数据没有被标记,也没有确定的结果。样本数据类别未知,需要根据样本间的相似性对样本集进行分类,试图使类内差距最小化,类间差距最大化。通俗来讲,就是实际应用中,很多情况下是无法预先知道样本的标签,也就是说没有训练样本对应的类别,因而只能从原先没有样本标签的样本集开始学习分类器设计。常用的无监督学习算法是:聚类算法K-means/主成分分析PCA等。

半监督学习,一般指的是只有及其小部分标签数据,基于这部分数据去做拓展。由于在实际中应用极其少,此处不做过多介绍。

最后一个问题:如何利用机器学习开始一个新项目?有没有通用的思路?

通常情况下,企业的运营人员与数据分析团队是分离的,两个部门相对独立。运营人员负责App用户的拉新/留存/维护等工作;数据人员专注于后端数据的处理工作。由运营人员根据实际运营需求,提出业务目标给数据人员。

第一步,数据分析团队评估业务目标的可行性。通过在数据仓库调取数据,查看目前的数据维度是否能支撑业务目标的实现。举个极端的例子,以购物App为例,业务目标是判断某一批用户是否会点击购买某一类商品,从数据仓库里查询到:该批用户未有任何相关商品的点击购买等数据记录。此时,该业务目标大概率下是无效的目标,需要重新与运营人员沟通。

第二步,将业务目标转化成数学问题,选取算法模型。明确该目标是分类还是回归问题,是否有标签值或者打标签的成本高不高,有标签则可采取监督学习的方法,无标签则采取无监督学习的方法。

第三步,从数据仓库提取数据,进行预处理工作。这一步主要是做探索性的工作,诸如去除异常值/空值、建特征工程、归一化操作等等。

其中最重要的环节是建特征工程。互联网企业一般都有自己的App,搜集了大量的用户属性信息。基于业务目标,数据分析团队应与运营团队密切沟通,毕竟运营人员活跃在一线,对业务相对比较敏感,本能/直觉地会告诉跟业务目标相关的特征可能有哪些?此外,数据分析团队自己也可基于现有的特征衍生出一些特征。注意:选取的特征一定要与业务目标相关联,避免无效特征带入模型中去;同时,特征之间去除相关性,避免冗余特征。

第四步,将特征和目标值带入到模型中去,算法模型有现成的库,如python的scikit-learn,主要是学会调用库和调整参数。如选取的正则化项,1范数还是2范数,正则化参数,学习率,迭代次数等。

在这个过程中,最重要的一步:需要将数据拆分成训练集,验证集以及测试集,考察模型本身的泛化能力,当面对未知数据时,模型是否能预测准确,准确度大概是多少。

以上,基本上了对3个问题做了具体的回答。

最后,笔者基于自己多年来一路走过来的心路历程,想跟大家分享下机器学习最大的方法论和利器,与大家共勉:

“让我们恐惧的其实是恐惧本身”。