随机数:from numpy import random as nr nr.rand(m,n)(0-1随机)、randint(l,h,(m,n))(规定范围内随机整数)、uniform(均匀分布)、normal(生态分布的随机)、shufftle(随机打乱顺序)、poisson(泊松分布);sum(x,axis=0/1)(求和列/行)、average(加权平均)、var(方差(x-mean)2/n)、mean(期望)、std(标准差)、product(连乘积);min(最小值)、max、ptp(极差)、argmin(最小值下标)、mininum(二元最小值)、maxnum(二元最大值)、sort(数组排序)、argsort(数组排序下标)、percentile(分位数)(第p个百分位数是这样一个值,它使得至少有p%的数据项小于或等于这个值,且至少有(100-p)%的数据项大于或等于这个值,np.percentile(a,52))、median(中位数)。
二、Novikoff定理
1. 感知机
感知机:感知机是二分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取+1或-1两种。感知机旨在求出将训练数据集进行线性划分的分类超平面,引入了基于误分类的损失函数,再对损失函数进行极小化,从而求出感知机模型。
2. 感知机模型
3. 超平面
4. 范数
[L0范数:向量中非0元素的个数;L1范数:向量中各个元素绝对值之和
L0范数和L1范数可以实现稀疏,L1因比L0更好的优化求解特性而被广泛使用;L2范数是向量个元素的平方和然后求平均根;可以实现对模拟空间的限制,从而避免过拟合,提升模型的泛化能力。]
5. 朴素贝叶斯分类器
6. Novikoff定理描述与证明
三、搜索算法
1. 分类
A.盲目搜索:深度优先(回溯),广度优先(FIFO)
B.启发式搜索:分支限界法,博弈树搜索,最佳优先算法,A*搜索
2. 启发式搜索
为减小搜索范围,而需要利用某些已知的、有关具体问题领域的特性信息(启发信息)特点: A.大多数是深度优先搜索算法的改进版;B.在有多条路径可走,会给出该走哪条路径的建议;C.利用问题中的已知条件,尽快找到问题的解;D.可采用估值的方法进行搜索指导;E.状态空间小,搜索时间短并且效率高、容易控制,使问题易于得到解。
3. 八数码问题(深度优先算法)
在宽度优先搜索过程中,需要遍历目标节点所在层之前每层的所有节点,即需要遍历所有的分支。而深度优先搜索过程中,则不需要遍历这么多的节点。所以,在八数码的求解过程中,深度优先搜索的效率明显比宽度优先搜索的效率要高。
4. 背包问题(启发式搜索方法)
A.定义解空间 x={(0,0,0),…(1,1,1)} B.决定解空间结构(画空间树) C.用深度优先方式搜索解空间,用剪枝函数避免无效搜索(S是死节点,因为背包的容量超出,此时剪枝)D.得最优解为(0,1,1)最优值为50 ****剪枝技术:****基本思想:在当前扩展结点的右子树(或左子树)的价值上界,如果满足一定约束条件,则可以裁剪掉右子树(或左子树)。常用剪枝函数:A.用约束函数在扩展结点处剪去不满足约束的子树 B.用限界函数剪去得不到最优解的子树
5. 迷宫问题(最佳优先搜索算法)
对OPEN表中所有节点的f(n)进行比较,按从小到大的顺序重排OPEN表。其算法效率类似于DFS,但使用了与问题特性相关的估价函数来确定下一步待扩展的节点,因此是一种启发式搜索 OPEN 表: 保存了所有已生成但是未访问过的节CLOSED 表: 记录已访问过的节点。步骤:A.把S放入OPEN表,计算估值函数 B.判断OPEN表是否为空 C.把OPEN表中第一个节点N放入CLOSED表 D.判断N是否为目标节点 E.扩展N计算所有子节点的估值函数 F.把子节点放入OPEN表,对所有节点按估值函数值由小到大重排 A.OPEN是否为空 (画出生成树)
四、机器学习(自我修正模型)
1. 思想
机器学习是数据通过算法构建出模型并对模型进行评估,评估的性能如果达到要求就拿这个模型来测试其他的数据,如果达不到要求就调整算法来重新建立模型,再次进行评估,如此循环往复,最终获得满意的经验来处理其他的数据。分类:监督学习,无监督学习,半监督学习,强化学习(是否标注)****监督学习:****从给定的训练数据集中学习一个函数(模型),当新的数据到来时,可以根据这个函数(模型)预测结果。常见的监督学习算法包括回归分析和统计分类。无监督学习:无监督学习中数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。 应用场景:关联规则的学习以及聚类等。算法:Apriori算法和K-Means算法。(聚类算法、降维算法)****半监督学习:****主要考虑如何利用少量的标注样本和大量的未标注样本进行训练和分类的问题。应用场景:分类和回归。处理人工合成数据;算法:图论推理算法(Graph Inference)或者拉普拉斯支持向量机(Laplacian SVM) ****强化学习:****通过观察学习动作来完成,每个动作都会对环境有所影响,学习对象根据观察到的周围环境的反馈来做出判断。在强化学习下,输入数据直接反馈到模型,模型必须对此立刻做出调整。 应用场景:动态系统,机器人控制等。算法:Q-Learning (奖惩机制),时间差学习(Temporal difference learning)
2. 机器学习的应用
数据挖掘、计算机视觉、自然语言处理、生物特征识别、搜索引擎、医学诊断、检测信用卡欺诈、证券市场分析、DNA序列测序、语音和手写识别、战略游戏和机器人等领域。三要素: 算法、模型、评估(模型设计,性能评估,参数优化)****常见算法:****回归算法(监督学习):线性回归、逻辑回归;神经网络(监督学习);SVM支持向量机(监督学习);聚类算法(无监督学习);降维算法(无监督学习)
3. 感知机的回归分析方法
回归算法:回归算法有两个重要的子类:即线性回归和逻辑回归;线性回归就是如何拟合出一条直线最佳匹配所有的数据,逻辑回归是一种与线性回归非常类似的算法。线性回归处理的问题类型与逻辑回归不一致:线性回归处理的是数值问题,预测数字。逻辑回归属于分类算法,预测类别。SVM算法是逻辑回归算法的强化:通过给予逻辑回归算法更严格的优化条件,支持向量机算法可以获得比逻辑回归更好的分类界线。既可以保持计算效率,又可以获得非常好的分类效果。聚类算法是无监督学习算法中最典型的代表;就是计算种群中的距离,根据距离的远近将数据划分为多个族群;最典型的代表就是K-Means算法。降维算法也是一种无监督学习算法,主要特征是将数据从高维降低到低维。维度表示数据的 特征量的大小。通过降维算法,可以去除冗余信息,可以压缩数据与提升机器学习效率。
****(1)感知机基本理论:****用一条曲线去尽量准的拟合这些数据,如果有新的输入过来,我们可以在将曲线上这个点的对应值返回。****应用步骤:****根据客观现象的定性认识确定变量之间是否存在相关关系;估计相关关系的大概类型(经验);绘制散点图,推测回归模型;回归分析并拟合回归模型;检验回归模型可信度;应用模型进行预测
**(2)损失函数(loss function)**是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结构风险函数重要组成部分。损失函数:误分类点的总数。
(3)数据集:学习样本数据集,通过匹配一些参数来建立一个分类器。建立一种分类的方式,主要是用来训练模型的。作用:估计模型。测试集:测试训练好的模型的分辨能力(识别率)。作用:检验最终选择最优的模型的性能如何。验证集:对学习出来的模型,调整分类器的参数,如在神经网络中选择隐藏单元数。验证集还用来确定网络结构或者控制模型复杂程度的参数。作用:确定网络结构或者控制模型复杂程度的参数。
4. SVM向量机(支持向量机)带
贝叶斯定理 P(Bi|A)= [P(Bi)P(A|Bi)]/和(P(Bj)P(A|Bj))全概率:P(A)=P(A|B1)P(B1)+P(A|B2)P(B2)+…+P(A|Bn)P(Bn)条件概率:P(A|B)= P(AB)/P(B) Max-margin最大化边界地带(Maximum margin linear classifier);定义分类器的边界来改善分类性能(空隙越大,感知机的效果越好;绿色的点:边缘敏感数据)如何画出带:让这些敏感数据点到这条线的距离相等,保证感知机正确性
5. 为什么机器学习很重要?
****A.什么是机器学习:****机器学习是数据分析的一种方法,它可以使分析模型的建立自动化。通过算法迭代式的从数据中学习,机器学习使得计算机可以不通过显式编程而洞察那些隐藏在深处的数据。B.****机器学习重要性:****机器学习可以更快且自动的产生模型,以分析更大,更复杂的数据,而且传输更加迅速,结果更加精准,甚至是在非常大的规模中。C.面临问题:但由于机器学习方法和人脑机制之间巨大的差异,机器学习距离人类思考方式还有很远的距离,尤其是单一的机器学习模型。(标注训练数据代价高昂,深层大规模模型训练难度大)
五、自然语言处理
1. 自然语言处理的应用
机器翻译,自动摘要,文本分类,信息检索,信息抽取,情感分析,自动问答
2. 语言模型设计与难点
****设计:****三元模型(二阶马尔科夫链文法模型),就是在之前两个字都出现的条件下,下一个字符合的概率。设定 n = 1 , 构成朴素贝叶斯文法模型【独立】设定 n = 2 , 构成一阶马尔科夫链文法模型【历史有关】设定 n = 3 , 构成二阶马尔科夫链文法模型【历史有关】存在样本稀疏问题(概率为0)采用平滑机制。熵/困惑度越大越混乱。建立统计语言模型步骤:1.可以表示成给定前面的词,求解后面一个词出现的条件概率。2.求解模型里的参数。3.一般选择“二元语言模型”或是“三元语言模型”。4.平滑化 难点:A.词典无词(在测试集里和训练集词语三元组不同)B.三元组没有出现(测试集没有,训练集出现)
****自然语言处理的难点:****估计语言模型概率P(e);估计翻译模型概率P(f|e);设计有效快速的算法求解使得P(e)*P(f|e)最大;(语言不规范灵活性高;错别字;新词;歧义的消除;句法的模糊性;语言行为与计划)
3. 词频统计
英文:A.分解并提取文章的单词(使用txt.lower()把字母变成小写;把特殊符号用txt.replace(ch,” ”)替换为空格)B.对每个单词计数counts[word]= counts.get(word,0)+1 C.对单词的统计值从高到低排序 print(“{0:<10}{1:>5}”.format(word,count))
中文:A.分词words = jieba.lcut(txt) B.相似描述放在一起 C.counts[rword] = counts.get(rword,0) + 1 D.不统计exclude里
4. Jieba库的主要函数
Jieba.lcut(s)(返回列表类型)Jieba.add_word(w)(分词中添新词w)Jieba.cut(s,cut_all=True)(输出文本s中所有可能单词)
六、深度学习
1. 深度学习网络结构
全连接网********络(FC)它认为每一层的输入都与上一层的输出有关。用于依赖所有特征的简单场景,比如说本章的房价预测模型和在线广告推荐模型 卷积神经网络(CNN专门用来处理具有类似网格结构的数据的神经网络,例如图像数据,CNN的上下层神经元并不都能直接连接,而是通过“卷积核”作为中介,通过“核”的共享大大减少了隐含层的参数。通常用三层结构,包括卷积层、池化层和全连接层,应用在大型图像处理 ****循环神经网(RNN)****是一种用于处理序列数据的神经网络。例如音频中含有时间成分,因此音频可以被表示为一维时间序列;语言中的单词都是逐个出现的,因此语言的表示方式也是序列数据。应用在机器翻译、语音识别。神经网络的结构各层功能如下:输入层:样本信息输入。****隐藏层:****所有在输出层之后并且在输出层之前的层都是隐藏层,隐藏层用于处理中间步骤,这些步骤通常不对用户展示,因此称为隐藏层。****输出层:****输出神经网络的计算结果。输入层不算在分层之内。
2. 激活函数
****(1)定义:****神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。
****(2)激活函数的作用:****如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层节点的输入都是上层输出的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了,那么网络的逼近能力就相当有限。正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络表达能力就更加强大(不再是输入的线性组合,而是几乎可以逼近任意函数)。
(3)常见的激活函数
经过非线性激活函数,计算出该节点的输出值(激活值)。sigmoid函数,tanh函数,ReLU函数。sigmoid函数具有几个缺点:1.当z值非常大或者非常小时,sigmoid函数的导数g′(z)将接近0。这会导致权重 W 的梯度将接近0,使得梯度更新十分缓慢,梯度消失。2.函数的输出不是以0为均值,将不便于下层的计算。sigmoid函数可用在网络最后一层,作为输出层进行二分类,尽量不要使用在隐藏层。tanh函数的缺点同sigmoid函数的第一个缺点一样,当z很大或很小时,g′(z)接近于0,会导致梯度很小,权重更新非常缓慢,即梯度消失问题。ReLU函数又称为修正线性单元,是一种分段线性函数,其弥补了sigmoid函数以及tanh函数的梯度消失问题。ReLU函数的优点:1.在输入为正数的时候(对于大多数输入zz空间来说),不存在梯度消失问题。2.计算速度要快很多,ReLU函数只有线性关系,不管是前向传播还是反向传播,都比sigmod和tanh要快很多。(sigmod和tanh要计算指数,计算速度会比较慢)。ReLU函数的缺点:当输入为负时,梯度为0,会产生梯度消失问题。
****为什么隐藏层选用relu,输出选用sigmoid?****1.采用sigmoid等函数,反向传播求误差梯度时,求导计算量很大,而relu求导非常容易。2.对于深层网络,sigmoid函数反向传播时,很容易出现梯度消失的情况,从而无法完成深层网络的训练。3.relu会使一部分神经元的输出为0,这样造成网络的稀疏性,并且减少了参数的相互依赖关系,缓解过拟合问题的发生。
****BP算法(反向传播算法)目的:****调参,使用了广播机制,使得计算量减小。主要用于优化参数(w,b)。BP算法就是利用损失函数进行反向求导优化,求出损失函数最小时的参数的值。这一个过程与逻辑回归的反向计算类似,区别在于BP算法对于有隐藏层的神经网络能降低计算复杂度,其思想与动态规划类似。 ****正向传播:****节点在获得输入数据后需要经过有次序的两步计算(线性变换和(非线性)激活)。从输入到隐藏层以及隐藏层到输出都需要经过加权和激活操作(线性变换和(非线性)激活)权值w和偏移量b不会随样本改变(就是说与具体某个样本是无关的,也不会随着样本的变化而变化)
3. CNN卷积神经网络
卷积神经网络组成为输入层、卷积层、激活函数、池化层、全连接层。卷积神经网络主要包含三层:卷积层CONV 池化层POOL 全连接层FC。卷积层:特征提取;池化层(常见的池化就是每块中的最大值):对输入的特征进行压缩,一方面使特征图变小,简化网络计算复杂度,另一方面进行特征压缩,提取主要特征,避免过拟合;全连接层:连接所有特征,将输出值送给分类器。CNN的优点:通过参数共享、稀疏连接两种机制减少参数,以便于用更小的训练集训练模型,避免过拟合;平移不变性。CNN一般使用RELU激活函数。
4. 神经网络算法
神经网络算法核心思想是损失函数的优化问题。神经网络是一种机器学习算法,而机器学习算法基本思路用一句话概括就是:损失函数L的优化问题。所谓的优化就不断的调整参数(w,b)使得损失函数的值尽可能的小。调整参数的具体手段就是梯度下降算法。梯度下降算法是一个算法自我迭代的过程,迭代的结果就是最终逼近极小值点。在梯度下降算法中dw表示相对损失函数L 关于参数 w 的偏导数,db表示对于损失函数L关于参数b的偏导数,为了获得dw和db的具体值,需要神经网络依次经历前向传播过程和后向传播过程。
神经网络算法的核心三步:前向传播、后向传播和梯度下降。神经网络先要经历前向传播的过程,然后再经历后向传播的过程。前向传播的就是根据输入的样本向量x经过神经网络得出预测值的过程,然后可以计算损失函数,而反向传播的本质就是从最终输出的损失函数开始逆向回退,根据求导的链式法则最终求出所参数的偏导数的过程。其中各层的作用,输入层:样本信息输入。隐藏层:所有在输出层之后并且在输出层之前的层都是隐藏层,隐藏层用于处理中间步骤,这些步骤通常不对用户展示,因此称为隐藏层。输出层:输出神经网络的计算结果。
****神经网络的层数是不是越多越好?****神经网络中的层数越多,对输入特征抽象层数越高。这是因为在神经网络中,后一层神经元的输入是前一层输出的加权和,前一层的特征在后一层就被抽象出来了,学习的过程其实就是调节和优化各连接权重和阈值的过程。对一个问题,层数少的时候效果差,这时候增加层数可以提高效果,但是如果盲目增加层数会引起overfiting,从而导致预测效果不好。
5. 卷积核
(过滤器)就是图像处理时,给定输入图像,输入图像中一个小区域中像素加权平均后成为输出图像中的每个对应像素,其中权值由一个函数定义,这个函数称为卷积核(卷积核相当于一个参数,就是神经网络中w的意思,也可以进行训练优化)。(1)每个卷积核具有长宽深三个维度;(2)在某个卷积层中,可以有多个卷积核:下一层需要多少个feather map,本层就需要多少个卷积核。有多少个卷积核,经过卷积就会产生多少个feature map,这个宽度可以手动指定,一般网络越深的地方这个值越大,因为随着网络的加深,feature map的长宽尺寸缩小,本卷积层的每个map提取的特征越具有代表性。卷积核设计原则:(1)卷积核一般形状是奇数的。保护位置信息:保证了锚点刚好在中间,方便以模块中心为标准进行滑动卷积,避免了位置信息发生偏移。(2)卷积核的各个元素值一般相加等于1,这样做的原因是保证原图像经过卷积核的作用亮度保持不变(但该原则不是必须)。在达到相同感受野的情况下,卷积核越小,所需要的参数和计算量越小。卷积核层数不是越多越好,cnn的层数跟输入图片的大小,每次卷积核大小、跨度大小、池化层矩阵大小、池化矩阵跨度大小都相关,虽然层数越多提取的特征会越多,但是可能会造成梯度消失。
6. 过拟合(over-fitting)
最后
四轮技术面+一轮hr面结束,学习到了不少,面试也是一个学习检测自己的过程,面试前大概复习了 一周的时间,把以前的代码看了一下,字节跳动比较注重算法,面试前刷了下leetcode和剑指offer, 也刷了些在牛客网上的面经。大概就说这些了,写代码去了~
祝大家都能收获大厂offer~
篇幅有限,仅展示部分内容