本文目录一览:
- 1、贝叶斯分类器(3)朴素贝叶斯分类器
- 2、python scikit-learn 有什么算法
- 3、python 如何得到准确率最高的贝叶斯分类器
- 4、哪些机器学习算法可以处理多分类
- 5、朴素贝叶斯分类算法的sklearn实现
- 6、机器学习有哪些算法
贝叶斯分类器(3)朴素贝叶斯分类器
根据 贝叶斯分类器(1)贝叶斯决策论概述、贝叶斯和频率、概率和似然 ,我们对贝叶斯分类器所要解决的问题、问题的求解方法做了概述,将贝叶斯分类问题转化成了求解 的问题,在上一篇 贝叶斯分类器(2)极大似然估计、MLE与MAP
中,我们分析了第一个求解方法:极大似然估计。在本篇中,我们来介绍一个更加简单的 求解方法,并在此基础上讲讲常用的一个贝叶斯分类器的实现:朴素贝叶斯分类器(Naive Bayes classifier)。
我们的目标是通过对样本的学习来得到一个分类器,以此来对未知数据进行分类,即求后验概率 。在 贝叶斯分类器(1)贝叶斯决策论概述、贝叶斯和频率、概率和似然 中,我们描述了贝叶斯分类器是以生成式模型的思路来处理这个问题的,如下面的公式所示,贝叶斯分类器通过求得联合概率 来计算 ,并将联合概率 转化成了计算类先验概率 、类条件概率 、证据因子 。
其中的难点是类条件概率 的计算,因为样本 本身就是其所有属性的联合概率,各种属性随意组合,变幻莫测,要计算其中某一种组合出现的概率真的是太难了,而朴素贝叶斯的出现就是为了解决这个问题的。
要想计算联合概率 ,我们肯定是希望事件 与事件 是相互独立的,可以简单粗暴的 ,多想对着流星许下心愿:让世界上复杂的联合概率都变成简单的连乘!
朴素贝叶斯实现了我们的梦想!朴素贝叶斯中的朴素就是对多属性的联合分布做了一个大胆的假设,即 的 个维度之间相互独立:
朴素贝叶斯通过这一假设大大简化了 的计算,当然,使用这个假设是有代价的,一般情况下,大量样本的特征之间独立这个条件是弱成立的,毕竟哲学上说联系是普遍的,所以我们使用朴素贝叶斯会降低一些准确性;如果实际问题中的事件的各个属性非常不独立的话,甚至是无法使用朴素贝叶斯的。总的来说,朴素贝叶斯大大简化了计算,同时牺牲了一些结果的准确性,具体要不要使用、怎么使用就看我们在实际问题中的权衡了。
在朴素贝叶斯的思想下再看回分类问题,事件 有 个属性,可将分类问题按下式转化:
只需要计算出上式不同类别 下的值,令值最大的类别 即为分类结果。
其中,根据大数定律, , 是类别 下的后验概率,其计算要取决于先验 ,这里需要分为 是离散或连续两种情况:
为样本中类别为 的频数, 为类别为 的样本中,第 个属性中 出现的频数。
不过有些出现的概率比较低的属性,在我们的样本中不一定会出现,即频数为0,如果不作处理的话会导致其 为0,会导致包含这个属性的样本永远都不会被分类到类别 ,而现实不一定是这样,因此我们需要对没出现的情况做平滑处理,比如常见的拉普拉斯平滑,给分子 的频数加上一个定值 ,而分母加上 ,表示为第 个属性中的每一种取值的频数都加定值 :
举例:垃圾邮件判断
朴素贝叶斯分类在垃圾邮件的判断上有不错的实践效果,这是一个二分类问题, ,假设 为垃圾邮件, 为正常邮件,统计出:
现在收到一封邮件包含一些关键词:【中奖,笔记本电脑,特朗普,大选,...】,根据大量的数据可以统计出这些词出现的频数,除以类别中所有词的总频数得到其出现的后验概率,在垃圾邮件中:
在正常邮件中:
可以计算得到:
时的值是 时值的26倍,所以判断此邮件是垃圾邮件。
我们判断西瓜好坏的问题也可以转化成离散型随机变量的分类问题,过程与上面类似。
比如垃圾邮件的例子,在多项式朴素贝叶斯中:
如果我们只关心“中奖”出现与否,不管词频,则在伯努利朴素贝叶斯中:
举例:性别判断
下面是一组人类身体特征的统计资料。
有人身高6英尺、体重130磅,脚掌8英寸,判断此人性别:
各属性为连续变量,假设男性和女性的身高、体重、脚掌都是正态分布,通过样本计算出均值和方差。男性的身高是均值5.855、方差0.035的正态分布。所以,例如男性的身高为6英尺的概率的相对值等于1.5789(密度函数的值,并不是概率,只用来反映各个值的相对可能性)。
分布确定后,就可以计算性别的分类了:
女性的概率比男性要高出将近10000倍,所以判断该人为女性。
在前文1.2.1小节中我们已经提过平滑处理,主要针对于那些在样本中没有出现过的词,它们的概率是0,导致在分类中完全没有存在感,所以要对这些进行平滑处理。
平滑处理的方法也有很多种,包括我们上面说过的拉普拉斯平滑,除此之外还有古德图灵平滑,线性插值法,回退法(K-Z回退)等,不过这些方法在自然语言处理中比较常用,我们暂时先不多介绍了,还是聚焦在朴素贝叶斯上,下面我们看看朴素贝叶斯在sklearn中的实现。
sklearn中有3种常用的不同类型的朴素贝叶斯:
1)高斯分布型朴素贝叶斯
Parameters
priors: array-like of shape (n_classes,)
类别的先验概率,如果指定,则不再根据数据计算调整
var_smoothing: float, default=1e-9
Portion of the largest variance of all features that is added to variances for calculation stability.(不是很明白)
2)多项式分布型朴素贝叶斯
Parameters
alpha: float, default=1.0
Additive (Laplace/Lidstone) smoothing parameter (0 for no smoothing).
fit_prior: bool, default=True
Whether to learn class prior probabilities or not. If false, a uniform prior will be used.
class_prior: array-like of shape (n_classes,), default=None
Prior probabilities of the classes. If specified the priors are not adjusted according to the data.
其常用函数与高斯型一样。
3)伯努利分布型朴素贝叶斯
Parameters
binarize: float or None, default=0.0
Threshold for binarizing (mapping to booleans) of sample features. If None, input is presumed to already consist of binary vectors.(用于设置二值化的阈值)
官方例子与多项式型的基本一样,而且也没有设置binarize,相当于默认使用binarize=0.0,根据源码 sklearn/preprocessing/_data.py
中的binarize(X, *, threshold=0.0, copy=True)函数可以发现,大于binarize的都赋值为1,其他为0。
优点
缺点
可见,朴素贝叶斯的缺点很大程度来来源于其假设太强,对于其假设符合程度较低的问题会损失较多的准确性,因此,如果我们能把假设弱化一下,是不是就能提高朴素贝叶斯的性能呢?在接下来的篇章中我们来继续探索。
主要参考资料
《机器学习》周志华
《统计学习方法》 李航
scikit-learn Naive Bayes文档
python scikit-learn 有什么算法
1,前言
很久不发文章,主要是Copy别人的总感觉有些不爽,所以整理些干货,希望相互学习吧。不啰嗦,进入主题吧,本文主要时说的为朴素贝叶斯分类算法。与逻辑回归,决策树一样,是较为广泛使用的有监督分类算法,简单且易于理解(号称十大数据挖掘算法中最简单的算法)。但其在处理文本分类,邮件分类,拼写纠错,中文分词,统计机器翻译等自然语言处理范畴较为广泛使用,或许主要得益于基于概率理论,本文主要为小编从理论理解到实践的过程记录。
2,公式推断
一些贝叶斯定理预习知识:我们知道当事件A和事件B独立时,P(AB)=P(A)(B),但如果事件不独立,则P(AB)=P(A)P(B|A)。为两件事件同时发生时的一般公式,即无论事件A和B是否独立。当然也可以写成P(AB)=P(B)P(A|B),表示若要两件事同事发生,则需要事件B发生后,事件A也要发生。
由上可知,P(A)P(B|A)= P(B)P(A|B)
推出P(B|A)=
其中P(B)为先验概率,P(B|A)为B的后验概率,P(A|B)为A的后验概率(在这里也为似然值),P(A)为A的先验概率(在这也为归一化常量)。
由上推导可知,其实朴素贝叶斯法就是在贝叶斯定理基础上,加上特征条件独立假设,对特定输入的X(样本,包含N个特征),求出后验概率最大值时的类标签Y(如是否为垃圾邮件),理解起来比逻辑回归要简单多,有木有,这也是本算法优点之一,当然运行起来由于得益于特征独立假设,运行速度也更快。
. 参数估计
3,参数估计
由上面推断出的公式,我们知道其实朴素贝叶斯方法的学习就是对概率P(Y=ck)和P(X(j)=x(j)|Y=ck)的估计。我们可以用极大似然估计法估计上述先验概率和条件概率。
其中I(x)为指示函数,若括号内成立,则计1,否则为0。李航的课本直接给出了用极大似然(MLE)估计求出的结果,并没给推导过程,
我们知道,贝叶斯较为常见的问题为0概率问题。为此,需要平滑处理,主要使用拉普拉斯平滑,如下所示:
K是类的个数,Sj是第j维特征的最大取值。实际上平滑因子λ=0即为最大似然估计,这时会出现提到的0概率问题;而λ=1则避免了0概率问题,这种方法被称为拉普拉斯平滑。
4,算法流程
5,朴素贝叶斯算法优缺点
优点:朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率
需调参较少,简单高效,尤其是在文本分类/垃圾文本过滤/情感判别等自然语言处理有广泛应用。
在样本量较少情况下,也能获得较好效果,计算复杂度较小,即使在多分类问题。
无论是类别类输入还是数值型输入(默认符合正态分布)都有相应模型可以运用。
缺点:0概率问题,需要平滑处理,通常为拉普拉斯平滑,但加一平滑不一定为效果最好,
朴素贝叶斯有分布独立的假设前提,生活中较少完全独立,在属性个数比较多或者属性之间相关性较大时,NBC模型的分类效率比不上决策树模型。而在属性相关性较小时,NBC模型的性能最为良好。
模型注意点:
1, 大家也知道,很多特征是连续数值型的,一般选择使用朴素贝叶斯高斯模型。
2, 为避免0概率事件,记得平滑,简单一点可以用『拉普拉斯平滑』。先处理处理特征,把相关特征去掉,
3, 朴素贝叶斯分类器一般可调参数比较少,需集中精力进行数据的预处理等特征工程工作。
6,Scikit-learn三大朴素贝叶斯模型
Scikit-learn里面有3种不同类型的朴素贝叶斯(:
1, 高斯分布型模型:用于classification问题,假定属性/特征是服从正态分布的,一般用在数值型特征。,
2, 多项式型模型:用于离散值模型里。比如文本分类问题里面我们提到过,我们不光看词语是否在文本中出现,也得看出现的次数。如果总词数为n,出现词数为m的话,说起来有点像掷骰子n次出现m次这个词的场景。
3, 伯努利模型:这种情况下,就如提到的bag ofwords处理方式一样,最后得到的特征只有0(没出现)和1(出现过)。
7. Scikit-learn算法实践
小编通过实现朴素贝叶斯三种模型以及主要分类算法,对比发现跟SVM,随机森林,融合算法相比,贝叶斯差距明显,但其时间消耗要远低于上述算法,以下为主要算法主要评估指标)。
8. Python代码
# -*-coding: utf-8 -*-
importtime
fromsklearn import metrics
fromsklearn.naive_bayes import GaussianNB
fromsklearn.naive_bayes import MultinomialNB
fromsklearn.naive_bayes import BernoulliNB
fromsklearn.neighbors import KNeighborsClassifier
fromsklearn.linear_model import LogisticRegression
fromsklearn.ensemble import RandomForestClassifier
fromsklearn import tree
fromsklearn.ensemble import GradientBoostingClassifier
fromsklearn.svm import SVC
importnumpy as np
importurllib
# urlwith dataset
url ="-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
#download the file
raw_data= urllib.request.urlopen(url)
#load the CSV file as a numpy matrix
dataset= np.loadtxt(raw_data, delimiter=",")
#separate the data from the target attributes
X =dataset[:,0:7]
#X=preprocessing.MinMaxScaler().fit_transform(x)
#print(X)
y =dataset[:,8]
print("\n调用scikit的朴素贝叶斯算法包GaussianNB ")
model= GaussianNB()
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print("\n调用scikit的朴素贝叶斯算法包MultinomialNB ")
model= MultinomialNB(alpha=1)
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print("\n调用scikit的朴素贝叶斯算法包BernoulliNB ")
model= BernoulliNB(alpha=1,binarize=0.0)
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print("\n调用scikit的KNeighborsClassifier ")
model= KNeighborsClassifier()
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print("\n调用scikit的LogisticRegression(penalty='l2') ")
model= LogisticRegression(penalty='l2')
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print("\n调用scikit的RandomForestClassifier(n_estimators=8) ")
model= RandomForestClassifier(n_estimators=8)
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print("\n调用scikit的tree.DecisionTreeClassifier() ")
model= tree.DecisionTreeClassifier()
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print("\n调用scikit的GradientBoostingClassifier(n_estimators=200) ")
model= GradientBoostingClassifier(n_estimators=200)
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
print("\n调用scikit的SVC(kernel='rbf', probability=True) ")
model= SVC(kernel='rbf', probability=True)
start_time= time.time()
model.fit(X,y)
print('training took %fs!' % (time.time() - start_time))
print(model)
expected= y
predicted= model.predict(X)
print(metrics.classification_report(expected,predicted))
print(metrics.confusion_matrix(expected,predicted))
"""
# 预处理代码集锦
importpandas as pd
df=pd.DataFrame(dataset)
print(df.head(3))
print(df.describe())##描述性分析
print(df.corr())##各特征相关性分析
##计算每行每列数据的缺失值个数
defnum_missing(x):
return sum(x.isnull())
print("Missing values per column:")
print(df.apply(num_missing, axis=0)) #axis=0代表函数应用于每一列
print("\nMissing values per row:")
print(df.apply(num_missing, axis=1).head()) #axis=1代表函数应用于每一行"""
python 如何得到准确率最高的贝叶斯分类器
该样本被分为C类的条件概率。那么如何用上式来对测试样本分类呢?
举例来说,有个测试样本,其特征F1出现了(F1=1),那么就计算P(C=0|F1=1)和P(C=1|F1=1)的概率值。前者大,则该样本被认为是0类;后者大,则分为1类。
哪些机器学习算法可以处理多分类
maxsoft作为logistics二分类的改进版,天生适合多分类;神经网络(如bp神经网络,随机权神经网络,RBF神经网络等);通过建立多个支持向量机或者最小二乘支持向量机分类模型,通过投票算法选择概率最大的分类标签;也可以通过聚类算法(KNN,kMeans等)等无监督学习算法实现分类。
朴素贝叶斯分类器算法是最受欢迎的学习方法之一,按照相似性分类,用流行的贝叶斯概率定理来建立机器学习模型,特别是用于疾病预测和文档分类。 它是基于贝叶斯概率定理的单词的内容的主观分析的简单分类。
如果特征数量远大于训练样本数,则使用逻辑回归或线性核方法的SVM。
如果特征数较小,而样本数量相对较多,可以考虑高斯核方法的SVM。
如果特征数少儿样本数极大,可以考虑增加一些特征,再使用逻辑回归或线性核方法的SVM
神经网络则对上述情况都可适用,但训练时间较长。
想要学习了解更多机器学习的信息,推荐CDA数据分析师课程。CDA 与国际知名考试服务机构 Pearson VUE 合作,认证考点覆盖全球。课程内容综合使用统计分析方法、统计模型、运筹学、机器学习、文本挖掘算法,而非单一的机器学习算法。 点击预约免费试听课。
朴素贝叶斯分类算法的sklearn实现
1、背景
《机器学习实战》当中,用python根据贝叶斯公式实现了基本的分类算法。现在来看看用sklearn,如何实现。还拿之前的例子,对帖子的分类。数据如下:
补充:题目的值左边是几个人的评论,右边是评论属于侮辱类(1)、正常类(0),需要进行文本分类,且再有新的文本过来时能自动划分至0或1。
2、分类
(1)算法的准备
通过查看sklearn的训练模型函数,fit(X, Y),发现只需要准备两个参数。一个是数据的矩阵,另一个是数据的分类数组。首先就是将以上的文本转化成矩阵。
在前一章其实已经讲解过如何将文本转化成矩阵。这里将示意的再补充下。
a.首先选取所有的单词,形成列,也可理解为属性。例如:
b.其次将遍历每个文本,填满上述列的值。文本出现过列的次,填一。没有出现过填0。比如第一句就是:my dog has flea problems help please,可表示为:
同理所有的文本都可如此表示,所以就形成了一个数字的矩阵。
(2)beyes模型的选择
在完成数据的准备以后,就可以直接调用sklearn的模型和函数完成模型的训练啦。但在beyes模型的选择的时候发现,beyes下有多个模型可选择,所以这个会让人纠结。接下来共同了解下这些模型:
a.高斯模型(GaussianNB)
高斯模型是对于每个属性的值是连续的,且服从高斯分布时可使用:
比如人的身高,比如花的高度等等。当然你也可将这些数据离散化,比如按等距划分、等频划分成离散的值,但可能效果都没有直接用高斯模型来计算的好。
用法:class sklearn.naive_bayes.GaussianNB
参数:无
b.多项式模型(MultinominalNB)
如果大部分是多元离散值,则采用多项式模型要好些。多项式模型,通常就是构造参数向量,然后通过极大似然估计来寻求参数的最有值。
这里只简单的略列一些公式,具体可查询更多资料。从这个计算过程中可得出,这里引入啦一个平滑先验值alpha,这个值在模型训练的时候也会用到。通常alpha0,可引入不在训练集的特征,尤其当alpha=1,成为拉普拉丝平滑。具体alpha取值对模型的影响可附件的图。
用法:class sklearn.naive_bayes.MultinomialNB(alpha=1.0,fit_prior=True,class_prior=None)
参数:
alpha:浮点数,就是上述说的引入平滑的值;
fit_prior:bool值,如果为Ture,则不用去学习P(y=ck),以均匀分布替代,否则则去学习P(y=ck)(不懂)
class_prior:一个数组。它指定了每个分类的先验概率P(y=c1),P(y=c2)…..,若指定了该参数
则每个分类的先验概率无需学习 (不懂)
c.伯努利模型(BernoulliNB)
如果特征值为二元离散值或是稀疏的多元离散值,则可采用伯努利模型。
公式:class sklearn.naive_bayes.BernoulliNB(alpha=1.0,binarize=0.0,fit_prior=Ture,
class_prior=None)
参数:
binarize:一个浮点数或者None,如果为浮点数则以该数值为界,特征值大于它的取1,小于的为0 。如果为None,假定原始数据已经二值化
其它参数同上。
通过以上的模型对比和分析,由于文本分析转化后是很多二项取值的稀疏矩阵,因此选取伯努利模型效果会更佳。
补充:alpha、binarize值对模型效果的影响
机器学习有哪些算法
朴素贝叶斯分类器算法是最受欢迎的学习方法之一,按照相似性分类,用流行的贝叶斯概率定理来建立机器学习模型,特别是用于疾病预测和文档分类。 它是基于贝叶斯概率定理的单词的内容的主观分析的简单分类。
什么时候使用机器学习算法 - 朴素贝叶斯分类器?
(1)如果您有一个中等或大的训练数据集。
(2)如果实例具有几个属性。
(3)给定分类参数,描述实例的属性应该是条件独立的。
A.朴素贝叶斯分类器的应用
(1)情绪分析 - 用于Facebook分析表示积极或消极情绪的状态更新。
(2)文档分类 - Google使用文档分类来索引文档并查找相关性分数,即PageRank。 PageRank机制考虑在使用文档分类技术解析和分类的数据库中标记为重要的页面。
(3)朴素贝叶斯算法也用于分类关于技术,娱乐,体育,政治等的新闻文章。
(4)电子邮件垃圾邮件过滤 - Google Mail使用NaïveBayes算法将您的电子邮件归类为垃圾邮件或非垃圾邮件。
B.朴素贝叶斯分类器机器学习算法的优点
(1)当输入变量是分类时,朴素贝叶斯分类器算法执行得很好。
(2)当朴素贝叶斯条件独立假设成立时,朴素贝叶斯分类器收敛更快,需要相对较少的训练数据,而不像其他判别模型,如逻辑回归。
(3)使用朴素贝叶斯分类器算法,更容易预测测试数据集的类。 多等级预测的好赌注。
(4)虽然它需要条件独立假设,但是朴素贝叶斯分类器在各种应用领域都表现出良好的性能。
Python中的数据科学库实现NaïveBayes - Sci-Kit学习
数据科学图书馆在R实施朴素贝叶斯 - e1071
3.2 K均值聚类算法
K-means是用于聚类分析的普遍使用的无监督机器学习算法。 K-Means是一种非确定性和迭代的方法。 该算法通过预定数量的簇k对给定数据集进行操作。 K Means算法的输出是具有在簇之间分割的输入数据的k个簇。
例如,让我们考虑维基百科搜索结果的K均值聚类。 维基百科上的搜索词“Jaguar”将返回包含Jaguar这个词的所有页面,它可以将Jaguar称为Car,Jaguar称为Mac OS版本,Jaguar作为动物。 K均值聚类算法可以应用于对描述类似概念的网页进行分组。 因此,算法将把所有谈论捷豹的网页作为一个动物分组到一个集群,将捷豹作为一个汽车分组到另一个集群,等等。
A.使用K-means聚类机学习算法的优点
(1)在球状簇的情况下,K-Means产生比层级聚类更紧密的簇。
(2)给定一个较小的K值,K-Means聚类计算比大量变量的层次聚类更快。
B.K-Means聚类的应用
K Means Clustering算法被大多数搜索引擎(如Yahoo,Google)用于通过相似性对网页进行聚类,并识别搜索结果的“相关率”。 这有助于搜索引擎减少用户的计算时间。
Python中的数据科学库实现K均值聚类 - SciPy,Sci-Kit学习,Python包装
数据科学库中的R实现K均值聚类 - 统计
3.3 支持向量机学习算法
支持向量机是一种分类或回归问题的监督机器学习算法,其中数据集教导关于类的SVM,以便SVM可以对任何新数据进行分类。 它通过找到将训练数据集分成类的线(超平面)将数据分类到不同的类中来工作。 由于存在许多这样的线性超平面,SVM算法尝试最大化所涉及的各种类之间的距离,并且这被称为边际最大化。 如果识别出最大化类之间的距离的线,则增加对未看见数据良好推广的概率。
A.SVM分为两类:
线性SVM - 在线性SVM中,训练数据,即分类器由超平面分离。
非线性SVM在非线性SVM中,不可能使用超平面来分离训练数据。 例如,用于面部检测的训练数据由作为面部的一组图像和不是面部的另一组图像(换句话说,除了面部之外的所有其他图像)组成。 在这种条件下,训练数据太复杂,不可能找到每个特征向量的表示。 将面的集合与非面的集线性分离是复杂的任务。
B.使用SVM的优点
(1)SVM对训练数据提供最佳分类性能(精度)。
(2)SVM为未来数据的正确分类提供了更高的效率。
(3)SVM的最好的事情是它不对数据做任何强有力的假设。
(4)它不会过度拟合数据。
C.支持向量机的应用
(1)SVM通常用于各种金融机构的股票市场预测。 例如,它可以用来比较股票相对于同一行业中其他股票的表现的相对表现。 股票的相对比较有助于管理基于由SVM学习算法做出的分类的投资决策。
(2)Python中的数据科学库实现支持向量机-SciKit学习,PyML,SVMStruct Python,LIBSVM
(3)R中的数据科学库实现支持向量机 - klar,e1071
3.4 Apriori机器学习算法
Apriori算法是无监督机器学习算法,其从给定数据集生成关联规则。 关联规则意味着如果项目A出现,则项目B也以一定概率出现。 生成的大多数关联规则采用IF_THEN格式。 例如,如果人们买了一个iPad,他们还买了一个iPad保护套。 为了得到这样的结论的算法,它首先观察购买iPad的人购买iPad的人数。 这样一来,比例就像100个购买iPad的人一样,85个人还购买了一个iPad案例。
A.Apriori机器学习算法的基本原理:
如果项集合频繁出现,则项集合的所有子集也频繁出现。
如果项集合不经常出现,则项集合的所有超集都不经常出现。
B.先验算法的优点
(1)它易于实现并且可以容易地并行化。
(2)Apriori实现使用大项目集属性。
C.Apriori算法应用
检测不良药物反应
Apriori算法用于关于医疗数据的关联分析,例如患者服用的药物,每个患者的特征,不良的不良反应患者体验,初始诊断等。该分析产生关联规则,其帮助识别患者特征和药物的组合 导致药物的不良副作用。
市场篮子分析
许多电子商务巨头如亚马逊使用Apriori来绘制数据洞察,哪些产品可能是一起购买,哪些是最响应促销。 例如,零售商可能使用Apriori预测购买糖和面粉的人很可能购买鸡蛋来烘烤蛋糕。
自动完成应用程序
Google自动完成是Apriori的另一个流行的应用程序,其中 - 当用户键入单词时,搜索引擎寻找人们通常在特定单词之后键入的其他相关联的单词。
Python中的数据科学库实现Apriori机器学习算法 - 在PyPi中有一个python实现Apriori
数据科学库在R中实现Apriori机器学习算法 – arules
3.5 线性回归机器学习算法
线性回归算法显示了2个变量之间的关系,以及一个变量中的变化如何影响另一个变量。 该算法显示了在改变自变量时对因变量的影响。 自变量被称为解释变量,因为它们解释了因变量对因变量的影响。 依赖变量通常被称为感兴趣的因子或预测因子。
A.线性回归机器学习算法的优点
(1)它是最可解释的机器学习算法之一,使得它很容易解释给别人。
(2)它易于使用,因为它需要最小的调谐。
(3)它是最广泛使用的机器学习技术运行快。
B.线性回归算法应用
估计销售额
线性回归在业务中有很大的用途,基于趋势的销售预测。如果公司每月的销售额稳步增长 - 对月度销售数据的线性回归分析有助于公司预测未来几个月的销售额。
风险评估
线性回归有助于评估涉及保险或金融领域的风险。健康保险公司可以对每个客户的索赔数量与年龄进行线性回归分析。这种分析有助于保险公司发现,老年顾客倾向于提出更多的保险索赔。这样的分析结果在重要的商业决策中起着至关重要的作用,并且是为了解决风险。
Python中的数据科学库实现线性回归 - statsmodel和SciKit
R中的数据科学库实现线性回归 - 统计
3.6 决策树机器学习算法
你正在制作一个周末计划,去访问最好的餐馆在城里,因为你的父母访问,但你是犹豫的决定在哪家餐厅选择。每当你想去一家餐馆,你问你的朋友提利昂如果他认为你会喜欢一个特定的地方。为了回答你的问题,提利昂首先要找出,你喜欢的那种餐馆。你给他一个你去过的餐馆列表,告诉他你是否喜欢每个餐厅(给出一个标记的训练数据集)。当你问提利昂你是否想要一个特定的餐厅R,他问你各种问题,如“是”R“屋顶餐厅?”,“餐厅”R“服务意大利菜吗?”,现场音乐?“,”餐厅R是否营业至午夜?“等等。提利昂要求您提供几个信息问题,以最大限度地提高信息收益,并根据您对问卷的答案给予YES或NO回答。这里Tyrion是你最喜欢的餐厅偏好的决策树。
决策树是一种图形表示,其使用分支方法来基于某些条件来例示决策的所有可能的结果。在决策树中,内部节点表示对属性的测试,树的每个分支表示测试的结果,叶节点表示特定类标签,即在计算所有属性之后作出的决定。分类规则通过从根到叶节点的路径来表示。
A.决策树的类型
(1)分类树 - 这些被视为用于基于响应变量将数据集分成不同类的默认种类的决策树。 这些通常在响应变量本质上是分类时使用。
(2)回归树 - 当响应或目标变量是连续或数字时,使用回归树。 与分类相比,这些通常用于预测类型的问题。
根据目标变量的类型 - 连续变量决策树和二进制变量决策树,决策树也可以分为两种类型。 它是有助于决定对于特定问题需要什么样的决策树的目标变量。
B.为什么选择决策树算法?
(1)这些机器学习算法有助于在不确定性下作出决策,并帮助您改善沟通,因为他们提供了决策情况的可视化表示。
(2)决策树机器学习算法帮助数据科学家捕获这样的想法:如果采取了不同的决策,那么情境或模型的操作性质将如何剧烈变化。
(3)决策树算法通过允许数据科学家遍历前向和后向计算路径来帮助做出最佳决策。
C.何时使用决策树机器学习算法
(1)决策树对错误是鲁棒的,并且如果训练数据包含错误,则决策树算法将最适合于解决这样的问题。
(2)决策树最适合于实例由属性值对表示的问题。
(3)如果训练数据具有缺失值,则可以使用决策树,因为它们可以通过查看其他列中的数据来很好地处理丢失的值。
(4)当目标函数具有离散输出值时,决策树是最适合的。
D.决策树的优点
(1)决策树是非常本能的,可以向任何人轻松解释。来自非技术背景的人,也可以解释从决策树绘制的假设,因为他们是不言自明的。
(2)当使用决策树机器学习算法时,数据类型不是约束,因为它们可以处理分类和数值变量。
(3)决策树机器学习算法不需要对数据中的线性进行任何假设,因此可以在参数非线性相关的情况下使用。这些机器学习算法不对分类器结构和空间分布做出任何假设。
(4)这些算法在数据探索中是有用的。决策树隐式执行特征选择,这在预测分析中非常重要。当决策树适合于训练数据集时,在其上分割决策树的顶部的节点被认为是给定数据集内的重要变量,并且默认情况下完成特征选择。
(5)决策树有助于节省数据准备时间,因为它们对缺失值和异常值不敏感。缺少值不会阻止您拆分构建决策树的数据。离群值也不会影响决策树,因为基于分裂范围内的一些样本而不是准确的绝对值发生数据分裂。
E.决策树的缺点
(1)树中决策的数量越多,任何预期结果的准确性越小。
(2)决策树机器学习算法的主要缺点是结果可能基于预期。当实时做出决策时,收益和产生的结果可能与预期或计划不同。有机会,这可能导致不现实的决策树导致错误的决策。任何不合理的期望可能导致决策树分析中的重大错误和缺陷,因为并不总是可能计划从决策可能产生的所有可能性。
(3)决策树不适合连续变量,并导致不稳定性和分类高原。
(4)与其他决策模型相比,决策树很容易使用,但是创建包含几个分支的大决策树是一个复杂和耗时的任务。
(5)决策树机器学习算法一次只考虑一个属性,并且可能不是最适合于决策空间中的实际数据。
(6)具有多个分支的大尺寸决策树是不可理解的,并且造成若干呈现困难。
F.决策树机器学习算法的应用
(1)决策树是流行的机器学习算法之一,它在财务中对期权定价有很大的用处。
(2)遥感是基于决策树的模式识别的应用领域。
(3)银行使用决策树算法按贷款申请人违约付款的概率对其进行分类。
(4)Gerber产品公司,一个流行的婴儿产品公司,使用决策树机器学习算法来决定他们是否应继续使用塑料PVC(聚氯乙烯)在他们的产品。
(5)Rush大学医学中心开发了一个名为Guardian的工具,它使用决策树机器学习算法来识别有风险的患者和疾病趋势。
Python语言中的数据科学库实现决策树机器学习算法是 - SciPy和Sci-Kit学习。
R语言中的数据科学库实现决策树机器学习算法是插入符号。
3.7 随机森林机器学习算法
让我们继续我们在决策树中使用的同样的例子,来解释随机森林机器学习算法如何工作。提利昂是您的餐厅偏好的决策树。然而,提利昂作为一个人并不总是准确地推广你的餐厅偏好。要获得更准确的餐厅推荐,你问一对夫妇的朋友,并决定访问餐厅R,如果大多数人说你会喜欢它。而不是只是问Tyrion,你想问问Jon Snow,Sandor,Bronn和Bran谁投票决定你是否喜欢餐厅R或不。这意味着您已经构建了决策树的合奏分类器 - 也称为森林。
你不想让所有的朋友给你相同的答案 - 所以你提供每个朋友略有不同的数据。你也不确定你的餐厅偏好,是在一个困境。你告诉提利昂你喜欢开顶屋顶餐厅,但也许,只是因为它是在夏天,当你访问的餐厅,你可能已经喜欢它。在寒冷的冬天,你可能不是餐厅的粉丝。因此,所有的朋友不应该利用你喜欢打开的屋顶餐厅的数据点,以提出他们的建议您的餐厅偏好。
通过为您的朋友提供略微不同的餐厅偏好数据,您可以让您的朋友在不同时间向您询问不同的问题。在这种情况下,只是稍微改变你的餐厅偏好,你是注入随机性在模型级别(不同于决策树情况下的数据级别的随机性)。您的朋友群现在形成了您的餐厅偏好的随机森林。
随机森林是一种机器学习算法,它使用装袋方法来创建一堆随机数据子集的决策树。模型在数据集的随机样本上进行多次训练,以从随机森林算法中获得良好的预测性能。在该整体学习方法中,将随机森林中所有决策树的输出结合起来进行最终预测。随机森林算法的最终预测通过轮询每个决策树的结果或者仅仅通过使用在决策树中出现最多次的预测来导出。
例如,在上面的例子 - 如果5个朋友决定你会喜欢餐厅R,但只有2个朋友决定你不会喜欢的餐厅,然后最后的预测是,你会喜欢餐厅R多数总是胜利。
A.为什么使用随机森林机器学习算法?
(1)有很多好的开源,在Python和R中可用的算法的自由实现。
(2)它在缺少数据时保持准确性,并且还能抵抗异常值。
(3)简单的使用作为基本的随机森林算法可以实现只用几行代码。
(4)随机森林机器学习算法帮助数据科学家节省数据准备时间,因为它们不需要任何输入准备,并且能够处理数字,二进制和分类特征,而无需缩放,变换或修改。
(5)隐式特征选择,因为它给出了什么变量在分类中是重要的估计。
B.使用随机森林机器学习算法的优点
(1)与决策树机器学习算法不同,过拟合对随机森林不是一个问题。没有必要修剪随机森林。
(2)这些算法很快,但不是在所有情况下。随机森林算法当在具有100个变量的数据集的800MHz机器上运行时,并且50,000个案例在11分钟内产生100个决策树。
(3)随机森林是用于各种分类和回归任务的最有效和通用的机器学习算法之一,因为它们对噪声更加鲁棒。
(4)很难建立一个坏的随机森林。在随机森林机器学习算法的实现中,容易确定使用哪些参数,因为它们对用于运行算法的参数不敏感。一个人可以轻松地建立一个体面的模型没有太多的调整
(5)随机森林机器学习算法可以并行生长。
(6)此算法在大型数据库上高效运行。
(7)具有较高的分类精度。
C.使用随机森林机器学习算法的缺点
他们可能很容易使用,但从理论上分析它们是很困难的。
随机森林中大量的决策树可以减慢算法进行实时预测。
如果数据由具有不同级别数量的分类变量组成,则算法会偏好具有更多级别的那些属性。 在这种情况下,可变重要性分数似乎不可靠。
当使用RandomForest算法进行回归任务时,它不会超出训练数据中响应值的范围。
D.随机森林机器学习算法的应用
(1)随机森林算法被银行用来预测贷款申请人是否可能是高风险。
(2)它们用于汽车工业中以预测机械部件的故障或故障。
(3)这些算法用于医疗保健行业以预测患者是否可能发展成慢性疾病。
(4)它们还可用于回归任务,如预测社交媒体份额和绩效分数的平均数。
(5)最近,该算法也已经被用于预测语音识别软件中的模式并对图像和文本进行分类。
Python语言中的数据科学库实现随机森林机器学习算法是Sci-Kit学习。
R语言的数据科学库实现随机森林机器学习算法randomForest。