迭代计算

Machine Learning第二课

爷,独闯天下 提交于 2020-02-14 04:22:19
本节课的主题 ( 1 ) Linear Regression ( 2 ) Gradient Descent ( 3 ) Normal Equation l Linear Regression 这节课用一个房价预测的例子来完整的过一遍有监督机器学习中预测模型的数学基础和数学理论支持。 首先先约定公式中的 Notation : m 训练集合中的样本个数 x 输入变量或特征 y 输出变量或目标结果 (x,y) 表示一个样本 ( ) 表示第i个样本 然后我们来看房价预测的例子,假设我们已知房子的大小以及其对应的价格,那么我们可以在二维空间上做出下面的图示。 问题是给出某个 size 预测对应的 price ,对于这个问题,根据上节课学到的知识,我们知道这是一个有监督学习问题,因为每个样本中都有明确的输入和输出,同时它又是一个回归问题,我们需要预测出一个实数,一个 price 值。确定了问题的一些特征后,我们接下来一个重要的工作便是考虑用什么数学模型或者 hypothesis 来表示这个问题。 而这个问题,我们如何来表示 h ?我们发现图中的点似乎都逼近于一条直线 ( 当然更像是一个二次函数 ) ,然后我们尝试用最简单的数学模型: 线性模型来表示这个 h ,所以 如果我们发现还有其他输入如房间个数,那么线性方程则变为 ,我们可以假设 =1 ,所以 那么我们的问题就转化为,根据已有的 (x,y

项目原型设计

只愿长相守 提交于 2020-02-13 20:53:24
作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目原型设计 团队目标 切实可行的计算机协会维修预约平台 开发工具 Axue RP 8 原型下载 修!咻咻!维修平台原型设计 PDF下载 修咻咻原型设计PDF 团队信息 队员学号 队员姓名 个人博客地址 备注 221600126 刘忠燏 http://www.cnblogs.com/Downstream-1998/ 221600207 黄权焕 https://www.cnblogs.com/hyry/ 队长 221600328 苏明辉 https://www.cnblogs.com/ahuigg/ 221600330 吴可强 https://www.cnblogs.com/masgak/ 221600331 向鹏 https://www.cnblogs.com/xiang-peng/ 团内分工 队员学号 队员姓名 分工 贡献度 221600126 刘忠燏 用户信息编辑页面原型的设计实现 19% 221600207 黄权焕 文章发布、维修场次通知、登录注册页面原型的设计实现,整理博客内容 20% 221600328 苏明辉 预约零件信息查看页面的设计实现、效能分析、PSP 20% 221600330 吴可强 预约人员信息查看页面的设计实现 19% 221600331 向鹏 用户预约页面原型的设计实现

【Machine Learning in Action --5】逻辑回归(LogisticRegression)

邮差的信 提交于 2020-02-13 20:49:53
1、概述   Logistic regression(逻辑回归)是当前业界比较常用的机器学习方法,用于估计某种事物的可能性。   在经典之作《数学之美》中也看到了它用于广告预测,也就是根据某广告被用 户点击的可能性,把最可能被用户点击的广告摆在用户能看到的地方,然后叫他“你点我啊!”用户点了,你就有钱收了。这就是为什么我们的电脑现在广告泛滥的 原因。还有类似的某用户购买某商品的可能性,某病人患有某种疾病的可能性啊等等。这个世界是随机的(当然了,人为的确定性系统除外,但也有可能有噪声或产生错误的结果,只是这个错误发生的可能性太小了,小到千万年不遇,小到忽略不计而已),所以万物的发生都可以用可能性或者几率(Odds)来表达。“几率”指的是某事物发生的可能性与不发生的可能性的比值。 Logistic regression可以用来回归,也可以用来分类,主要是二分类。 2、基本理论 2.1Logistic regression和Sigmoid函数   回归:假设现在有一些数据点,我们用一条直线对这些点进行拟合(该条称为最佳拟合直线),这个拟合过程就称作回归。利用Logistic回归进行分类的思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。这里的“回归”一词源于最佳拟合,表示找到最佳拟合参数,使用的是最优化算法。   Sigmoid函数具体的计算公式如下:         z=w

ES6最具魔力的特性——生成器

有些话、适合烂在心里 提交于 2020-02-13 04:36:22
ES6生成器(Generators)简介 我们从一个示例开始: function* quips(name) { yield "你好 " + name + "!"; yield "希望你能喜欢这篇介绍ES6的译文"; if (name.startsWith("X")) { yield "你的名字 " + name + " 首字母是X,这很酷!"; } yield "我们下次再见!"; } 这段代码看起来很像一个函数,我们称之为生成器函数,它与普通函数有很多共同点,但是二者有如下区别: 普通函数使用function声明,而生成器函数使用function*声明。 在生成器函数内部,有一种类似return的语法:关键字yield。二者的区别是,普通函数只可以return一次,而生成器函数可以yield多次(当然也可以只yield一次)。在生成器的执行过程中,遇到yield表达式立即暂停,后续可恢复执行状态。 这就是普通函数和生成器函数之间最大的区别,普通函数不能自暂停,生成器函数可以。 生成器做了什么? 当你调用quips()生成器函数时发生了什么? > var iter = quips("jorendorff"); [object Generator] > iter.next() { value: "你好 jorendorff!", done: false } > iter.next()

python基础-特性

让人想犯罪 __ 提交于 2020-02-12 12:54:59
导航:   高阶特性:      切片: Python没有针对字符串的截取函数,只需要切片一个操作就可以完成      迭代: Python的 for 循环抽象程度要高于Java的 for 循环,因为Python的 for 循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上      列表生成器: 即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式      生成器: Generator ,一系列算法,使用时才计算值,一般采用for遍历.关键字 yield   高阶函数:        map: map() 函数接收两个参数,一个是函数,一个是序列, map 将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。      reduce: reduce() 函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算。      filter: filter() 也接收一个函数和一个序列。和 map() 不同的时, filter() 把传入的函数依次作用于每个元素,然后根据返回值是 True 还是 False 决定保留还是丢弃该元素。      sorted: Python内置的 sorted() 函数就可以对list进行排序.      返回函数 :函数作为返回值,闭包     

讲透机器学习中的梯度下降

假装没事ソ 提交于 2020-02-12 09:58:31
本文始发于个人公众号: TechFlow,原创不易,求个关注 在之前的文章当中,我们一起推导了 线性回归 的公式,今天我们继续来学习上次没有结束的内容。 上次我们推导完了公式的时候,曾经说过由于有许多的问题,比如最主要的复杂度问题。随着样本和特征数量的增大,通过公式求解的时间会急剧增大,并且如果特征为空,还会出现公式无法计算的情况。所以和直接公式求解相比,实际当中更倾向于使用另外一种方法来代替,它就是今天这篇文章的主角——梯度下降法。 梯度下降法可以说是机器学习和深度学习当中最重要的方法,可以说是没有之一。尤其是在深度学习当中,几乎清一色所有的神经网络都是使用梯度下降法来训练的。那么,梯度下降法究竟是一种什么样的方法呢,让我们先从梯度的定义开始。 梯度的定义 我们先来看看维基百科当中的定义:梯度(gradient)是一种关于多元导数的概括。平常的一元(单变量)函数的导数是标量值函数,而多元函数的梯度是向量值函数。多元可微函数 \({\displaystyle f}\) 在点 \({\displaystyle P}\) 上的梯度,是以 \({\displaystyle f}\) 在 \({\displaystyle P}\) 上的偏导数为分量的向量。 这句话很精炼,但是不一定容易理解,我们一点一点来看。我们之前高中学过导数,但是高中时候计算的求导往往针对的是一元函数

Javascript -- 数组迭代方法学习

六眼飞鱼酱① 提交于 2020-02-12 00:26:54
一、数组迭代方法 1、forEach 调用 arr.forEach((value, index) => { console.log(value, index) }) forEach 是循环遍历一遍数组的每一项,这个是没有返回值的,这个方法里面有个回调函数,回调函数有两个参数,第一个是数组每一项的值 value ,第二个参数是数组每一项对应的下标索引 index Tips 这个 forEahc 循环遍历和JQuery的 $.each() 方法是类似的,只不过需要注意的是$.each方法里面的回调函数的两个参数跟 forEach 方法是相反的,第一个参数是数组每一项的下标索引 index ,第二个参数才是数组每一项 的值 value 2、every 方法参考文献 调用 const boolean = arr.every((value, index, arr) => { return value==2 }) 这个数组方式有点类似短路运算 && ,可以当作是一个数组验真的方法,这个方法里面有个回调函数,这个回调函数有三个参数,第一个是测试的数组每一项,第二个是测试数组项的下标索引,第三个是测试的原数组 测试数组的每一项都会执行 every() 方法里面的回调函数,这个函数是用来校验数组的每一项是否满足指定条件,数组每一项都会执行一次回调函数,如果数组里面的所有项都满足指定条件,则返回

迭代器、生成器、可迭代对象

两盒软妹~` 提交于 2020-02-11 12:33:22
1、迭代器 可以作用于for循环的数据类型有如下几种: 1、一类是集合数据类型:list、tuple、dict、set、str等; 2、一类是generator,包括生成器和带yield的generator function; 这些可以直接作用于for循环的可迭代对象:Iterable。 可以使用isinstance()判断一个对象是否是Iterable对象: >>> from collections import Iterable >>> isinstance([], Iterable) True >>> isinstance({}, Iterable) True >>> isinstance('abc', Iterable) True >>> isinstance((x for x in range(10)), Iterable) True >>> isinstance(100, Iterable) False 而生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值, 直到最后抛出StopIteration错误表示无法继续返回下一个值了。 可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。 可以使用isinstance()判断一个对象是否是Iterator对象: >>> from collections import

装饰器,迭代器,生成器

匆匆过客 提交于 2020-02-10 16:27:14
1. 装饰器 定义: 在函数运行前或运行后可以添加额外功能且不影响该函数原有的代码功能,并且还可以进行函数执行后的清理工作。 语法 语法: @func1 def func2(): pass 装饰器做得事情就是func1(func2)我们传递了一个函数对象到我们的装饰器里面然后先执行装饰器func1其中的内容,然后再执行函数func2 三类装饰器 1.普通无参装饰器 def wai(func): # func 被装饰函数 def nei(): # a,b 表明被装饰函数的参数 print('函数执行前添加') res = func() print('函数执行后添加') return res # 内层函数将外层函数调用的被装饰函数作为参数返回 return nei # 外层函数返回内层函数的函数名 @wai def func(): print("这是一个函数") return 1 func() 2.被装饰函数带参数 def wai(func): # func 被装饰函数 def nei(a,b): # a,b 表明被装饰函数的参数 a = a + 1 b = b + 1 print('函数执行前添加') res = func(a,b) print('函数执行后添加') return res # 内层函数将外层函数调用的被装饰函数作为参数返回 return nei #

c++之容器详解

十年热恋 提交于 2020-02-10 15:47:37
5. 类模板编程 有时候继承、包含并不能满足重用代码的需要,这一般在容器类里面体现的尤为突出。例如: 我们定义了一个容器类,Container, 这个Container类可以实现类似verctor一样的工作,能保存数据,能修改数据,并且 数据的类型不限制 ,但是 针对数据的操作都是一样 的。那么类模板编程就成了不二之选了。 1. 定义模板类 这里以栈作为参照对象,定义一个模板类,实现栈一样的功能。 原始代码 class Stack{ private : enum{MAX = 10}; //表示这个Stack容器最多只能装10个。 int top =0 ; //表示最顶上的索引位置 string items[MAX]; //定义一个数组,以便一会装10个元素 public: bool isempty(){ return top == 0; } bool isfull(){ return top == MAX; } //压栈 int push(string val){ if(isfull()){ return -1; } //没有满就可以往里面存 items[top++] = val; } //出栈 string pop(){ if (isempty()){ return ""; } //如果不是空 top 只是指向位置,而数组获取数据,索引从0开始,所以先-- return