决策边界

机器学习 | 吴恩达斯坦福课程笔记整理之(二)逻辑回归

人盡茶涼 提交于 2020-05-03 22:56:41
本系列为吴恩达斯坦福 CS229机器学习课程笔记整理,以下为笔记目录:   (一)线性回归   (二)逻辑回归   (三)神经网络   (四)算法分析与优化   (五)支持向量机   (六)K-Means   (七)特征降维   (八)异常检测   (九)推荐系统   (十)大规模机器学习 第二章 逻辑回归 使用线性回归来处理 0/1 分类问题比较困难,因此引入逻辑回归来完成 0/1 分类问题,逻辑一词也代表了是(1)和非(0)。 一、Sigmoid预测函数 在逻辑回归中,定义预测函数为: g(z) 称之为 Sigmoid Function,亦称 Logic Function 二、决策边界 决策边界是预测函数 hθ(x) 的属性,而不是训练集属性。这是因为能作出“划清”类间界限的只有 hθ(x) ,而训练集只是用来训练和调节参数的。 线性决策边界 非线性决策边界 二、预测代价函数 对于分类任务来说,我们就是要反复调节参数 θ ,亦即反复转动决策边界来作出更精确的预测。假定我们有代价函数 J(θ) ,其用来评估某个 θ 值时的预测精度,当找到代价函数的最小值时,就能作出最准确的预测。 通常,代价函数具备越少的极小值,就越容易找到其最小值,也就越容易达到最准确的预测。 -> 局部最小和全局最小 逻辑回归定义的代价函数为: 三、最小化代价函数 同样采用BGD和SGD两种方式 四、正则化

机器学习基础---神经网络(属于逻辑回归)(构建假设函数)

爷,独闯天下 提交于 2020-05-03 14:51:47
一:为什么需要神经网络 (一)案例 为了很好的拟合数据,我们需要保留较多的相关参数,虽然可以使用正则化进行优化。但是 无论是线性回归还是逻辑回归都有这样一个缺点,即:当特征太多时,计算的负荷会非常大。 之前我们已经看到过,使用非线性的多项式项,能够帮助我们建立更好的分类模型。假设我们有非常多的特征,例如大于 100 个变量。 我们希望用这 100 个特征来构建一个非线性的多项式模型,结果将是数量非常惊人的特征组合,即便我们只采用两两特征的组合: 我们也会有接近 5000 个组合而成的特征。 这对于一般的逻辑回归来说需要计算的特征太多了。所以,当特征个数n很大时(许多实际的机器学习问题特征都是很大的),将这些高阶多项式项数包含到特征里面,会导致特征空间急剧膨胀。 (二)案例二:计算机视觉 假设我们希望训练一个模型来识别视觉对象(例如识别一张图片上是否是一辆汽车),我们怎样才能这么做呢? 假设使用机器学习算法, 来训练一个分类器,使它检测一个图像,来判断图像是否为一辆汽车。 我们取出这幅图片中的一小部分,将其放大: 当人眼看到一辆汽车时,计算机实际上看到的却是这个: 一个数据矩阵,表示了像素强度值 因此,对于计算机视觉来说问题就变成了:根据这个像素点亮度矩阵,来告诉我们,这些数值代表一个汽车门把手。 具体而言,当用机器学习算法构造一个汽车识别器时, 我们要做的就是提供一个带标签的样本集

机器学习基础---逻辑回归

谁说胖子不能爱 提交于 2020-05-01 09:19:06
一:分类 (一)分类基础 在分类问题中,你要预测的变量 y 是离散的值,我们将学习一种叫做逻辑回归 ( Logistic Regression ) 的算法,这是目前最流行使用最广泛的一种学习算法。 在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误)。分类问题的例子有:判断一封电子邮件是否是垃圾邮件;判断一次金融交易是否是欺诈;之前我们也谈到了肿瘤分类问题的例子,区别一个肿瘤是恶性的还是良性的。 我们从 二元的分类问题开始讨论 。(当然存在多分类问题,例如y可以取到 0,1,2,3这几个值) 我们将因变量 (dependent variable) 可能属于的两个类分别称为负向类( negative class )和正向类( positive class ),则因变量 ,其中 0 表示负向类(没有某项东西):良性肿瘤, 1 表示正向类(含有某项东西):恶性肿瘤。 (二)对比线性回归 我们对数据集建立线性模型,得到线性回归函数。同时设置一个阈值y_0=0.5,此时x_0对应y_0,当x<x_0时,则返回0,当x>x_0则返回1。 上面解释似乎很合理,但是当我们出现下面的数据集分布时: 重新建立线性模型,导致原本属于正向类的数据,被划分到负向类中。 因此,不建议将线性回归用于分类问题。 如果我们要用线性回归算法来解决一个分类问题,对于分类, y 取值为 0 或者 1

[机器学习实战-Logistic回归]使用Logistic回归预测各种实例

