本文是监督学习分类算法的第一部分,简单介绍对样本进行分类的算法,包括

  • 判别分析(DA)
  • 支持向量机(SVM)
  • 随机梯度下降分类(SGD)
  • K近邻分类(KNN)
  • 朴素贝叶斯分类(NaiveBayes)

判别分析(Discriminant Analysis)

判别分析是基于条件概率的分类方法,可以分为线性判别分析(LDA)和二次型判别分析(QDA)。

不同数据下的线性和二次型判别分析

算法介绍

判别分析的基础是贝叶斯公式,它根据已有数据中的先验概率(可以通过样本得到)推断后验概率: 对于训练集,

我们选择令值较大的那个k作为预测结果。

算法求解

假设条件随机变量服从多元正态分布,那么先验概率应为

其中,为标记为k的样本数据均值,为标记为k的样本协方差矩阵。

代入贝叶斯公式得到对数后验概率:

其中,是分子的对数常数,是已知样本中各分类的比例。

QDA算法就是得到能够使对数后验概率最大的k值。

如果在QDA模型中假设特征之间相互独立,即只包含对角线元素,那么QDA分类器等效于高斯朴素贝叶斯分类器naive_bayes.GaussianNB。

LDA算法是QDA算法的特例,即假设所有类别的y都具有相同的协方差矩阵,那么对数后验概率可以写作其中为样本与均值之间的马氏距离。因此,LDA也可以认为是在先验概率条件下采用马氏距离进行分类的方法。上式也被称为判别函数

算法实例

假设,,即只分两类且概率相等时,判别函数得到

对比两式

  • 当上式大于0时说明的概率大于,则应该属于第1类,否则属于第二类。
  • 当上式等于0时可以得到决策边界
  • 同样可以推导3个以上类别的决策边界。
  • QDA算法由于考虑了不同的协方差矩阵,可以得到二次型的决策边界。

代码

判别函数可以改写为线性形式

其中的拟合数据保存在属性中,保存在属性中。

from sklearn.discriminant_analysis import LinearDiscriminantAnalysisclf2 = LinearDiscriminantAnalysis(solver='lsqr', shrinkage=None).fit(X, y)

从代码中可以看出也要确定判别分析的算法器solver,也可以通过shrinkage进行正则化。

支持向量机(Support Vector Machines)

支持向量机SVM在高维或无限维空间中构建一个超平面或一组超平面,该超平面与任何类别的最近训练数据点之间的距离最大(所谓的功能边界),所以可以实现良好的分离,可用于分类、回归或其他任务。因为通常边界越大,分类器的泛化误差越低。下图显示了线性可分离问题的决策函数,在边界上有三个样本,称为“支持向量”:

支持向量机原理图

支持向量机也是既可以用来进行分类也可以进行回归的模型,其分类器在Scikit-learn中包括SVC,NuSVC和LinearSVC等类。

算法

给定训练集分为两个类,研究目标是找到满足优化问题的解.SVC的目标是

式子第二项也可以看做是正则化项,是控制参数。上面优化问题的对偶问题是

其中是全1向量,是半正定阶矩阵,且,其中是核(Kernel)

通过调整核函数可以对不同的数据进行分类:

核SVM算法估计鸢尾花数据

NuSVC、LinearSVC和其他相关的支持向量机算法都采用了近似的目标函数。

代码

参数存储在属性中,支持向量机数据保存在属性中,参数保存在属性中。

from sklearn.svm import SVClinear_svc = svm.SVC(kernel='linear')linear_svc = svm.SVC(kernel='rbf')

RBF是Radial Basis Function的缩写,可以进行非线性划分,效果如下:


随机梯度下降分类(SGD)

随机梯度下降分类器近似等效于线性SVM

from sklearn.linear_model import SGDClassifierclf = SGDClassifier(loss="hinge", penalty="l2", max_iter=5).fit(X, y)

可以通过参数设置具体的损失函数。SGDClassifier支持以下损失功能:

  • :(软边距)线性支持向量机;
  • :平滑的铰链损失;
  • :逻辑回归, 等。

可以通过penalty参数设置具体的正则项类型。SGD支持以下处罚:

  • :参数的标准正则项;
  • :参数的标准正则项;
  • :和的凸组合。

默认设置为。L1惩罚导致解决方案稀疏,将大多数系数驱动为零。当存在高度相关的属性时,ElasticNet解决了损失的一些不足。该参数控制和惩罚的凸组合。

K近邻分类(KNN)

KNN算法已经介绍过了,这里给出用KNN分类器的代码

from sklearn.neighbors import KNeighborsClassifierknn = KNeighborsClassifier(n_neighbors=1).fit(X_train,y_train)

效果如下:

朴素贝叶斯分类(NaiveBayes)

本文开头指出,QDA在特征相互独立的情况下等价于高斯NaiveBayes,这里的“Naive(朴素)”指的就是这种特征数据相互独立的假设。

算法

给定样本属于的类别数据,由贝叶斯公式可以得到关系:

在“Naive”条件下,上式可以简化为

由于是根据样本计算的常数,所以

所以

在假设了之后就可以进行估计。

类别和特点

  1. scikit-learn 中实现了三种朴素贝叶斯分类器:GaussianNB、BernoulliNB 和MultinomialNB。
  2. GaussianNB 可应用于任意连续数据;
  3. BernoulliNB 假定输入数据为二分类数据;
  4. MultinomialNB 假定输入数据为计数数据(即每个特征代表某个对象的整数计数,比如一个单词在句子里出现的次数)。
  5. BernoulliNB 和MultinomialNB 主要用于文本数据分类。

