粉笔黑板,选择松久,行业协会首推,有眼光的您,还在等什么.心动不如行动,静候您的佳音,拿起电话拨打吧...
Mnist手写字识别,10分类问题 基于Tensorflow采用2层神经网络预测MNIST数据集手写数字10分类问题: 先定义好预测值,再定义好损失值,再定义优化求解。现在已经有了一个模型 计算模型的当前的效果和准确度
Regression解决的是分类的问题,而且是最经典的二分法,简单高效通俗易懂,原理非常简单。算法并不是越复杂越。分类问题的base model一般选择逻辑回归,其他算法和逻辑回归算法比较,差不多优先选择逻辑回归的算法,机器学习的算法选择:先逻辑回归,能简单还是用简单的,可以简单的描述为:
(1)找一个合适的预测函数(Andrew Ng的公开课中称为hypothesis),一般表示为h函数,该函数就是我们需要找的分类函数,它用来预测输入数据的判断结果。这个过程时非常关键的,需要对数据有一定的了解或分析,知道或者猜测预测函数的“大概”形式,比如是线性函数还是非线性函数。
Sigmoid函数输入范围是-∝~+∝,输出值是0-1,作用就是将输入变成一个概率值,完成一个分类的任务。决策边界可以是非线性的,表达一个复杂的问题。二分类问题,y的取值只能是1或者0。g()函数就是sigmoid()函数,这里相当于做了一个映射,将回归算法里面的预测值θT*X带入自变量完成一个分类的问题。
(2)构造一个Cost函数(损失函数),该函数表示预测的输出(h)与训练数据类别(y)之间的偏差,可以是二者之间的差(h-y)或者是其他的形式。综合考虑所有训练数据的“损失”,将Cost求和或者求平均,记为J(θ)函数,表示所有训练数据预测值与实际类别的偏差。可以从回归算法直接推导到逻辑回归算法中,通过Sigmoid函数映射过就可以。
(3)显然,J(θ)函数的值越小表示预测函数越准确(即h函数越准确),所以这一步需要做的是找到J(θ)函数的最小值。找函数的最小值有不同的方法,Logistic Regression实现时有的是梯度下降法(Gradient Descent)。
我们知道MNIST的每一张图片都表示一个数字,从0到9。我们希望得到给定图片代表每个数字的概率。比如说,我们的模型可能推测一张包含9的图片代表数字9的概率是80%但是判断它是8的概率是5%(因为8和9都有上半部分的小圆),然后给予它代表其他数字的概率更小的值。
线性层的spftmax回归模型识别手写字是一个使用softmax回归(softmax regression)模型的经典案例。softmax模型可以用来给不同的对象分配概率。即使在之后,我们训练更加精细的模型时,最后一步也需要用softmax来分配概率。
19:59:38正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。
所以我们判断一个字符串是否是合法的Email的方法是:
了解如何用字符来描述字符
在正则表达式中,如果直接给出字符,就是精确匹配。
- 用\d可以匹配一个数字
- \w可以匹配一个字母或数字
- .可以匹配任意字符
要匹配变长的字符,在正则表达式中
- 用*表示任意个字符(包括0个),
- 用+表示至少一个字符
- 用?表示0个或1个字符,
- ^\d表示必须以数字开头
偏置项和数据没有关系,对最后的结果产生较小的影响。对偏置项进行组合,使得原式保持不变,因此引入X0 参数,全部等于1。这也是我们处理数据的时候,为什么在数据项增加一组数据全部为1,对上面的平面进行组合,看起来更加简单一些。矩阵计算方便,矩阵计算高效,而不是采用for循环。
理论模型和实际模型之间肯定是存在差异的,引入误差项
误差的特征(机器学习假设,从实际情况出发,做出的假设):
似然函数求解(误差与测量值之间的关系)
观测样本数据得到参数,什么样的参数跟数据组合得到的真实值的可能性越大越好。什么样的参数跟数据组合得到的真实值的可能性(概率)越大越好,称为真实值的概率最大最好。线性回归依照最大似然函数来知道什么参数是合理的,离真实值比较接近
目标函数的推导 使得对数似然函数最大的变量
求目标函数最小值,因此我们需要对目标函数求偏导数。矩阵求偏导数的公式。
为什么偏导数等于0的时候对应的是最小值呢?
涉及到机器学习中的一个概念 凸优化
在凸函数里面,偏导数等于0对应的是最小值
R^2越接近1越好 越接近0越不好
DNN是深度神经网络,是一种统称
神经网络不需要提取特征,在前向传播当中,学习权重,完成直线之间的且操作和或操作
神经强大的原因在于:不需要你手动提取特征,表征其在样本空间中的分布,神经网络可以自动学习它的空间分布,不管样本分布在那个角落和区域
CNN 卷积神经网络 在图像中特别强大
RGB在CNN中不需要提取特征,惹事直接输入RGB像素点参数。
归一化的目的是将数据在某一范围内显示,不一定是0——1或者-1—1之间。
归一化在RGB中可以不用归一化,因为RGB输入的数据都遭0~255之间,数据可以先做Resize PCA和白化不常用
取均值:训练集和测试集去均值都是减去训练集的均值,因为测试集的均值是改变,每一次都不相同,因此我们需要减去训练集的均值,进行去均值化
神经元filter相当于滤波器 经过卷积操作,可以提取出图片中的一些特征,可能是边缘,可能是颜色也可能是其他.
卷积神经层网络有一个重要的特征:参数共享机制。无论怎么滑动滑动,对于同一个神经元,四条边上的权重是一样的,滑动的时候只有数据输入在变化,对于神经元对应一组权重参数固定。固定每个神经元的连接权重,对于一个filter来说,就相当于一个模板,输入给它的data参数在变化。模板对数据的匹配是有一个权重矩阵对数据进行内积操作。一个filter可以看作一个固定的内积权重,也就是说一个filter只关注一个特性。权重的共享特性使得特征参数的个数降低,特征参数可以从2亿降到/u/article/details/
}输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
递推的思想(从上至下):
在一个长度为n的数组里的所有数字都在1-n范围内,数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数字中任意一个重复的数字。前提条件是不能修改数组
把字符串分为两个部分:
1-字符串的第一个字符
2-第一个字符以后的所有的字符
第一步:求所有可能出现在第一位置的字符,遍历用索引实现
第二步:求第一个字符以后的所有的字符的全排列,我们人可以将后面的字符串分成两个部分:
1-后面字符串的第一个字符
2-这个字符以后的所有字符
求所有可能 出现在第一个位置的字符,遍历用索引实现建立一个全部为0值,长度为 n 的哈希表,如果没有重复数字,哈希表中所有的值全部为1,不存在第二次赋值为1的情况
1-从头到尾扫描原数组Lst,下标为i的位置上对应的数字是m
2-判断哈希表中下标为m的位置上值是否为0
3-为0,将数组数字m放到哈希表中,即令哈希表总对应的值为1(1是这里的一个标记值,用来判断)
表示哈希表中下标为m的位置上没有对应值,即原列表中第一次出现数字m
4-为1,返回数字m,数字m为重复的数字。
因为哈希表中已经存在数字m,在此基础上原列表i位置上又出现了数字m,数字m为重复的数字
如果避免使用O(n)的空间消耗,可以使用二分法查找算法,但是增加了一个统计数字出现的个数过程.
二分查找算法+统计区间数字
如果1—m区间内的数字超过了m,那么这一半的区间内一定存在重复的数字;否则另外一半一定存在重复的数字。我们可以继续将包含重复数字的区间一分为二,直到找到重复的数字。
找到重复的数字:当数字范围startN == endN的时候,判断该数字出现的次数超过1,则找到重复数字返回该数字
例如:一个长度为n的正序数列,查找一个数 target是否在这个数列当中
1-取数列正中间的数mid,
如果mid和x相等,则找到结果,查找成功 返回True
如果mid比x大,则x应该在mid的左侧,我们把mid左侧当作一个新的数列li
如果mid比x小,则x应该在mid的右侧,我们把mid右侧当作一个新的数列li
2-对于新的数列li 进行1的查找工作
3-一直重复上面查找,生成新的数列li为空的时候则 数列当中没有数x 返回False
通过循环改变数组的start end mid位置处的索引,直到找到该元素。最优O(1) 第一次取中间数mid 找到了 这种概率很低
最坏O(log n) 假设n个数的数列,每次把数列分成两半,n除以多少次2 等于1 呢? log n次if not a: #细节1:每次递推a列表都是新的参数,需要对列表a进行判断
因为思想相同,循环和递归的时间复杂度是一样的。二分法递归的实现,每次都要开新的列表,实际上空间复杂度会更大
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。