天大地大妈咪最大 提交于 2020-05-01 03:43:22
目录 本实验代码已经传到gitee上,请点击查收! 一、实验目的 二、实验内容与设计思想 实验内容 设计思想 三、实验使用环境 四、实验步骤和调试过程 4.1 基于Logistic回归和Sigmoid函数分类 4.2 基于最优化方法的最佳回归系数确定 4.2.1 梯度上升算法: 4.2.2 测试算法:使用梯度上升算法找到最佳参数 4.2.3 分析数据:画出决策边界 4.2.4 训练算法:随机梯度上升 4.3 示例1:从疝气病症预测病马的死亡率 4.4 示例2:从打斗数和接吻数预测电影类型(数据自制) 4.5 示例3:从心脏检查样本帮助诊断心脏病(数据来源于网络) 4.6 改进函数封装使不同的样本数据可以使用相同的函数封装 五、实验总结 六、参考资料 本实验代码已经传到gitee上,请点击查收! Logistic_Examples 一、实验目的 学习Logistic回归的基本思想。 Sigmoid函数和Logistic回归分类器。 学习最优化算法--梯度上升算法、随机梯度上升算法等。 运用Logistic回归预测各种实例。 二、实验内容与设计思想 实验内容 基于Logistic回归和Sigmoid函数分类 基于最优化方法的最佳回归系数确定 示例1:从疝气病症预测病马的死亡率 示例2:从打斗数和接吻数预测电影类型(数据自制) 示例3:从心脏检查样本帮助诊断心脏病(数据来源于网络)

吴恩达机器学习笔记(六) —— 支持向量机SVM

为君一笑 提交于 2020-04-30 04:16:49
主要内容: 一.损失函数 二.决策边界 三.Kernel 四.使用SVM (有关SVM数学解释: 机器学习笔记(八)震惊!支持向量机(SVM)居然是这种机 ) 一.损失函数 二.决策边界 对于: 当C非常大时,括号括起来的部分就接近于0,所以就变成了: 非常有意思的是,在最小化 1/2*∑θj^2的时候,最小间距也达到最大。原因如下: 所以: 即:如果我们要最小化1/2*∑θj^2,就要使得||θ||尽量小,而当||θ||最小时,又因为 ,所以p(i)最大,即间距最大。 注意:C可以看成是正则项系数λ的倒数。所以,当C越大时(可以看成是λ越小),则曲线对于数据越敏感。如下: 三.Kernel 上面介绍的都是线性可分的情况,当线性不可分时,或许我们可以用多项式进行拟合,如下: 但是多项式的次数太高,计算成本就会很大,有没有更好的办法?那就是SVM带核的方法。 我们将上面的多项式改为: 然后f的公式为: 这个f函数就是高斯核函数。 我们在坐标轴上选取三个地标 其中f1就是坐标轴上某一点到L(1)距离的远近,离得近则f1 = 1,离得远则f1 = 0,f2、f3等以此类推。 对于高斯核函数,σ对整体分布的影响为: σ越大,分布越扁平: 于是新的决策方法就变为: 那么如何选取地标L呢?那就是数据集的每一点都作为地标,如下: 综上,带核的SVM可以描述为: 四.使用SVM 支持向量机较为复杂

从梯度下降法、最大间隔法两种角度理解SVM

大憨熊 提交于 2020-04-30 01:44:35
一、机器学习算法的常见流程 一般的机器学习分类算法,我们可以通常从三个步骤得到,以SVM算法为例,这里规定正例的y为1,负例的y为-1 Step 1: Function Set(Model) Step 2: Loss function 理想情况下的loss function(ideal loss)是当g(x)和y不相等的情况下的样本相加,但是这种情况下的损失函数是不可微分的,所以无法用梯度下降法训练。 Step 3:Gradient descent 第三步就是用梯度下降法训练模型了,我们现在的目标是寻找一种适合SVM的loss function。 二、Hinge Loss 接下来我们来分析SVM采用哪种损失函数比较合适,此坐标系横坐标表示y*f(x),纵坐标表示loss。 首先分析Square loss的情况,从图像上可以看出y*f(x)的值越接近于1越好,但y*f(x)很大的时候,loss越大,显然不合理 sigmod+square loss的情况:函数曲线变化太平缓,梯度下降的performance比较差 Sigmod + cross entropy(逻辑回归采用的损失函数) hinge loss(SVM采用的损失函数) 假设此时的样本是正例,即yn为1。其实f(x)大于0就已经能正确分类了,但hinge loss里还是强调f(x)>1,图中penalty的部分就是margin

机器学习算法(十)—— SVM支持向量机

