计算机复试 -- 机器学习简述

什么是机器学习?

1像人:机器学习就像人类的思考过程和决策过程一样,让系统自己从数据中学习,让机器变得更加聪明

2、依赖数据:机器学习是通过编程让计算机从数据中进行学习的科学,大数据将会使得机器学习领域更加具有竞争力

3、应用:机器学习与许多领域的处理技术结合,形成了计算机视觉,语音识别、自然语言处理等交叉领域。

4强人工智能:完全人工智能,指的是能够胜任人类的所有工作的人工智能,具有决策能力、学习能力、知识表达能力等,但强人工智能的实现具有一定的挑战性,计算许多海量的数据进行分析,分析较为复杂时,还得借助超级计算机

一个完整的机器学习项目流程

1、理解实际问题:抽象为机器学习能处理的数学模型

2、数据获取及其分析和预处理:用numpypandas进行数据观测,如果数据过大可以用tensorflow分布式

3、特征工程:从原始数据中进行特征构建、特征提取、特征选择

4、模型的选择及调优:过拟合和欠拟合是模型诊断中重要的问题

5、模型融合

6、上线运行

机器学习中用到的数学

梯度下降法:曲面上方向导数的最大值的方向就代表了梯度的方向,因此我们在做梯度下降的时候,应该沿着梯度的反方向进行权重的更新,直到有效的找到全局的最优解。梯度下降用于解决优化问题。

特征工程

特征工程就是把一个原始数据变成机器学习可以用的数据的一个过程,能够使得算法的效果和性能得到显著的提升。

1、离散值处理LabelEncoder可以用[中国、美国、日本]转化为[0,1,2],但这样会出现一个问题,中国和日本的平均值就等于美国了。决策树和随机森林等算法可以直接处理这样的类型的特征,并且这种方法使用的特征空间很少。

One-hot EncodingOne-hot编码是分裂变量作为二进制向量的表示。然后将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点。优势很明显,更容易被机器所理解,但是高维度是个严重地问题,对于类别值多的特征来说更加明显,高维灾难,模型更加复杂。因此要降维。

二值特征、多项式特征、binning特征

2日期特征pandasd.days\d.month\d.year):将时间的相关特征尽可能的提取

3文本特征(难度:怎么让机器读懂):nltk包、jieba分词,这里可以用k-means模型、N-G模型、TF-IDF模型、word2Vec模型

4、图像特征:通道数(即颜色通道,通常为rgb三重,灰色的为1重)、三维向量

为什么要使用机器学习?

1、需要进行大量手工调整或需要拥有长串规则才能解决的问题,

2、机器学习算法可以通过简化代码,提高性能;

3、问题复杂,传统方法难以解决;

4、环境有波动,机器学习算法可以使用新数据;

5、洞察复杂问题和大量数据

机器学习的主要挑战:

1、训练数据不足

2、不相关特征,没有代表的训练数据(样本偏差)

3、低质量的数据(有噪声)、不相关的特征(进行特征工程)

4、过拟合(泛化能力差)和欠拟合(在训练数据和测试数据上的性能都不是很好)

解决过拟合的方法有

1、简化模型,这包括了采用简单点的模型减少特征数把以及限制模型,即采用正则化;

2、增强训练数据;减少训练数据的噪声,进行数据数据清理,比如修正数据错误和去除异常值等

欠拟合解决方法

1、选择一个更强大的模型,带有更好的参数

2、用更好的特征进行训练学习(特征工程);

3、减少对模型的限制(比如减小正则化超参数)

线性回归:

线性回归是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归。通过训练数据集寻找参数的最优解,常见的最优解的方法有最小二乘法和梯度下降法。(回归算法)

优点:结果易于理解,计算上不复杂

缺点:对非线性的数据拟合不好

应用数据类型:数值型和标称型数据

逻辑回归

