# 机器学习
传统IT要解决一个问题的方式通常是根据经验预先定义好解决问题的各个环节以及方式,然后通过编程来逐一解决。机器学习是一种人工智能(AI)领域的技术,它让计算机系统能够从数据中学习和自我改进,而无需显式编程。换句话说,机器学习是一种让计算机自动分析数据并从中学习规律的技术。在机器学习中,算法会使用一组数据来训练模型,然后使用该模型来预测新数据的结果。训练数据通常包括输入特征和对应的输出标签。机器学习算法的目标是通过训练数据中的模式来学习这些输入特征和输出标签之间的映射关系,从而创建一个可以用于预测新数据的模型。
随着机器学习技术的普及和推广,机器学习的应用也趋于工程化,在工程交付的背景下,形成了需求分析、数据预处理、特征工程、算法建模、模型评估、模型应用等完成的作业流程:
- 需求分析:应用机器学习技术前要确定项目的具体需求,确定需求的过程包括场景分析、数据收集、数据探查以及算法选择。
- 数据预处理:针对原始数据,对出现的噪声进行修复、平滑或剔除,这些噪声包括异常值、缺失值、重复记录、错误记录等。有些为了更适合当前任务或算法的需要,还有对数据进行变换处理,常见的变换方式有使用简单函数进行开根、乘方、对数和指数变换,数据中心化、归一化或将连续值离散化等。
- 特征工程:是基于原始数据创建新特征的过程,一般情况下结合业务,利用数学方法在原有特征的基础上,进行特征新增、转换等,使特征更适合机器学习的需要。特征工程可以把原始数据转换成对机器学习有用的特征,结合业务使特征更加容易理解和解释,提供更多的特征就相当于扩充了训练集,充分利用现有的学习和计算能力,提高模型的准确性。
- 模型训练:是指使用已有的数据输入到选定的模型和算法中,调整其参数,使模型的性能和效率可以接受。模型训练氛围有监督学习和无监督学习两种。
- 模型评估:主要是从不同维度去评估模型,具体的评价维度依赖于模型的类型和模型的应用场景。通常分为分类模型评估、回归模型评估和聚类模型评估,评估的标准分为准确率和召回率,准确率就是预测的结果里有多少是正确的,召回率是正确的结果有多少是被预测到的。也可以用ROC曲线和AUC来进行模型评估,ROC曲线是真阳性率与假阳性率之间的曲线,用于衡量模型的分类能力。AUC是ROC曲线下的面积,是一个介于0和1之间的值,越接近1表示模型越好。归回模型通常用决定系数(R-squared来评估),R-squared用于衡量模型拟合数据的程度,取值范围为0到1,越接近1表示模型拟合的越好。
# 机器学习算法
按照不同的学习方式,机器学习的算法包括监督式学习、无监督学习和半监督学习几种,它们的区别是看学习样本中是否有结果标记,以及在机器学习是过程中,是否依赖样本标记。
# 分类算法
分类算法是通过已有的数据集的学习,得到一个目标函数F(模型),把每个属性集x映射到目标属性y中,y必须是离散的(若y为连续的,则属于回归算法),通过已知类别训练集的分析,从中发现分类规则,以此预测新数据的类别。
例如,通过已有的部分用户的购买记录去建模,去分析训练用户是否会购买新电脑的模型。这种场景就是可以用分类算法,在算法中会分成两个最终类型,即购买和不购买,以用户的信息作为特征,就可以形成一个固定的函数,通过数据集和算法可以反推特征值的权重,最终训练出稳定的目标函数,输入的用户信息,经过模型的计算即可得出最终的分类结果。
# 回归算法
回归是处理两个或两个以上变量之间互相依赖定量关系的一种统计方法和技术,变量之间的关系并非确定的函数关系,需要通过一定的概率分布来描述。在回归分析中,如果自变量和因变量之间存在着线性关系,则被称作为线性回归。如果只有一个因变量和一个自变量,被成为一元线性回归,如果有一个因变量和多个自变量,则被成为多元回归。
回归模型在很多领域都有广泛的应用,回归模型整体建模和应用都比较容易,有坚实的统计理论支撑,能够定量的分析各变量之间的关系,预测结果可以通过误差分析来精确了解,但是回归模型建设条件比较多,而且相对严格,变量的选择对模型的影响也比较大,容易形成过拟合等现象。
# KNN算法
KNN(K近邻) 是最简单的分类算法之一,其核心思想是如果离某一个样本最近的k个样本中的大多数属于某个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。KNN不但可以预测分类,还可以做回归分析。
有N个已知分类结果的样本点,对新纪录r使用KNN将其分类的步骤如下:
- 确定k值,确定计算距离的公式,比如欧式距离。
- 计算r和其他样本点之间的距离。
- 得到目前和r最近的k个样本,作为KNN距离的训练样本。
- 将k个样本中最多归属类别的分类标签赋予新纪录r,分类结束。
KNN算法原理简单,容易理解也容易实现,对于不同的数据集重新训练代价比较低,但是KNN属于惰性机器学习算法,得到的结果即时性较差,k值对结果影响较大,不同类记录相差较大时容易误判。样本点较多时,计算量较大,相对于决策树,可解释性不强。
# 决策树算法
决策树是以事例为基础的归纳学习算法,着眼于从一组无次序、无规则的事例中推导出决策的分类规则,由于这种决策分支图形很像一棵树的枝干,故称为决策树。下图是一个从一个数据集,到构建决策树的事例,其中可以通过决策树很清晰的分析出,如果一个客户,无房、未婚、年收入70,那么他将无法偿还债务。
构建决策树通常由准备工作、选择特征、创建分支、判断是否终止、生成结果这五步组成:
- 准备工作:在工作准备节点,要明确决策中的自变量和因变量,确定信息度量方式以及终止条件。
- 选择特征:是要得到当前待处理子集,通过计算所有特征信息的度量,得到当前最佳分类特征。
- 创建分支:是根据选中特征,将当前记录分为不同分支,分支的个数取决于不同的决策树算法,其中CART算法是二叉树,可以用于回归计算。
- 判断是否终止:是要根据预先定义的规则,判断是否满足退出循环的条件,如果不满足将继续递归调用。
- 生成结果:这一阶段要判断是否需要剪枝,如果数据过拟合,则需要适当修剪,如果不需要剪枝则输出最终结果。
通常在决策树算法中,观察数据,明确自变量和因变量,明确信息的度量方式,明确分支的终止条件尤为重要。信息的度量方式通常有信息熵、信息增益、信息增益率和基尼系数等,终止条件可以根据结果的纯度、记录的条数以及循环次数来制定。
信息熵这个概念出自信息论,由香农提出,信息熵是描述事物混乱程度的度量,取值范围是0-1,值越大说明事物越混乱。例如,有一堆苹果和梨,随机拿一个出来一个,通常是苹果和梨的数量相等或接近时信息熵最大。
信息增益是衡量信息确定性增加了多少的度量单位,它体现了一个状态到另一个状态信息的变化,信息增益越大,对事物确定性的贡献也就越大。如下图所示,如果不考虑任何特征,直接估算结果,从数据集中选择水果的概率为50%,引入了颜色和味道作为参考信息,则可以直接提升选中的概率。
构建决策树的过程,就是一个通过信息增益或者基尼系数不断构建最佳特征的过程。先通过计算全部特征的熵,来计算信息增益,从而利用递归来构建每一层分枝,当分枝达到终止条件后,视情况进行剪枝处理,并生成对应结果。构建决策树常用的算法有ID3、C 45、C50和CART:
- ID3:核心是信息熵,根据信息增益决定树的节点,但是此类算法不能做剪枝,容易过拟合。
- C45:和ID3比用信息增益率代替信息增益,能对连续属性进行离散化,能够对不完整的数据进行处理,能够进行剪枝。
- C50:使用了boosting机制,通过组合多个弱分类器,得到一个强分类器的机制,每个弱分类器只能处理一部分数据,由弱分类器的输出结果进行加权组合,最终得到一个强分类器,这个算法能够进行前修剪和后修剪。
- CART(分类回归树),其核心是使用基尼系数来构建特征节点,分类是二叉树,支持连续值和离散值,支持多种剪枝,支持回归,可以预测连续值。
# 聚类和K-means算法
聚类是指从无标签的数据中,找出某种结构,也就是将某些方面比较形似的成员组织到某个组中,整体数据最终会被分成多个不同的组别,其中,同一个组内的成员相似,不同组内的成员相异。例如,有未知分类的某种花的测量数据,包括萼长、萼竞、瓣长、瓣竞等等,根据这些测量数据,将类似的测量记录归类,就可以使用聚类实现“自动”学习。
K-means是K均值聚类算法,属于划分聚类,其工作原理是根据初始化的聚类中心信息,计算每个样本到中心的距离,判断每个样本均属于某个类簇,然后更新聚簇中心信息,重新计算每个样本到新的聚类中心的距离,再重新划分样本到新的聚类中心对应的类中,重复进行此步骤,直到满足终止条件。
K-means算法原理相对简单,便于理解也很容易实现,得出的聚类结果容易解释,在数据质量有保障的情况下聚类结果相对较好,但是分类个数k需要实现指定,指定的k值不同,聚类结果相差较大,初始的k个类簇中心对结果有影响,选择不同结果可能也会不同,k-means对非球状聚类识别效果较差,样本点多时会产生很大的计算量,对离散值和异常值需要进行特殊处理。
# 关联规则与Apriori算法
关联规则是反应事物与事物间相互的依存关系和关联性。如果两个或多个事物间存在一定的关联关系,则其中一个事物能够通过其他事物预测到。最常见的场景是购物车分析,可以通过分析顾客购物车中不同商品之间的关系,来分析顾客的购买习惯,典型案例是啤酒与尿布。
Apriori算法是一种常用的关联规则挖掘算法,用于发现数据集中频繁出现的项集和关联规则。它的基本思想是通过生成频繁项集来发现项集之间的关联性。Apriori算法的主要步骤如下:
- 扫描数据集,统计每个项集的支持度(出现次数占总记录数的比例),保留支持度大于等于最小支持度的项集作为频繁1-项集。
- 根据频繁1-项集生成候选2-项集,并扫描数据集计算候选2-项集的支持度。保留支持度大于等于最小支持度的候选2-项集作为频繁2-项集。
- 根据频繁k-1项集生成候选k-项集,并扫描数据集计算候选k-项集的支持度。保留支持度大于等于最小支持度的候选k-项集作为频繁k-项集。
- 重复步骤3,直到无法生成新的频繁k-项集。
- 根据频繁项集生成关联规则,并计算关联规则的置信度。保留置信度大于等于最小置信度的关联规则。
Apriori算法的优点是简单易懂,易于实现,并且能够处理大规模数据集。但其缺点是在生成候选项集的过程中,会出现大量的非频繁项集,导致算法效率低下。针对这个问题,后续的算法如FP-growth算法采用了不同的策略来提高算法效率。