这一生的挚爱 提交于 2020-04-30 00:10:03
一、SVM是什么 支撑向量机,SVM(Support Vector Machine),其实就是一个线性分类器。 1-1 线性可分 首先我们先来了解下什么是线性可分。 在二维空间上,两类点被一条直线完全分开叫做线性可分。 严格的数学定义是: 1-2 最大间隔超平面 从二维扩展到多维空间中时,将D0 和D1 完全正确地划分开的 wx+b = 0就成了一个超平面。 为了使这个超平面更具鲁棒性,我们会去找最佳超平面,以最大间隔把两类样本分开的超平面,也称之为最大间隔超平面。 两类样本分别分割在该超平面的两侧; 两侧距离超平面最近的样本点到超平面的距离被最大化了。 二、 Support Vector & Margin 2.1 定义及思想 将最优决策边界向上&下平移,在遇到第一个点时停下来,这个点被称为 支撑向量Support Vector ;支撑向量到决策边界的距离是d;这两条平移后的直线的间隔(2d)被称为 最大间隔Margin 。 支撑向量 就是支撑着两条平移边界的点,我们只需要重点研究这几个支撑向量即可,这也是SVM名称的由来;**Margin **就是分界面可以移动的范围,范围越大表示容错能力越强。 所以我们可以看到,所谓的支撑向量机,最初就是一个线性分类器,只不过这个线性分类器不仅能把样本分对,可以最大化 Margin 。 到目前为止,我们就将SVM转换为了一个最优化问题,

学习笔记之scikit-learn

痞子三分冷 提交于 2020-04-29 20:40:18
scikit-learn: machine learning in Python — scikit-learn 0.20.0 documentation https://scikit-learn.org/stable/index.html Simple and efficient tools for data mining and data analysis Accessible to everybody, and reusable in various contexts Built on NumPy, SciPy, and matplotlib Open source, commercially usable - BSD license scikit-learn - Wikipedia https://en.wikipedia.org/wiki/Scikit-learn Scikit-learn (formerly scikits.learn ) is a free software machine learning library for the Python programming language. [3] It features various classification , regression and clustering algorithms including

《Python数据分析与机器学习实战-唐宇迪》读书笔记第12章--支持向量机

。_饼干妹妹 提交于 2020-04-29 08:53:34
python数据分析个人学习读书笔记-目录索引 第12章支持向量机    在机器学习中,支持向量机(Support Vector Machine,SVM)是最经典的算法之一,应用领域也非常广,其效果自然也是很厉害的。本章对支持向量机算法进行解读,详细分析其每一步流程及其参数对结果的影响。 12.1支持向量机工作原理   前面已经给大家讲解了一些机器学习算法,有没有发现其中的一些套路呢?它们都是从一个要解决的问题出发,然后将实际问题转换成数学问题,接下来优化求解即可。支持向量机涉及的数学内容比较多,下面还是从问题开始一步步解决。 12.1.1支持向量机要解决的问题   现在由一个小例子来引入支持向量机,图12-1中有两类数据点,目标就是找到一个最好的决策方程将它们区分开。   图12-1 决策方程的选择   图12-1中有3条直线都能将两类数据点区分开,那么,这3条线的效果相同吗?肯定是有所区别的。大家在做事情的时候,肯定希望能够做到最好,支持向量机也是如此,不只要做这件事,还要达到最好的效果,那么这3条线中哪条线的效果最好呢?现在放大划分的细节进行观察,如图12-2所示。   由图可见,最明显的一个区别,就是左边的决策边界看起来窄一点,而右边的宽一点。假设现在有一个大部队在道路上前进,左边埋着地雷,右边埋伏敌人,为了大部队能够最安全地前进,肯定希望选择的道路能够避开这些危险

决策树随笔

独自空忆成欢 提交于 2020-04-18 11:15:59
决策树原理 决策树是一种多功能的机器学习算法,它可以实现分类和回归任务,甚至是多输出任务。它们功能强大,能够拟合 复杂的数据集。 -优点:简单直观,基本不需要预处理,不用会议华,处理缺失值,精度高、对异常值不敏感、无数据输入假定。可以处理离散或连续值,可以处理多维度输出的分类问题 缺点:计算复杂度高、容易过拟合,泛化能力不好,可能因为样本的一点点改动导致树的结构剧烈改变,空间复杂度高。 适用数据范围:数值型和标称型。 创建分支的伪代码函数createBranch()如下所示: 检测数据集中的每个子项是否属于同一分类: If so return 类标签; Else 寻找划分数据集的最好特征 划分数据集 创建分支节点 for 每个划分的子集 调用函数createBranch并增加返回结果到分支节点中 return 分支节点 上面的伪代码createBranch是一个递归函数,在倒数第二行直接调用了它自己。 其工作原理很简单如图所示的流程图就是一个决策树,长方形代表判断模块(decision block),椭圆形代表终止模块(terminating block),表示已经得出结论,可以终止运行。从判断模块引出的左右箭头称作分支(branch),它可以到达另一个判断模块或者终止模块。 k-近邻算法可以完成很多分类任务,但是它最大的缺点就是无法给出数据的内在含义