02 2019 档案
摘要:当我们确定学习算法的参数的时候,我们考虑的是选择参量来使训练误差最小化,有人认为得到一个非常小的训练误差一定是一件好事,但我们已经知道,仅仅是因为这个假设具有很小的训练误差,并不能说明它就一定是一个好的假设函数。而且我们也学习了过拟合假设函数的例子,所以这推广到新的训练集上是不适用的。那么,你该如何
阅读全文
摘要:小结一下使用神经网络时的步骤: 网络结构:第一件要做的事是选择网络结构,即决定选择多少层以及决定每层分别有多少个单元。 第一层的单元数即我们训练集的特征数量。 最后一层的单元数是我们训练集的结果的类的数量。 如果隐藏层数大于1,确保每个隐藏层的单元个数相同,通常情况下隐藏层单元的个数越多越好。 我们
阅读全文
摘要:当我们对一个较为复杂的模型(例如神经网络)使用梯度下降算法时,可能会存在一些不容易察觉的错误,意味着,虽然代价看上去在不断减小,但最终的结果可能并不是最优解。为了避免这样的问题,我们采取一种叫做梯度的数值检验(Numerical Gradient Checking)方法。这种方法的思想是通过估计梯度
阅读全文
摘要:GitHub代码练习地址:https://github.com/Neo-ML/JavaPractice/blob/master/Intpractice3.java 一 Java中的数据类型 Java中的数据类型主要分为两大类:基本数据类型和引用数据类型。基本数据类型共有8种,分别是:布尔型boole
阅读全文
摘要:之前我们在计算神经网络预测结果的时候我们采用了一种正向传播方法,我们从第一层开始正向一层一层进行计算,直到最后一层的ℎ𝜃 (𝑥)。 现在,为了计算代价函数的偏导数我们需要采用一种反向传播算法,也就是 首先计算最后一层的误差,然后再一层一层反向求出各层的误差,直到倒数第二层。 以一个例子来说明反向
阅读全文
摘要:假设神经网络的训练样本有𝑚个,每个包含一组输入𝑥和一组输出信号𝑦,𝐿表示神经网络层数,𝑆𝐼表示每层的neuron 个数(𝑆𝑙表示输出层神经元个数),𝑆𝐿代表最后一层中处理单元的个数。 将神经网络的分类定义为两种情况:二类分类和多类分类,二类分类:𝑆𝐿 = 0, 𝑦 = 0
阅读全文
摘要:当我们有不止两种分类时(也就是𝑦 = 1,2,3 ….),比如以下这种情况,该怎么办?如果我们要训练一个神经网络算法来识别路人、汽车、摩托车和卡车,在输出层我们应该有4 个值。例如,第一个值为1 或0 用于预测是否是行人,第二个值用于判断是否为汽车。输入向量𝑥有三个维度,两个中间层,输出层4 个
阅读全文
摘要:魔术方法就是不需要人为调用的方法,基本是在特定的时刻自动触发- 魔术方法的统一的特征,方法名被前后各两个下滑线包裹- 操作类 - `__init__`: 构造函数 - `__new__`: 对象实例化方法,此函数较特殊,一般不需要使用 - `__call__`: 对象当函数使用的时候触发 - `__
阅读全文
摘要:二元逻辑运算符(BINARY LOGICAL OPERATORS)当输入特征为布尔值(0 或1)时,我们可以用一个单一的激活层可以作为二元逻辑运算符,为了表示不同的运算符,我们只需要选择不同的权重即可。下图的神经元(三个权重分别为-30,20,20)可以被视为作用同于逻辑与(AND): 下图的神经元
阅读全文
摘要:从本质上讲,神经网络能够通过学习得出其自身的一系列特征。在普通的逻辑回归中,我们被限制为使用数据中的原始特征𝑥1, 𝑥2, . . . , 𝑥𝑛,我们虽然可以使用一些二项式项来组合这些特征,但是我们仍然受到这些原始特征的限制。在神经网络中,原始特征只是输入层,在我们上面三层的神经网络例子中,
阅读全文
摘要:( FORWARD PROPAGATION ) 相对于使用循环来编码,利用向量化的方法会使得计算更为简便。以上面的神经网络为例,试着计算第二层的值: 这只是针对训练集中一个训练实例所进行的计算。如果我们要对整个训练集进行计算,我们需要将训练集特征矩阵进行转置,使得同一个实例的特征都在同一列里。即:
阅读全文
摘要:神经网络模型建立在很多神经元之上,每一个神经元又是一个个学习模型。这些神经元(也叫激活单元,activation unit)采纳一些特征作为输出,并且根据本身的模型提供一个输出。下图是一个以逻辑回归模型作为自身学习模型的神经元示例,在神经网络中,参数又可被成为权重(weight)。 我们设计出了类似
阅读全文
摘要:我们之前学的,无论是线性回归还是逻辑回归都有这样一个缺点,即:当特征太多时,计算的负荷会非常大。下面是一个例子: 当我们使用𝑥1, 𝑥2 的多次项式进行预测时,我们可以应用的很好。 之前我们已经看到过,使用非线性的多项式项,能够帮助我们建立更好的分类模型。假设我们有非常多的特征,例如大于100
阅读全文
摘要:GitHub代码练习地址:https://github.com/Neo-ML/JavaPractice/blob/master/IntPractice1.java https://github.com/Neo-ML/JavaPractice/blob/master/IntPractice2.java
阅读全文
摘要:1 类相关函数- issubclass:检测一个类是否是另一个类的子类- isinstance:检测一个对象是否是一个类的实例- hasattr:检测一个对象是否由成员xxx- getattr: get attribute- setattr: set attribute- delattr: dele
阅读全文
摘要:针对逻辑回归问题,我们在之前的课程已经学习过两种优化算法:我们首先学习了使用梯度下降法来优化代价函数𝐽(𝜃),接下来学习了更高级的优化算法,这些高级优化算法需要你自己设计代价函数𝐽(𝜃)。 自己计算导数同样对于逻辑回归,我们也给代价函数增加一个正则化的表达式,得到代价函数: 要最小化该代价函
阅读全文
摘要:对于线性回归的求解,我们之前推导了两种学习算法:一种基于梯度下降,一种基于正规方程。 正则化线性回归的代价函数为: 如果我们要使用梯度下降法令这个代价函数最小化,因为我们未对theta0进行正则化,所以梯度下降算法将分两种情形: 对上面的算法中𝑗 = 1,2, . . . , 𝑛 时的更新式子进
阅读全文
摘要:上面的回归问题中如果我们的模型是: 我们可以从之前的事例中看出,正是那些高次项导致了过拟合的产生,所以如果我们能让这些高次项的系数接近于0 的话,我们就能很好的拟合了。 所以我们要做的就是在一定程度上减小这些参数𝜃 的值,这就是正则化的基本方法。我们决定要减少𝜃3和𝜃4的大小,我们要做的便是修
阅读全文
摘要:到现在为止,我们已经学习了几种不同的学习算法,包括线性回归和逻辑回归,它们能够有效地解决许多问题,但是当将它们应用到某些特定的机器学习应用时,会遇到过拟合(over-fitting)的问题,可能会导致它们效果很差。 在这段视频中,我会解释什么是过度拟合问题,并且在此之后接下来的几个视频中,我们将谈论
阅读全文
摘要:对于之前的一个,二元分类问题,我们的数据看起来可能是像这样: 对于一个多类分类问题,我们的数据集或许看起来像这样: 我用3 种不同的符号来代表3 个类别,问题就是给出3 个类型的数据集,我们如何得到一个学习算法来进行分类呢?我们现在已经知道如何进行二元分类,可以使用逻辑回归,对于直线或许你也知道,可
阅读全文
摘要:面向对象的三大特性- 封装- 继承- 多态1 封装 - 封装就是对对象的成员进行访问限制- 封装的三个级别: - 公开,public - 受保护的,protected - 私有的,private - public,private,protected不是关键字- 判别对象的位置 - 对象内部 - 对象
阅读全文
摘要:# 3. 类和对象的成员分析- 类和对象都可以存储成员,成员可以归类所有,也可以归对象所有- 类存储成员时使用的是与类关联的一个对象- 独享存储成员是是存储在当前对象中- 对象访问一个成员时,如果对象中没有该成员,尝试访问类中的同名成员, 如果对象中有此成员,一定使用对象中的成员- 创建对象的时候,
阅读全文
摘要:在这段视频中,我们要介绍如何拟合逻辑回归模型的参数𝜃。具体来说,我要定义用来拟合参数的优化目标或者叫代价函数,这便是监督学习问题中的逻辑回归模型的拟合问题。 对于线性回归模型,我们定义的代价函数是所有模型误差的平方和。理论上来说,我们也可以对逻辑回归模型沿用这个定义,但是问题在于,当我们将带入到这
阅读全文
摘要:现在讲下决策边界(decision boundary)的概念。这个概念能更好地帮助我们理解逻辑回归的假设函数在计算什么。 在逻辑回归中,我们预测:当ℎ𝜃(𝑥) >= 0.5时,预测 𝑦 = 1。当ℎ𝜃(𝑥) < 0.5时,预测 𝑦 = 0 。根据上面绘制出的 S 形函数图像,我们知道当�
阅读全文
摘要:在分类问题中,要用什么样的函数来表示我们的假设呢?此前说过,希望我们的分类器的输出值在0 和1 之间,因 此,我们希望想出一个满足某个性质的假设函数,这个性质是它的预测值要在0 和1 之间。回顾在一开始提到的乳腺癌分类问题,我们可以用线性回归的方法求出适合数据的一条直线: 根据线性回归模型我们只能预
阅读全文
摘要:在分类问题中,你要预测的变量 𝑦 是离散的值,我们将学习一种叫做逻辑回归 (LogisticRegression) 的算法,这是目前最流行使用最广泛的一种学习算法。在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误)。分类问题的例子有:判断一封电子邮件是否是垃圾邮件;判断一次金融交
阅读全文
摘要:到目前为止,我们都在使用梯度下降算法,但是对于某些线性回归问题,正规方程方法是更好的解决方案。如: 即: 运用正规方程方法求解参数: 注:对于那些不可逆的矩阵(通常是因为特征之间不独立,如同时包含英尺为单位的尺寸和米为单位的尺寸两个特征,也有可能是特征数量大于训练集的数量),正规方程方法是不能用的。
阅读全文
摘要:梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,我们不能提前预知,我们可以绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛。 也有一些自动测试是否收敛的方法,例如将代价函数的变化值与某个阀值(例如0.001)进行比较,但通常看上面这样的图表更好。 梯度下降算法的每次迭代受到学习率的影响,如
阅读全文
摘要:在我们面对多维特征问题的时候,我们要保证这些特征都具有相近的尺度,这将帮助梯度下降算法更快地收敛。 以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的值为 0-2000 平方英尺,而房间数量的值则是0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图能,看出图像会显得很扁,梯度
阅读全文
摘要:numpy.power(n, x) 对数组n的元素分别求x次方。x可以是数字,也可以是数组,但是n和x的列数要相同。
阅读全文
摘要:与单变量线性回归类似,在多变量线性回归中,我们也构建一个代价函数,则这个代价函数是所有建模误差的平方和,即: 其中:ℎ𝜃(𝑥) = 𝜃𝑇𝑋 = 𝜃0 + 𝜃1𝑥1 + 𝜃2𝑥2+. . . +𝜃𝑛𝑥𝑛 ,我们的目标和单变量线性回归问题中一样,是要找出使得代价函数最小的一系
阅读全文
摘要:1、转置 #reshape(shape)函数改变数组形状,shape是一个元组,表示数组的形状 创建一个包含15个元素的一维数组,通过reshape函数调整数组形状为3行5列的二维数组arr = np.arange(15).reshape((3,5))print(arr) 结果:[[ 0 1 2 3
阅读全文
摘要:1、一维数组索引与切片#创建一维数组arr1d = np.arange(10)print(arr1d) 结果:[0 1 2 3 4 5 6 7 8 9] #数组的索引从0开始,通过索引获取第三个元素arr1d[2] 结果:2 #切片,左闭右开区间,从索引3开始,直到索引7结束 arr1d[3:8]
阅读全文
摘要:NumPy是Python的一个高性能科学计算和数据分析基础库,提供了功能强大的多维数组对象ndarray。jupyter notebook快速执行代码的快捷键:鼠标点击选中要指定的代码框,Shift + Enter组合键直接执行代码框中的全部代码。 Alt + Enter组合键执行完代码框中的代码在
阅读全文
摘要:我们探讨了单变量/特征的回归模型,现在我们对房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为(𝑥1, 𝑥1, . . . , 𝑥𝑛)。 增添更多特征后,我们引入一系列新的注释:𝑛 代表特征的数量𝑥(𝑖)代表第 𝑖 个训练实例,是特征矩阵中的第𝑖行
阅读全文