是基于Sigmoid函数,或者说Sigmoid就是逻辑回归函数,可以用梯度下降算法来求解代价函数最小的参数。(二分类

优点:实现简单,广泛应用于工业问题上;分类时计算量非常小,速度快,存储资源低;便于观测样本概率分数;对逻辑回归问题,多重共线性并不是问题,它可以结合L2正则化来解决该问题。

缺点:容易过拟合,一般精确度不高;只能处理二分类问题在此基础上衍生出的softmax可以用于处理多分类),且必须线性可分;特征空间很大时,逻辑回归的性能不是很好;不能很好地处理大量多类特征或向量;对于非线性特征,需要进行转换。

决策树

分类决策树模型时一种描述对实例进行分类的树形结构,决策树由结点有向边组成。结点有两种类型:内部结点和叶节点内部结点表示一个特征或者属性叶节点表示一个类。

决策树的生成对应于模型的局部选择,决策树的剪枝对应于模型的全局选择。决策树的生成只考虑局部最优,相对地,决策树的剪枝则考虑全局最优。

步骤:特征选择、决策树的生成(ID3C4.5)、决策树的剪枝

特征选择的准则:信息增益和信息增益比(信息增益的缺点:在偏向选择取值较多的特征的问题)

优点:

1、计算量简单,可解释性强,比较适合处理缺失属性值的样本,能够处理不相关的特征;

2、效率高,决策树只需要一次构建,可反复使用;训练时间复杂度低,预测的过程比较快。

缺点:

1、单颗决策树分类能力弱,并且对连续值变量难以处理

2、容易过拟合(后续出现了随机森林,减小了过拟合现象);

3、可能或陷于局部最小值中

4、没有在线学习

过拟合问题

1、剪枝:造成的泛化能力不行,因此,减掉一些树叶,使得模型的泛化能力更强。预剪枝是在决策树的生成过程中进行的;后剪枝是在决策树生成之后进行的。

2、交叉验证

3、随机森林

应用领域

企业管理实践,企业投资决策,由于决策树很好的分析能力,在决策过程应用较多。

 

随机森林

随机森林是指利用多棵树对样本训练并预测的一种分类器。使用的训练集是从总的训练集中有放回的采样出来的,用的特征是从所有特征中按照一定比例随机地无放回的抽取的。

优点

1、在数据集上表现良好,在当前的很多数据集上,相对其他算法有着很大的优势

2、它能够处理很高维度(特征很多)的数据,并且不用做特征选择

3、可以评估特征的重要性

4、在创建随机森林的时候,对 generlization error 使用的是无偏估计

5、训练速度快,容易做成并行化方法

6、在训练过程中,能够检测到特征间的互相影响

7、实现比较简单

8、对于不平衡的数据集来说,它可以平衡误差。

9、可以应用在特征缺失的数据集上,并仍然有不错的性能

缺点

1、随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟

2、对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。

