下面我就详细介绍一下机器学习所需的一些基础知识:
线性代数
数据通常以矩阵的形式进行存储。既然是以矩阵的形式,那么自然少不了矩阵的运算。在处理数据时,运用矩阵的运算可以有效地避免编写多层嵌套循环,从而加快了程序的运行速度。如果大家用TensorFlow架设过神经网络,或是从头自己编写过算法的话,一定被矩阵相乘的顺序、矩阵的形状、矩阵元素间的运算等问题困扰,往往对一个小问题的忽略,会让我们花费几个小时来调试程序。
因此,如果我们有非常非常扎实的线性代数功底,在编写程序的每一步都能完全搞清楚运算矩阵的形状和运算后的结果,你编写算法的效率一定会大大提升。
至于线性代数的掌握程度,个人认为矩阵的运算、转置、逆矩阵等搞清楚的话,基本已经够用了。
概率论
机器学习算法,或者再说细一点——模式识别和分类,核心就是贝叶斯理论(Bayes Theory)。贝叶斯理论为我们提供了计算决策边界(Decision Boundary)的方式,而决策边界在分类当中自然是核心所在,正是这个边界决定了我们的模型会将数据分在A类还是B类(或者还有更多类别,C类,D类....)。
除此之外,和机器学习难以分家的就是统计学习。传统的统计分析和机器学习所用的算法几乎是同一套算法,不同点在于:统计分析更侧重于利用模型帮助决策者做出决策,因此其更注重于模型的可解释性(如风险分析,信用卡欺诈分析);而机器学习建模往往更侧重于结果,对可解释性并不是很在意(如利用声音分辨性别)。而在统计分析里边,无论是假设验证还是推论,都要大量使用到概率论的内容,如正态分布的分析、z-test,t-test,Chi方分布,F分布等等。
至于概率论的掌握程度,个人认为学到大学课本里的程度已经完全够用。
机器学习算法
机器学习算法自然是机器学习的核心所在,算法的学习一般又分为理论和算法实现两部分。
理论知识即每种算法的数学原理,包括基本原理、参数的含义、正则化(Regularization)等,学习这些没有太好的办法,只能是看书或者是看一些技术博客。
算法实现即用代码实现算法,在实际中我们通常会调用函数库,有时候可能需要自己编写一些损失函数、筛选规则等。不过一般情况下,掌握Scikit-Learn里边的内容基本已经够用;需要用到深度学习的同学则要针对性的学习一下TensorFlow、Keras、PyTorch这些,个人推荐从Keras学起,之后TensorFlow和PyTorch二选一深入学习。学习方法方面,由于这些函数库均是开源项目,更新较快,所以不是特别推荐看书,最好的方法就是去看官方网站的介绍。但是对于英文不太好的同学,可能看官网也不是太现实,那么可以挑一些近一年内出版的书籍,如果是2017年以前出版的则基本可以不予考虑。
常用的机器学习算法有:
- 逻辑回归(Logistic Regression)
- SVM(Support Vector Machine)
- 决策树(Decision Tree)
- 随机森林(Random Forest)
- XGBoost
- 朴素贝叶斯(Naive Bayes)
- 神经网络(Neural Network)
- KMeans
数据清洗及处理
根据公司业务设置及人员架构的不同,机器学习工程师或是数据挖掘工程师往往需要自己清洗及处理数据,这里常用的工具有SQL和Pandas函数库。SQL通常运用于从数据库中直接提取数据,或是整理体量较大数据(往往会搭配Spark使用);而Pandas则可以很方便的利用其DataFrame的结构来整理数据。
在处理数据时,我们通常需要进行缺失值处理、字符数据数字化处理、特征预筛选处理、归一化及标准化处理等操作。一份高质量的数据可以说是建立高质量机器学习模型的基础。
特征工程
特征工程是一个比较难定义的部分,它包含的内容实在太多。通常来讲,特征工程包括了特征提取及特征选择,同时也包含了特征组合。
特征提取通常我们会通过PCA,LDA等方式,一般用于减少特征的数量,降低数据的维度,由于经过特征提取之后,特征不再具有原本的意义,因此当需要对模型结果进行解释时,不能使用该方法;
特征选择通常指通过相应算法,一般指随机森林的特征重要性排序和特征聚类筛选等,减少建模需要使用的特征数量,降低数据的维度。该方法选择出的特征仍然具有原特征的意义,因此模型结果仍然具有可解释性;
特征组合指通过相应的变换,在现有特征的基础上创建新的特征。具体的操作往往要通过数据的可视化来实现,但更重要的应该是对背景知识的了解。如在处理保险行业的数据时,如果对保险业务没有深入的了解,则很难创建出有效的特征。因此在我看来,特征组合固然有一部分的技巧,但更重要的是对相关领域的了解程度。以我个人的经验来说,这方面往往需要与业务部门的同事配合,或者与客户进行深层次的沟通,对业务的了解多一分,我们创建出有效特征的可能性也就多一分。