代码

from sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom sklearn.naive_bayes import GaussianNBX, y = load_iris(return_X_y=True)X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=0)gnb = GaussianNB()y_pred = gnb.fit(X_train, y_train).predict(X_test)

svm多分类代码_监督学习——分类算法I相关推荐

  1. svm多分类代码_跟我一起机器学习系列文章知识点与代码索引目录,持续更新…...

    <跟我一起机器学习> 系列文章知识点与代码索引目录 0 环境配置 如何才能入门机器学习? 优雅的安装和使用Anaconda 使用Conda来进行环境的创建与管理 Pycharm安装与使用 ...

  2. 机器学习 文本分类 代码_无需担心机器学习-如何在少于10行代码中对文本进行分类

    机器学习 文本分类 代码 This article builds upon my previous two articles where I share some tips on how to get ...

  3. 监督分类空白处也被分类了_监督学习(2)|本质是分类的“逻辑回归”

    引言 机器学习,绕不开预测问题,预测绕不开回归和分类.本篇介绍最常用的二分类算法:逻辑回归(Logistics Regression),当然随着算法的发展,它也可用于多分类问题.每一个算法都是许许多多 ...

  4. 文本分类模型_文本分类模型之TextCNN

    六年的大学生涯结束了,目前在搜索推荐岗位上继续进阶,近期正好在做类目预测多标签分类的项目,因此把相关的模型记录总结一下,便于后续查阅总结. 一.理论篇: 在我们的场景中,文本数据量比较大,因此直接采用 ...

  5. 人工鱼群算法python代码_人工鱼群算法python_鱼群算法 - Brillou的个人空间 - OSCHINA - 中文开源技术交流社区......

    本算法是参照李晓磊博士的论文实现的,详细的算法原理可阅读<一种新型的智能优化方法_人工鱼群算法_李晓磊> 算法基于鱼群的生存行为:在一片水域中,鱼存在的数目最多的地方就是本水域中富含营养物 ...

  6. svm分类代码_当支持向量机遇上神经网络:SVM、GAN距离之间的关系

    选自arXiv 作者:Alexia Jolicoeur-Martineau 编辑:小舟.蛋酱 SVM 是机器学习领域的经典算法之一.如果将 SVM 推广到神经网络,会发生什么呢? 支持向量机(Supp ...

  7. 文本特征选择 java代码_文本分类入门(十)特征选择算法之开方检验

    前文提到过,除了分类算法以外,为分类文本作处理的特征提取算法也对最终效果有巨大影响,而特征提取算法又分为特征选择和特征抽取两大类,其中特征选择算法有互信息,文档频率,信息增益,开方检验等等十数种,这次 ...

  8. python决策树多分类代码_绘制决策树分类的多类ROC曲线

    我试着用除SVC支持向量机在文档中提供了.我的代码对SVC支持向量机:但是,在我切换到KNeighborsClassifier.多项式nb和DecisionTreeClassifier之后,系统一直告 ...

  9. python遥感影像分类代码_【博客翻译】使用 Python Tensorflow 实现简单的神经网络卫星遥感影像分类...

    Landsat 5 多光谱数据分类指导手册原作者:Pratyush Tripathy 翻译:荆雪涵 姐妹篇雪涵:[博客翻译]CNN 与中分辨率遥感影像分类​zhuanlan.zhihu.com 深度学 ...

最新文章

  1. 又有多省明确开学时间!哪个省份的高校全国最早开学?
  2. iOS 去除导航栏下的黑线
  3. java元婴期(31)----java进阶(springmvc(5)---数据回显数据交互拦截器)
  4. php 实体转html,PHP 转HTML标签为实体, 把实体html标签转为,过滤html标签 | 学步园...
  5. 怎么拆计算机主机,技术编辑教您电脑机箱怎么拆
  6. 你是外包,麻烦不要偷吃零食,注意素质...
  7. 华为mate10手机听筒测试软件,华为mate 10功能说:这几个设置,让你通话体验直线上升,简直了!...
  8. 【Rmarkdown rmysql】
  9. 编译Libgdiplus遇到的问题
  10. layui表格使用复选框批量删除_layui表格数据复选框回显设置方法,表格复选框...
  11. msm8953 uart配置
  12. 每日工作记录——W5500网口ping中出现的问题
  13. 怎么学好高中数学高一数学学习方法有哪些
  14. 计算天数c语言pta,PTA练习7-9 计算天数 (15 分)
  15. Word文档如何插入表格
  16. 我的世界java多人不刷溺尸_我的世界:不同版本的三叉戟掉落率不一样?刷了一两百溺尸也没有!...
  17. 黑马送书啦!全体IT技术人的福利~
  18. mac alfred和dash安装配置
  19. 系统安全 --------- 账号安全管理
  20. python爬快手个人介绍个性_快手个人介绍个性霸气说说_江湖一碗茶喝完各自爬...

热门文章

  1. 德标螺纹规格对照表_抚顺船用外螺纹铜减压阀带NK船检证书
  2. JAVA开发需求分析套路_JAVA并发工具常用设计套路示例代码
  3. Linux 退出vi编辑模式
  4. python建db文件_临时数据库之python用sqlite3模块操作sqlite
  5. 2019 徐州icpc网络赛 E. XKC's basketball team
  6. 超级强大的socket工具ss,替代netstat
  7. idea .defaultMessage
  8. MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)
  9. BIEE 目录迁移(文件夹)方式
  10. QML官方系列教程——QML Applications