支持向量机(SVM

SVM在数据挖掘中:用SVM解决多分类问题存在困难,但可以通过多个二分支持向量机的组合来解决

定义:SVM是二分类模型,其模型定义为特征空间上的间隔最大的线性分类器,即支持向量机的学习策略是间隔最大化。基于核的算法把输入数据映射到一个高阶的向量空间, 在这些高阶向量空间里, 有些分类或者回归问题能够更容易的解决 

训练数据线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机,又称为硬间隔支持向量机;训练数据近似线性可分时,通过软间隔最大化,也学习一个线性分类器,即线性支持向量机,也称为软间隔支持向量机;训练数据线性不可分时,通过使用核技巧和软间隔最大化,学习非线性支持向量机。

注:核函数并不是一种映射,它只是用来计算映射到高维空间后数据内积的一种方法

优点

1、使用核函数可以向高维空间进行映射

2、使用核函数可以解决非线性的分类

3、分类思想很简单,就是将样本与决策面的间隔最大化

4、分类效果较好

缺点

1、对大规模数据训练比较困难

2、无法直接支持多分类,但是可以使用间接的方法来做

3、噪声也会影响SVM的性能,因为SVM主要是由少量的支持向量决定的。

SVM应用领域

文本分类、图像识别、主要二分类领域

朴素贝叶斯

基于贝叶斯定力与特征条件独立假设的分类方法。算法的基础是概率问题,分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类。朴素贝叶斯假设是约束性很强的假设,假设特征条件独立,但朴素贝叶斯算法简单,快速,具有较小的出错率。

朴素贝叶斯根据特征是否离散,分为三种模型,如下所示:

1、贝叶斯估计/多项式模型:当特征是离散的时候,使用该模型;

2、高斯模型:特征是连续的时候采用该模型;

3、伯努利模型:特征是离散的,且取值只能是 0 1

优点对小规模的数据表现很好,适合多分类任务,适合增量式训练。

缺点对输入数据的表达形式很敏感(离散、连续,值极大极小之类的)。

 

K-means

K-均值是最普及的聚类算法,算法接受一个未被标记的数据集,然后将数据集聚类成不同的组。

K-均值是一个迭代算法,假设我们想要将数据聚类成 n 个组,其方法为:

1、首先选择 K 个随机的点称其为聚类中心

2、计算每个点分别到k个聚类中心的聚类

3、计算每一个组的平均值(质心),将该组所关联的中心点移动到平均值的位置

4、重复步骤 2-3,直到中心点不再变化

优点

1、k-means 算法是解决聚类问题的一种经典算法,算法简单、快速。

2、对处理大数据集,该算法是相对可伸缩的和高效率的,因为它的复杂度大约是 O(nkt),其中 n 是所有对象的数目,k 是簇的数目, t 是迭代的次数。通常 k<<n。这个算法通常局部收敛。

3、算法尝试找出使平方误差函数值最小的k个划分。当簇是密集的、球状或团状的,且簇与簇之间区别明显时,聚类效果较好。

缺点

1、k-平均方法只有在簇的平均值被定义的情况下才能使用,且对有些分类属性的数据不适合。

2、要求用户必须事先给出要生成的簇的数目  

3、对初值敏感,对于不同的初始值,可能会导致不同的聚类结果。

4、不适合于发现非凸面形状的簇,或者大小差别很大的簇。

5、对于"噪声"和孤立点数据敏感,少量的该类数据能够对平均值产生极大影响。

 

 KNN算法

k 近邻(KNN)是一种基本分类与回归方法。

其思路如下:给一个训练数据集和一个新的实例,在训练数据集中找出与这个新实例最近的 k个训练实例,然后统计最近的 k个训练实例中所属类别计数最多的那个类,就是新实例的类。其流程如下所示:

计算训练样本和测试样本中每个样本点的距离(常见的距离度量有欧式距离,马氏距离等);

KNN算法的优点

1KNN是一种在线技术,新数据可以直接加入数据集而不必进行重新训练

2KNN理论简单,容易实现,可用于非线性分类;

训练时间复杂度比支持向量机之类的算法低,仅为O(n),该算法比较适用于样本容量比较大的类域的自动分类,但那些样本容量较小的类域采用这种算法比较容易产生误分

3)训练时间复杂度为O(n)

4)理论成熟,思想简单,既可以用来做分类也可以用来做回归。

KNN算法的缺点

1、对于样本容量大的计算量比较大,需要大内存

2、样本不平衡时,预测偏差比较大。如:当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。

3KNN每一次分类都会重新进行一次全局运算。

4k值大小的选择。需要预先设定,而不能自适应

KNN算法应用领域

文本分类、模式识别、聚类分析,多分类领域,适用于对样本容量比较大的类域进行自动分类。

原理:

分类思想比较简单,从训练样本中找出K个与其最相近的样本,然后看这k个样本中哪个类别的样本多,则待判定的值(或说抽样)就属于这个类别。

KNN将测试集的数据特征与训练集的数据进行特征比较,然后算法提取样本集中特征最近邻数据的分类标签,即KNN算法采用测量不同特征值之间的距离的方法进行分类。KNN的思路很简单,就是计算测试数据与类别中心的距离。KNN具有精度高、对异常值不敏感、无数据输入假定、简单有效的特点,但其缺点也很明显,计算复杂度太高。要分类一个数据,却要计算所有数据,这在大数据的环境下是很可怕的事情。而且,当类别存在范围重叠时,KNN分类的精度也不太高。所以,KNN比较适合小量数据且精度要求不高的数据。

