文章目录
- 1 机器学习定义
- 2 机器学习常见应用框架(重点)
- 3 机器学习分类
- 3.1 监督学习(Supervised learning)
- 3.2 无监督学习(Unsupervised learning)
- 3.3 半监督学习(Semi-Supervised Learning)
- 4 其他分类方法
- 5 scikit-learn算法备忘单(重点)
- 6 Ubuntu安装Python3
- 7 机器学习算法(Top10)
- 8 机器学习开发流程
- 8.1 数据收集与存储
- 8.1.1 机器学习可用公开数据集
- 8.2 数据预处理(数据清洗和转换)
- 8.3 特征工程
- 8.3.1 类型特征转换之1-of-k(哑编码)
- 8.3.2 文本数据抽取
- 8.4 模型训练及测试
- 8.5 模型的评估方式(重点)
- 8.5.1 分类模型的评估方式
- 混淆矩阵:
- 8.5.1.1 准确率(Accuracy)(预测结果正确的百分比)
- 8.5.1.2 精确率(Precision) (查的准)
- 8.5.1.3 召回率(Recall)(查的全,对正样本的区分能力)
- 8.5.1.4 F1 Measure
- 8.5.1.5 ROC曲线
- 8.5.1.6 AUC
- 8.5.2 回归模型的评估方式
- 8.6 投入使用(模型部署和整合)
- 8.7 模型的监控与反馈
1 机器学习定义
定义:机器学习是从数据中自动分析获得规律(模型),并利用规律对未知数据进行预测
- 算法(T):根据业务需要和数据特征选择的相关算法,也就是一个数学公式
- 模型(E):基于数据和算法构建出来的模型
- 评估/测试(P):对模型进行评估的策略
2 机器学习常见应用框架(重点)
1、sciket-learn(Python)
https://scikit-learn.org/stable/
2、Mahout(Hadoop生态圈基于MapReduce)
http://mahout.apache.org/
3、Spark MLlib
http://spark.apache.org/
3 机器学习分类
算法是核心,数据和计算是基础。这句话很好的说明了机器学习中算法的重要性。机器学习的几种分类:
- 监督学习
- 分类 : k-近邻算法、决策树、贝叶斯、逻辑回归(LR)、支持向量机(SVM) 神经网络
- 回归 : 线性回归、岭回归
- 标注 : 隐马尔可夫模型(HMM)
- 无监督学习
- 聚类 : k-means
- 半监督学习
3.1 监督学习(Supervised learning)
概念:
用已知某种或某些特性的样本作为训练集,以建立一个数学模型,再用已建立的模型来预测未知样本,此种方法被称为有监督学习,是最常用的一种机器学习方法。是从标签化训练数据集中推断出模型的机器学习任务。
- 判别式模型(Discriminative Model):直接对条件概率p(ylx)进行建模,常见判别模型有:线性回归、决策树、支持向量机SVM、k近邻、神经网络等;
- 生成式模型(Generative Model):对联合分布概率p(x,y)进行建模,常见生成式模型有:隐马尔可夫模型HMM、朴素贝叶斯模型、高斯混合模型GMM、LDA等;
- 判别式模型更直接,目标性更强;生成式模型更普适
- 判别式模型关注的数据的差异性,寻找的是分类面;生成式模型关注数据是如何产生的,寻找的是数据分布模型
- 由生成式模型可以产生判别式模型,但是由判别式模式没法形成生成式模型
3.2 无监督学习(Unsupervised learning)
概念:
与监督学习相比,无监督学习的训练集中没有人为的标注的结果,在非监督的学习过程中,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。
- 无监督学习试图学习或者提取数据背后的数据特征,或者从数据中抽取出重要的特征信息,常见的算法有聚类、降维、文本处理(特征抽取)等。
- 无监督学习一般是作为监督学习的前期数据处理,功能是从原始数据中抽取出必要的标签信息。
3.3 半监督学习(Semi-Supervised Learning)
概念:
考虑如何利用少量的标注样本和大量的未标注样本进行训练和分类的问题,是监督学习和无监督学习的结合;
- 主要考虑如何利用少量的标注样本和大量的未标注样本进行训练和分类的问题。半监督学习对于减少标注代价,提高学习机器性能具有非常重大的实际意义。
- SSL的成立依赖于模型假设,主要分为三大类:平滑假设、聚类假设、流行假设;其中流行假设更具有普片性。
- SSL类型的算法主要分为四大类:半监督分类、半监督回归、半监督聚类、半监督降维。
- 缺点:抗干扰能力弱,仅适合于实验室环境,其现实意义还没有体现出来;未来的发展主要是聚焦于新模型假设的产生。
4 其他分类方法
-
分类
通过分类模型,将样本数据集中的样本映射到某个给定的类别中
-
聚类
通过聚类模型,将样本数据集中的样本分为几个类别,属于同一类别的样本相似性比较大
-
回归
反映了样本数据集中样本的属性值的特性,通过函数表达样本映射的关系来发现属性值之间的依赖关系
-
关联规则
获取隐藏在数据项之间的关联或相互关系,即可以根据一个数据项的出现推导出其他数据项的出现频率。
5 scikit-learn算法备忘单(重点)
https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html
6 Ubuntu安装Python3
Ubuntu中 创建一个基于Python3的虚拟环境:
mkvirtualenv -p /usr/local/bin/python3.6 ml3
在ubuntu的虚拟环境当中运行以下命令
pip3 install Scikit-learn
然后通过导入命令查看是否可以使用:
import sklearn
7 机器学习算法(Top10)
算法名称 | 算法描述 |
---|---|
C4.5 | 分类决策树算法,决策树的核心算法,ID3算法的改进算法。 |
CART | 分类与回归树(Classification and Regression Trees) |
kNN | K近邻分类算法;如果一个样本在特征空间中的k个最相似的样本中大多数属于某一个类别,那么该样本也属于该类别(物以类聚,人以群分) |
NaiveBayes | 贝叶斯分类模型;该模型比较适合属性相关性比较小的时候。如果属性相关性比较大的时候,决策树模型比贝叶斯分类模型效果好(原因:贝叶斯模型假设属性之间是互不影响的) |
SVM | 支持向量机,一种有监督学习的统计学习方法,广泛应用于统计分类和回归分析中。 |
EM | 最大期望算法,常用于机器学习和计算机视觉中的数据集聚领域 |
Apriori | 关联规则挖掘算法 |
K-Means | 聚类算法,功能是将n个对象根据属性特征分为k个分割(k<n);属于无监督学习 |
PageRank | Google搜索重要算法之一 |
AdaBoost | 迭代算法;利用多个分类器进行数据分类 |
8 机器学习开发流程
- 数据收集
- 数据预处理 (清洗与转换,去除异常数据···)
- 特征提取
- 模型构建
- 模型测试评估
- 投入使用(模型部署与整合)
- 迭代优化
8.1 数据收集与存储
- 数据来源:
- 用户访问行为数据
- 业务数据
- 外部第三方数据
- 数据存储:
- 需要存储的数据:原始数据、预处理后数据、模型结果
- 存储设施:mysql、HDFS、HBase、Solr、Elasticsearch、Kafka、Redis等
- 数据收集方式:
- Flume & Kafka
8.1.1 机器学习可用公开数据集
在实际工作中,我们可以使用业务数据进行机器学习开发,但是在学习过程中,没有业务数据,此时可以使用公开的数据集进行开发,常用数据集如下:
- http://archive.ics.uci.edu/ml/datasets.html
- https://aws.amazon.com/cn/public-datasets/
- https://www.kaggle.com/competitions
- http://www.kdnuggets.com/datasets/index.html
- http://www.sogou.com/labs/resource/list_pingce.php
- https://tianchi.aliyun.com/datalab/index.htm
- http://www.pkbigdata.com/common/cmptIndex.html
8.2 数据预处理(数据清洗和转换)
- 实际生产环境中机器学习比较耗时的一部分
- 大部分的机器学习模型所处理的都是特征,特征通常是输入变量所对应的可用于模型的数值表示
- 大部分情况下,收集得到的数据需要经过预处理后才能够为算法所使用,预处理的操作主要包括以下几个部分:
- 数据过滤
- 处理数据缺失
- 处理可能的异常、错误或者异常值
- 合并多个数据源数据
- 数据汇总
8.3 特征工程
对数据进行初步的预处理,需要将其转换为一种适合机器学习模型的表示形式,对许多模型类型来说,这种表示就是包含数值数据的向量或者矩阵。
- 将类别数据编码成为对应的数值表示(一般使用1-of-k方法)-dumy。
- 从文本数据中提取有用的数据(一般使用词袋法或者TF-IDF)。
- 处理图像或者音频数据(像素、声波、音频、振幅等<傅里叶变换>)。
- 数值数据转换为类别数据以减少变量的值,比如年龄分段。
- 对数值数据进行转换,比如对数转换。
- 对特征进行正则化、标准化,以保证同一模型的不同输入变量的值域相同。
- 对现有变量进行组合或转换以生成新特征,比如平均数 (做虚拟变量)不断尝试。
8.3.1 类型特征转换之1-of-k(哑编码)
- 功能:将非数值型的特征值(类别类型的)转换为数值型的数据
- 描述:假设变量的取值有 k 个,如果对这些值用 1 到 k 编序,则可用维度为 k的向量来表示一个变量的值。在这样的向量里,该取值所对应的序号所在的元素为1,其他元素均为0。
例子:
- T1,T2,T3是特征;
- A,B,C是文本类型数据,机器学习识别不了,需要转换,转换为数字型
8.3.2 文本数据抽取
- 词袋法:将文本当作一个无序的数据集合,文本特征可以采用文本中的词条T进行体现,那么文本中出现的所有词条及其出现的次数就可以体现文档的特征。
- TF-IDF:
- 词条的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降;也就是说词条在文本中出现的次数越多,表示该词条对该文本的重要性越高,词条在所有文本中出现的次数越少,说明这个词条对该文本的重要性越高。
- TF(词频)指某个词条在文本中出现的次数,一般会将其进行归一化处理(该词条数量/该文档中所有词条数量);
- IDF(逆向文件频率)指一个词条重要性的度量,一般计算方式为总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。TF-IDF实际上是:TF * IDF
8.4 模型训练及测试
-
模型选择:对特定任务最优建模方法的选择或者对特定模型最佳参数的选择。
-
在训练数据集上运行模型(算法)并在测试数据集中测试效果,迭代进行数据模型的修改,这种方式被称为交叉验证(将数据分为训练集和测试集,使用训练集构建模型,并使用测试集评估模型提供修改建议)。
-
模型的选择会尽可能多的选择算法进行执行,并比较执行结果。
8.5 模型的评估方式(重点)
8.5.1 分类模型的评估方式
对于二分类问题,机器预测的和实际的还是会有所偏差,所以我们引入以下几个概念来评价分类器的优良。
- 模型的测试一般以下几个方面来进行比较,分别是准确率/召回率/精准率/F值。
- 准确率(Accuracy)=提取出的正确样本数/总样本数。
- 召回率(Recall)=正确的正例样本数/样本中的正例样本数——覆盖率。
- 精准率(Precision)=正确的正例样本数/预测为正例的样本数。又称精确率。
- F值=Precision * Recall * 2 / (Precision+Recall) (即F值为正确率和召回率的调和平均值)。
例如:
混淆矩阵:
在分类任务下,预测结果(Predicted Condition)与正确标记(True Condition)之间存在四种不同的组合,构成混淆矩阵(适用于多分类)
http://www2.cs.uregina.ca/~dbd/cs831/notes/confusion_matrix/confusion_matrix.html
https://en.wikipedia.org/wiki/Confusion_matrix
TP(True Positive):被预测成了正类的正类,即正确预测的正类
FP(False Positive):被预测成了正类的负类
TN(True Negetive):被预测成了负类的负类,即正确预测的负类
FN(False Negetive):被预测成了负类的正类
8.5.1.1 准确率(Accuracy)(预测结果正确的百分比)
准确率跟正类负类没多大关系,表示在预测结果中,正确预测的数量 / 样本总数。
8.5.1.2 精确率(Precision) (查的准)
在预测结果中,正确预测的正类数 / 预测为正类的数量 : TP / (TP+FP)
8.5.1.3 召回率(Recall)(查的全,对正样本的区分能力)
在预测结果中,正确预测的正类数 / 原本即为正类的数量 : TP / (TP+FN)
8.5.1.4 F1 Measure
用precision和recall两个指标不直观,索性把他们合并为一个变量——F-measure:Recall * Precision * 2 / (Recall + Precision)(越大越好,1为理想状态,此时precision为1,recall为1)
8.5.1.5 ROC曲线
ROC(Receiver Operating Characteristic)最初源于20世纪70年代的信号检测理论,描述的是分类混淆矩阵中FPR-TPR两个量之间的相对变化情况, ROC曲线的纵轴是“真正例率”(True Positive Rate 简称TPR),横轴是“假正例率” (False Positive Rate 简称FPR)。
如果二元分类器输出的是对正样本的一个分类概率值,当取不同阈值时会得到不同的混淆矩阵,对应于ROC曲线上的一个点。那么ROC曲线就反映了 FPR与TPR之间权衡的情况,通俗地来说,即在TPR随着FPR递增的情况下,谁增长得更快,快多少的问题。TPR增长得越快,曲线越往上屈,AUC就越大, 反映了模型的分类性能就越好。当正负样本不平衡时,这种模型评价方式比起 一般的精确度评价方式的好处尤其显著。
8.5.1.6 AUC
AUC 即 ROC 曲线对应的面积,面积越大越好。
AUC (Area Under Curve) 被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围一般在0.5和1之间。使用AUC值作为评价标准 是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好, 而AUC作为数值可以直观的评价分类器的好坏,值越大越好。
从AUC判断分类器(预测模型)优劣的标准:
- AUC = 1,是完美分类器,采用这个预测模型时,存在至少一个阈值能得出完美预测。绝大多数预测的场合,不存在完美分类器。
- 0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
- AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。
- AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。
8.5.2 回归模型的评估方式
回归结果度量
- explained_varicance_score:可解释方差的回归评分函数
- mean_absolute_error:平均绝对误差
- mean_squared_error:平均平方误差
8.6 投入使用(模型部署和整合)
- 当模型构建好后,将训练好的模型存储到数据库中,方便其它使用模型的应用加载(构建好的模型一般为一个矩阵)
- 模型更新需要周期性(一周,一个月)
8.7 模型的监控与反馈
- 当模型一旦投入到实际生产环境中,模型的效果监控是非常重要的,往往需要关注业务效果和用户体验,所以有时候会进行A/B测试
- 模型需要对用户的反馈进行响应操作,即进行模型修改,但是要注意异常反馈信息对模型的影响,故需要进行必要的数据预处理操作