算法原理简介

算法原理简介

  • KNN

from sklearn.neighbors import KNeighborsClassifier

from sklearn.neighbors import KNeighborsRegressor

说明:KNN算法总体来说比较简单,总体来说这个算法基本原理需要人人都熟悉。

原理:KNN是一种既可以用于分类又可用于回归的机器学习算法。对于给定测试样本,基于距离度量找出训练集中与其最靠近的K个训练样本,然后基于这K个邻居的信息 来进行预测。

步骤

当它使用训练数据训练好模型,而用测试数据进行预测的时候:

1.计算测试数据与各个训练数据之间的距离

2.按照距离远近进行排序

3.选取距离最小的K个点

4.确定前K个点所在类别的出现频率,出现频率最高的类别作为测试数据的预测分类/计算前K个点的平均值作为测试数据的预测值 (机制类似bagging)

优点:

1.简单,易于理解,易于实现

2.精度高,对异常值不敏感

3.特别适合于多分类问题

缺点:

1.对测试样本分类时的计算量大,空间开销量大

2.当样本不平衡时,对稀有类别预测准确率低

3.可解释性不强

4.使用消极学习方法,基本上不学习,预测速度较慢

  • 逻辑回归(LogisticRegression简称LR

from sklearn.linear_model import LogisticRegression

擅长处理分类问题

原理:在线性回归的基础上加入了sigmoid函数。本质上使用一个线性回归模型的预测结果去逼近真实标记的对数几率。

优点:

分类时相对其他算法计算量很小,速度很快,消耗资源低

可以便利地观察样本的概率分数。

缺点:

容易欠拟合,一般的准确度不太高

当样本的特征空间很大时,逻辑回归的性能不是很好。

应用:

常常用于二分类问题上,但同时也可以输出概率的回归数值。

例如:是否为垃圾邮件,是否患病,金融诈骗,虚假账号

参数:

LogisticRegression默认带了正则化项,penalty参数可选择的值为l1和l2,

默认是l2正则化

L1是模型各个参数的绝对值之和,L1趋向于产生少许的特征,而其余的特征都是0

L2是模型各个参数的平方和,L2会选择更多的特征,这些特征都会接近于0

算法优化参数solver L1:liblinear    L2:libnear,lbfgs,newton-cg,sag

梯度下降:max_iter 最大迭代次数

处理多分类问题的方法:

  1. OvR — 损失函数的优化算法liblinear,newton-cg, lbfgs和sag都可以选择
  2. MvM(OvO是其特例) — 损失函数的优化算法只能选择newton-cg, lbfgs和sag
  3. 用softmax替代sigmoid函数

  • 朴素贝叶斯算法(高斯朴素贝叶斯,多项式朴素贝叶斯,伯努利朴素贝叶斯)

from sklearn.naive_bayes import GaussianNB

from sklearn.naive_bayes import MultinomialNB

from sklearn.naive_bayes import BernoulliNB

原理:在假设每个条件都独立的情况下,以贝叶斯定理为基础,利用概率统计对样本数据集进行分类。

优点:

1.简单快速,预测表现良好

2.直接使用概率预测,通常容易理解

3.如果变量满足独立条件,相比逻辑回归等其他分类算法,朴素贝叶斯分类器性能更优,只需要少量训练数据

4.相较于数值变量,朴素贝叶斯分类器在多个分类变量的情况下表现更好。若是数值变量,需要正态分布假设

缺点:

1.朴素贝叶斯模型对于属性个数较多,属性之间相关性较大时,分类效果不好。

2.需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。

3.由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定错误率。

4.对输入数据的表达形式很敏感。

应用:

实时预测,多类预测,文本分类/垃圾邮件/情感分析,推荐系统(过滤用户想看到和不想看到的东西

  • 决策树

定义:决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点 开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

原理:决策树基于树结构,从顶往下,依次对样本的(一个或多个)属性进行判断,直到决策树的叶节点并导出最终结果。决策树的划分原则就是:将无序的数据变得更加有序。

信息增益:ID3     在划分数据集之前之后信息发生的变化成为信息增益

ID3算法就是在每次需要分裂时,计算每个属性的增益,然后选择增益最大的属性进行分裂。

信息增益比:C4.5   信息增益与训练数据集的经验熵之比

CART分类算法是:根/性,gini系数的值越小,划分效果越好。

决策树模型参数:

max_features: None(所有) log2,sqrt, N特征小于50的时候一般使用所有的

max_depth: 设置决策随机森林中的决策树的最大深度,深度越大,越容易过拟合,推荐树的深度为5~20之间

min_samples_split:设置结点的最小样本数量,当样本数量可能小于此值时,结点将不会再划分

min_samples_leaf:这个值限制了叶子节点最小的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝

优点:

决策树有利于理解,可解释性好。

可以进行可视化分析,容易提取出规则。

比较适合处理有缺失属性的样本。

测试数据集时,运行速度较快。 

缺点:

容易发生过拟合。(集成学习模型特别是随机森林可以一定程度上防止过拟合)

容易忽略数据集中属性的相互关联。

  • 集成学习

一种思想:组合多个弱监督模型得到一个更好更全面的强监督模型

分为:序列集成方法(Boosting)和并行集成方法(Bagging)

序列集成方法(Boosting):boosting方法在弱模型上表现很好(例如浅层决策树)。首先对所有训练集进行学习,然后通过对训练错误标记的样本的模型赋值较高的权重不断学习,最后通过加法模型将弱分类器进行线性组合,提高整体的预测效果。

代表算法:AdaBoost、GBDT

Adaoost参数:

base_estimator:基分类器,默认决策树,在该分类器基础上进行boosting

n_estimators:基分类器提升(循环)次数,默认是50次,这个值过大,模型容易过拟合;值过小,模型容易欠拟合

learning_rate:学习率,表示梯度收敛速度,默认为1

Adaboost的总结: gg

在分类错误的部分增加训练权重,而在训练的过程是通过降低偏差来不断提高最终分类器的精度。

弱分类器一般会选择为CARTREE(也就是分类回归树)。由于上述高偏差和简单的要求每个分类回归树的深度不会很深。最终的总分类器是将每轮训练得到的弱分类最加权求和得到的〈(也就是加法模型)。

具体步骤:

1、首先,初始化训练数据的权值分布

2、进行多轮迭代

a 、使用具有权值分布Dm的训练数据集学习,得到基本分类器

b 、计算Gm(x)在训练数据集上的分类误差率

c 、计算Gm(x)的系数,am表示Gm(x)在最终分类器中的重要程度 (目的:得到基本分类器在最终分类器中所占的权重) 

d 、更新训练数据集的权值分布(为了得到样本的新的权值分布),用于下一轮迭代 

3、组合各个弱分类器,得到最终分类器

并行集成方法(Bagging)(装袋法):利用基础学习器之间的独立性,通过平均可以显著降低错误。因为bagging方法可以减小过拟合,所以通常在强分类器和复杂模型上使用时表现得很好(例如完全生长决策树)

Bagging核心为bootstrap(自助采样法),算法过程如下:

1.从原始样本集中抽取训练集,每轮从原始样本集中有放回地抽取n个训练样本,共进行k轮抽取,得到k个训练集

2.每次使用一个训练集得到一个模型,k个训练集得到k个模型

3.对于分类问题,将上步得到地k个模型采用投票方式得到分类结果。对于回归问题,计算模型地均值作为最后结果

Bagging参数:

base_estimator基学习器

n_estimators基学习器数量 

max_samples随机样本集的最大个数 

max_features随机特征子集的最大个数 

bootstrap控制样本是否放回取样(bootstrap=True,表示有放回取样)

bootstrap_features控制特征是否是有放回取样

bagging代表算法:

Random Forest 随机森林

原理:以树模型为基础学习器的bagging算法。(描述决策树的原理 + bagging的原理)

随机方式:样本随 特征随机 参数随机 模型随机(ID3,C4.5)

优点:

它可以拟合出来很高维度(特征很多)的数据,并且不用降维,无需做特征选择它可以判断特征的重要程度

能一定程度防止过拟合

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

如果有很大一部分的特征遗失,仍可以维持准确度。

缺点:

在某些噪音较大的分类或回归问题上会过拟合。

取值划分较多的属性会对随机森林产生更大的影响。

Extra Trees极限树

原理:算法与随机森林算法十分相似,都是由许多决策树构成

随机方式:特征随机 参数随机 模型随机(ID3 ,C4.5) 分裂随机 

极限树与随机森林的主要区别:

1. randomForest应用的是Bagging模型,extraTree使用的所有的样本,极限树的分裂是随机选取的,因为分裂是随机的,所以在某种程度上比随机森林得到的结果更加好

2. 随机森林是在一个随机集内得到最佳分叉属性,而ET是完全随机的得到分叉值,从而实现对决策树进行分叉的。 

GBDT简要原理:

DT是Decision Tree决策树,GB是Gradient Boosting(梯度推进、梯度提升),GBDT是一种学习策略,GBDT就是用Gradient Boosting的策略训练出来的DT决策树模型。模型的结果是一组回归分类树组合(CART Tree nsemble)T(1)......T(k) 。其中T(j) 模型的参数学习的是之前(j-i) 棵树预测结果的残差。

GBDT思想:就像准备考试前的复习,先做一遍习题册,然后把做错的题目挑出来,在做一次,然后把做错的题目挑出来在做一次,经过反复多轮训练,取得最好的成绩。

GBDT优缺点

1.GBDT优点

可以灵活处理各种类型的数据,包括连续值和离散值。

在相对较少的调参时间情况下,预测的准确率也比较高,相对SVM而言。

在使用一些健壮的损失函数,对异常值得预测性非常强。比如Huber损失函数和Quantile损失函数。

2.GBDT缺点

由于弱学习器之间存在较强依赖关系,难以并行训练。可以通过自采样的SGBT来达到部分并行。

重点描述:我们后一棵树,拟合(学习)前面的树预测结果的残差。为什么是残差?残差是我定义的损失函数(MSE)的一阶导,损失的一阶导是损失下降的最快的方向。

XGBoost:该算法思想是基于决策树,通过boosting算法的方式,在GBDT基础上的工程实现,它不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数,去拟合上次预测的残差,本质上是对上次预测失败的部分再进行预测并且为继续失败的部分赋予更高的权重的过程。当我们训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数,最后只需要将每棵树对应的分数加起来就是该样本的预测值。

2. 在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。

XGBoost与GBDT有什么不同:

除了算法上与传统的GBDT有一些不同外,XGBoost还在工程实现上做了大量的优化。总的来说,两者之间的区别和联系可以总结成以下几个方面。

1. GBDT是机器学习算法,XGBoost是该算法的工程实现。

2. 在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模 型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。

3. GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。

4. 传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器。

5. 传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机森林相似的策略,支持对数据进行采样

6. 传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略。

VotingClassifier

导入:from   sklearn.ensemble  import VotingClassifier

用法:VotingClassifier(estimators)   其中estimators是列表套元组的方式list of [(),(),(),....]:[(str,estimator)]

决策原理:

  1. Hard方式:voting='hard'

用多种机器学习方法得到的结果进行投票,少数服从多数得到结果。

  1. Soft方式:voting='soft'

将所有模型预测样本为某一类别的概率的平均值(或者求和)作为标准,概率最高的对应的类型为最终结果

  • K-means算法   聚类

from sklearn.cluster import KMeans

聚类:一种无监督的学习,事先不知道类别,自动将相似的对象归到同一个簇中

算法原理:

从训练集中随机选取k个中心点,通过计算每一个样本与中心之间的距离,将样本点归到最相似的类中,接着重新计算每个类的中心,重复这样的过程,直到中心不再改变,最终确定了每个样本所属的类别以及每个类的中心。

算法步骤:

1.从数据中选择k个对象作为初始聚类中心;

2.计算每个聚类对象到聚类中心的距离来划分;

3.再次计算每个聚类中心;

4.计算标准测度函数,直到达到最大迭代次数,则停止,否则,继续操作;

5.确定最优的聚类中心。

应用举例:

1.文档分类器

2.客户分类

3.保险欺诈检测

4.乘车数据分析

5.电力数据异常检测dd

模型评价:

from sklearn.metrics import silhouette_score

from sklearn.metrics import silhouette_samples

其中silhouette_score是返回所有点的平均轮廓系数,silhouette_samples返回每个点的轮廓系数

某个点的轮廓系数定义:

disMean{in}为该点与本类其他点的平均距离

disMean{out}为该点与非本类点的平均距离。

KMeans模型评价:轮廓系数s,取值范围[-1,1],越接近于1,说明聚类越优秀

聚类的个数应该由业务需求给定,而不是根据轮廓系数来判断,轮廓系数是在已知聚类个数的需求的前提下,针对特征工程处理的优化程度的评价。

  • DBscan算法

from sklearn.cluster import DBSCAN

算法原理:

DBSCAN是一种以密度为基础的空间聚类算法,可以用密度的概念剔除不属于任意类别的噪声点。该算法将簇定义为密度相连的点的最大集合,将具有足够密度的区域划分为簇,并可以发现任意形状的簇。

算法步骤:

1.确认确定两个参数:

epsilon:在一个点周围邻近区域的半径

MinPts:邻近区域内至少包含点的个数

2.任意选择一个点(既没有指定到一个类也没有特定为边缘点),计算它的NBHD(p,epsilon)判断是否为核点。如果是,在该点周围建立一个类,否则,设定为外围点;

3.遍历其他点,直到建立一个类。把directly-reachable的点加入到类中,接着把density-reachable的点也加进来。如果标记为边缘的点被加进来,修改状态为边缘点;

4.重复步骤1和2,直到所有的点满足在类中(核点或边缘点)或者为外围点。

利用轮廓函数对算法进行评估,得出最优参数

优点:

1.可以对任意形状的稠密数据集进行聚类,而K-Means之类的聚类算法一般只适用于凸数据集;

2.可以在聚类的同时发现异常点,对数据集中的异常点不敏感;

3.聚类结果没有偏倚,而K-Means之类的聚类算法初始值对聚类结果有很大影响。

缺点:

1.如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合;

2.如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进;

3.调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。

  • SVM 支持向量机    (有监督模型/无监督模型/半监督模型)

from sklearn.svm import SVC

from sklearn.svm import SVRhiuhijjh

(最大边际分类器)

原理:SVM是通过高维度的方式来解决低度上的问题,是在线性不可分的情况下解决分类和回归问题的一种强有力的算法。使用不同的核函数可以在各种不同的情况下以各种高维度思路来解决低维度的问题。

SVM的损失函数最初形态:

核函数:

核函数,又叫做“核技巧”(Kernel Trick),是一种能够使用数据原始空间中的向量计算来表示升维后的空间中的点积结果的数学方式。

目的是为了解决以下问题:

1、有了核函数之后,我们无需去担心究竟应该是什么样,因为非线性SVM中的核函数都是正定核函 数,他们都满足美世定律,确保了高维空间中任意两个向量的点积一定可以被低维空间中的这两个向量的某种计算来表示(多数时候是点积的某种变换)。

2、使用核函数计算低维度中的向量关系比计算原本的映射函数要简单太多

计算是在原始空间中进行,所以避免了维度诅咒的问题

SKlearn 中的核函数,用Kernel选择:

  • 降维方式

降维说明:通过保留一些重要特征,减少数据的维度的方法。

降维后的最终目标是各个属性维度之间线性无关。

降维的要点:首先让特征之间不相关,在不相关中选择最重要的特征(分布方差最大)。

每个新特征是所有原特征的线性组合,原特征并没有改变,是特征工程的一个方法

分布方差最大:最大限度的保留了原始数据的原貌

特征值就是分布方差

降维作用:

  1. 降低时间复杂度和空间复杂度;
  2. 节省了提取不必要特征的时间开销和空间开销;
  3. 去掉数据集中夹杂的噪声;
  4. 当数据能有较少的特征进行解释,我们可以更好的解释数据,使得我们可以提取知识;
  5. 实现数据可视化

降维的好处:

  1. 节省存储空间。数据压缩(数据在低维下更容易使用处理)。
  2. 降低算法的开销,加快机器学习中的计算速度,提高效率。
  3. 去除一些冗余的特征。消除冗余,去除噪声,降低维度灾难。

· 数据噪声:噪声数据是指数据中存在着错误或异常(偏离期望值)的数据,这些数据对数据的分析造成了干扰。

  1. 有利于数据可视化,以便观察和挖掘数据的特征

无监督降维:PCA主成分分析法  from sklearn.decomposition import PCA

PCA用于对一组连续正交分量中的多变量数据集进行方差最大方向的分解。是一种常用的线性降维数据分析方法,其实质是在能尽可能好的代表原特征的情况下,将原特征进行线性变换、映射至低维度空间中。也就是将N维特征映射到K维空间上,K<N,这K维特征是线性无关的。

注意:这是重新构造出来的K维特征,而不是简单地从N维特征中去除其余N-K维特征,因为有可能是某些新特征可能是几个原特征经过变换而来的;这也是特征选择和特征提取的根本区别。

rPCA核心问题:协方差矩阵的分解

PCA优点:

  1. 保留绝大部分信息;
  2. 消除评价指标之间的相关影响;
  3. 计算方法简单,易于在计算机上实现。

PCA缺点:

  1. 主成分分析往往具有一定模糊性,不如原始变量的含义那么清楚、确切

有监督降维:LDA线性判别分析法   from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

LDA思想:投影后类内方差最小,类间方差最大。

LDA算法的优点:

  1. 在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识。
  2. LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优。

LDA算法的缺点

  1. LDA不适合对非高斯分布样本进行降维,PCA也有这个问题。
  2. LDA降维最多降到类别数K-1的维数,如果我们降维的维度大于K-1,则不能使用LDA。当然,目前有一些LDA的进化版算法可以绕过这个问题。
  3. LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好。
  4. LDA可能过度拟合数据。

LDA和PCA的区别:

相同点:

  1. PCA和LDA均可以对数据进行降维。
  2. 两者在降维时均使用了矩阵特征分解的思想。
  3. 两者都假设数据符合高斯分布。

不同点:

  1. LDA是有监督的降维方法,而PCA是无监督的降维方法。
  2. LDA降维最多降到类别数K-1的维数,而PCA则没有这个限制。
  3. LDA除了可以用于降维,还可以用于分类。
  4. LDA选择分类性能最好的投影方向,而PCA选择样本点具有最大方差的投影方向。

基础知识补充

  • ElasticSearch

定义:ElasticSearch是一个基于Lucene的搜索服务器,它提供了一个分布式多用户的全文搜索引擎。

原理:首先用户将数据提交到ElasticSearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。

特点:

  1. 免费开源的搜索引擎
  2. 分布式的实时文件存储,每个字段都被索引并可被搜索
  3. 实时分析的分布式搜索引擎
  4. 可以扩展到上百台服务器,处理 PB 级结构化或非结构化数据

es官方地址:Starting with the Elasticsearch Platform and its Solutions | Elastic

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值