KNN有两个影响分类结果较大的函数,一个是数据归一化,一个是距离计算。如果数据不进行归一化,当多个特征的值域差别很大的时候,最终结果就会受到较大影响;第二个是距离计算。这应该算是KNN的核心了。目前用的最多的距离计算公式是欧几里得距离,也就是我们常用的向量距离计算方法。

 

AdaBoost

 AdaBoost算法优点

1、很好的利用了弱分类器进行级联。

2、可以将不同的分类算法作为弱分类器。

3AdaBoost具有很高的精度。

4、相对于bagging算法和Random Forest算法,AdaBoost充分考虑的每个分类器的权重。

Adaboost算法缺点

1AdaBoost迭代次数也就是弱分类器数目不太好设定,可以使用交叉验证来进行确定。

2、数据不平衡导致分类精度下降。

3、训练比较耗时,每次重新选择当前分类器最好切分点。

AdaBoost应用领域

目前AdaBoost算法广泛的应用于人脸检测、目标图像识别等领域。,用于二分类和多分类场景

原理:

AdaBoostboosting算法的代表分类器。boosting基于元算法(集成算法)。Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。其算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。

整个过程如下所示:
1. 先通过对N个训练样本的学习得到第一个弱分类器;
2. 将分错的样本和其他的新数据一起构成一个新的N个的训练样本,通过对这个样本的学习得到第二个弱分类器;
3. 将都分错了的样本加上其他的新样本构成另一个新的N个的训练样本,通过对这个样本的学习得到第三个弱分类器;
4. 如此反复,最终得到经过提升的强分类器。

神经网络

神经网络优点

1、分类准确度高,学习能力极强。

2对噪声数据鲁棒性和容错性较强。

3、有联想能力,能逼近任意非线性关系。

神经网络缺点

1、神经网络参数较多,权值和阈值。

2黑盒过程,不能观察中间结果。

3学习过程比较长,有可能入局部极小值。

人工神经网络应用领域

目前深度神经网络已经应用与计算机视觉,自然语言处理,语音识别等领域并取得很好的效果。

Apriori算法

Apriori算法是一种挖掘关联规则的算法,用于挖掘其内含的、未知的却又实际存在的数据关系,其核心是基于两阶段频集思想的递推算法

Apriori是关联分析中比较早的一种方法,主要用来挖掘那些频繁项集合。其思想是:

  1. 如果一个项目集合不是频繁集合,那么任何包含它的项目集合也一定不是频繁集合;

  2. 如果一个项目集合是频繁集合,那么它的任何非空子集也是频繁集合;

  Aprioir需要扫描项目表多遍,从一个项目开始扫描,舍去掉那些不是频繁的项目,得到的集合称为L,然后对L中的每个元素进行自组合,生成比上次扫描多一个项目的集合,该集合称为C,接着又扫描去掉那些非频繁的项目,重复

Apriori算法分为两个阶段:

1)寻找频繁项集

2)由频繁项集找关联规则

算法缺点:

1) 在每一步产生侯选项目集时循环产生的组合过多,没有排除不应该参与组合的元素;

2) 每次计算项集的支持度时,都对数据库中的全部记录进行了一遍扫描比较,需要很大的I/O负载。

 

CUDA及其加速计算

CUDA是一个方便我们编写代码调用GPU的框架,是显卡厂商Nvida推出的运行平台,该架构使GPU能够解决复杂的计算问题,很多底层通用代码已经集成,可以减少编程的工作量

map-reducespark使用

map-reduce都是分布式计算框架,相对于传统的分布式计算来说,两者给程序员提供了方便的分布式计算环境

区别:

1Hadoop MapReduce采用多进程模型,Spark采用多线程模型

2MapReduce适合批处理,对时效性不高的离线计算,因为他在计算的时候会将计算中间结果写在磁盘中,I/O消耗大

3Spark基于内存的计算框架,直接在内存中完成计算

posted @ 2020-03-25 16:33  TOWERB  阅读(1058)  评论(0编辑  收藏  举报