K值得选取非常重要,因为:
如果当K的取值过小时,一旦有噪声得成分存在们将会对预测产生比较大影响,例如取K值为1时,一旦最近的一个点是噪声,那么就会出现偏差,K值的减小就意味着整体模型变得复杂,容易发生过拟合;
如果K的值取的过大时,就相当于用较大邻域中的训练实例进行预测,学习的近似误差会增大。这时与输入目标点较远实例也会对预测起作用,使预测发生错误。K值的增大就意味着整体的模型变得简单;
对缺失数据不太敏感,算法也比较简单,常用于文本分类。需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
考虑两队之间的足球比赛:队0 和队 1。假设65%的比赛队0胜出、P(Y=0)=0.65。剩余的比赛队1胜出、P(Y=1)=0.35。队0获胜的比赛中只有30%在队1的主场、P(X=1|Y=0)=0.3,而队1获胜的比赛中75%是主场获胜、P(X=1|Y=1)=0.75。则队1在主场获胜的概率即P(Y=1|X=1)为:
根据贝叶斯定理:P(Y = 1|X = 1) = P(X = 1|Y =1) * P(Y = 1)/P(X = 1)
根据全概率公式:P(X =1) = P(X = 1|Y = 1) * P(Y = 1) + P(X = 1|Y = 0) * P(Y = 0) = 0.75 * 0.35 + 0.3* 0.65 = 0.4575
所以队1取胜的概率P(Y = 1|X = 1) = 0.75 * 0.35/ 0.4575 = 0.5738
队0取胜的概率P(Y = 1|X = 0) = 1 – 0.5738= 0.4262
A-1=1/|A|* A*
假设我们想估计A和B这两个参数,在开始状态下二者都是未知的,但如果知道了A的信息就可以得到B的信息,反过来知道了B也就得到了A。可以考虑首先赋予A某种初值,以此得到B的估计值,然后从B的当前值出发,重新估计A的取值,这个过程一直持续到收敛为止,该算法是EM的算法思想。
EM算法解决这个的思路是使用启发式的迭代方法,既然我们无法直接求出模型分布参数,那么我们可以先猜想隐含数据(EM算法的E步),接着基于观察数据和猜测的隐含数据一起来极大化对数似然,求解我们的模型参数(EM算法的M步)。由于我们之前的隐藏数据是猜测的,所以此时得到的模型参数一般还不是我们想要的结果。不过没关系,我们基于当前得到的模型参数,继续猜测隐含数据(EM算法的E步),然后继续极大化对数似然,求解我们的模型参数(EM算法的M步)。以此类推,不断的迭代下去,直到模型分布参数基本无变化,算法收敛,找到合适的模型参数。
故答案是EM算法。
N-gram是一种简单有效的统计语言模型,通常n采用1-3之间的值,它们分别称为unigram、bigram和trigram。现有给定训练语料合计三个文档如下:
D1: John read Moby Dick
D2: Mary read a different book,
D3: She read a book by Cher
利用bigram求出句子“John read a book”的概率大约是( )
2-gram公式
P(s1,s2,s3…) = P(s1)*P(s2|s1)*P(s3|s2)…
john在文章开头的概率:P(john) = 1/3
P(read | John) = 1
P(a|read) = 2/3
P(book|a) = 1/2
P(尾巴|book) = 1/2, book出现两次,其中一次是在句子结尾处
P(“John read a book”) = 1/3 * 1 * 2/3 * 1/2 * 1/2 = 1/18 ≈ 0.06,故选择B
ID3决策树是根据信息增益来划分属性
C4.5决策树是根据增益率来划分属性
CART决策树是根据基尼指数来划分属性
基尼指数反映了从样本集D中随机抽取两个样本,其类别标记不一致的概率,因此越小越好
在机器学习中,下列关于各算法对应的损失函数正确的是( )
正确答案: A B C D
最小二乘-Square loss
SVM-Hinge Loss
Logistic Regression-(log-Loss)
AdaBoost-指数损失函数
类别不平衡(class-imbanlance)就是指分类问题中不同类别的训练样本相差悬殊的情况,例如正例有900个,而反例只有100个,这个时候我们就需要进行相应的处理来平衡这个问题,下列方法正确的是( )
正确答案: A C D
在训练样本较多的类别中进行欠采样
在训练样本较多的类别中进行过采样
直接基于原数据集进行学习,对预测值进行再缩放处理(实可以用原数据进行训练,但是把反例的权重都×9)
通过对反例中的数据进行插值,来产生额外的反例
Python 2里面读取输入的函数是raw_input(), Python 3的是input(),读入一个值后回车读取输入就退出了,想要一次读取多个输入,可以像下面这样:
a, b = raw_input().split()
输出的是字符串,要想读取的是数值,可以稍微改一下,像这样:
a, b = map(int, raw_input().split())
int可以换成其它需要的类型,左边可以是任意多个变量
还可以把读取的值存到一个列表里:
input_list = map(int, raw_input().split())
sk.recv(bufsize[,flag]):接受套接字的数据。数据以字符串形式返回,bufsize指定最多可以接收的数量。flag提供有关消息的其他信息,通常可以忽略。
sk.recvfrom(bufsize[.flag]):与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址。
sk.getsockname():返回套接字自己的地址。通常是一个元组(ipaddr,port)
sk.connect(address):连接到address处的套接字。一般,address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。
sk.listen(backlog):开始监听传入连接。backlog指定在拒绝连接之前,可以挂起的最大连接数量。
DNS负载均衡是通过循环复用实现的,如果发现主机名的多个地址资源记录,则可用它循环使用包含在查询应答中的主机资源记录
只要记住,有连接的一定要确认
数据链路层一般都提供3种基本服务,即无确认的无连接服务、有确认的无连接服务、有确认 的面向连接的服务。
(1)无确认的无连接服务 无确认的无连接服务是源机器向目的机器发送独立的帧,而目的机器对收到的帧不作确认。 如果由于线路上的噪声而造成帧丢失,数据链路层不作努力去恢复它,恢复工作留给上层去完成。 这类服务适用于误码率很低的情况,也适用于像语音之类的实时传输,实时传输情况下有时数据延误比数据损坏影响更严重。 大多数局域网在数据链路层都使用无确认的无连接服务。
(2)有确认的无连接服务 这种服务仍然不建立连接,但是所发送的每一帧都进行单独确认。 以这种方式,发送方就会知道帧是否正确地到达。如果在某个确定的时间间隔内,帧没有到达,就必须重新发此帧。
(3)有确认的面向连接的服务 采用这种服务,源机器和目的机器在传递任何数据之前,先建立一条连接。 在这条连接上所发送的每一帧都被编上号,数据链路层保证所发送的每一帧都确实已收到。 而且,它保证每帧只收到一次,所有的帧都是按正确顺序收到的。面向连接的服务为网络进程间提供了可靠地传送比特流的服务。
STP(生成树协议)的原理是按照树的结构来构造网络拓扑,消除网络中的环路,避免由于环路的存在而造成广播风暴问题。
100 Mbps 是按 bit 传输的,所以需要转化为 byte 的传输速度,需要除以 8,即下载速度是 12.5Mb/s,所以需要 2 秒
哈夫曼树只是一棵最优二叉树,不一定是完全二叉树,也不一定是平衡二叉树哈夫曼树不关注树的结构,只关注带权路径长度
O(1) 冒泡排序
O(1) 简单选择
O(1) 直接插入
O(1) 希尔排序
O(1) 堆排序
O(n) 归并排序
O(log n)~O(n) 快速排序
基数排序:k进制的话需要k个桶
快速排序:基于递归,考虑栈空间,空间复杂度从最坏O(N)到最好O(logN)
平均情况下:快(快速排序)些(希尔排序)以“nlogn”的速度归(归并排序)队(堆排序)!其它n^2
最坏情况下:快速排序n^2,其他和平均情况一样。
快速排序logn
归并排序n
其它1
顺序查找 < 分块查找 < 二叉排序树查找 < 二分查找(等同于平衡二叉排序树的查找)< 哈希查找
下列关于排序算法的描述错误的是(B)
在待排序的记录集中,存在多个具有相同键值的记录,若经过排序,这些记录的相对次序仍然保持不变,称这种排序为稳定排序
二叉查找树的查找效率与二叉树的树型有关,在节点太复杂时其查找效率最低
在排序算法中,希尔排序在某趟排序结束后不一定能选出一个元素放到其最终位置上。
插入排序方法可能出现这种情况:在最后一趟开始之前,所有的元素都不在其最终应在的正确位置上
递归条件
一个含直接或间接调用本函数语句的函数被称之为递归函数,在上面的例子中能够看出,它必须满足以下两个条件:
1) 在每一次调用自己时,必须是(在某种意义上)更接近于解;
2) 必须有一个终止处理或计算的准则。
函数间接调用自己不是递归(X)
递归调用可以用队列实现(X)
递归调用可以用栈实现(对)
函数直接调用自己是递归(X)
在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。
归并(稳定)
冒泡(稳定)
插入(稳定)
快速排序(不稳定)
已知二叉树后序遍历序列是dabec,中序遍历序列debac,它的前序遍历序列是(cedba)
后序遍历就是:左右根,中序遍历就是:左根右。
1.后序遍历得C为根节点。
2.中序得C无右子树,后序得C下一个根节点为E。
3,中序DEBA得D为E的左子树,后序DAB得B为E的下一个根节点,只能为E的右子树了,中序BA得A为B的右之树。
深度优先遍历:(广度不行)
拓扑排序
典型的神经网络其训练流程是将输入通过网络进行正向传导,然后将误差进行反向传播,Dropout就是针对这一过程之中,随机地删除隐藏层的部分单元,保持输入输出神经元不变,接着将输入通过修改后的网络进行前向传播,然后将误差通过修改后的网络进行反向传播。
Bagging首先随机地抽取训练集(training set),以之为基础训练多个弱分类器。然后通过取平均,或者投票(voting)的方式决定最终的分类结果。因为它随机选取训练集的特点,Bagging可以一定程度上避免过拟合(overfit);
Boosting按照某种策略将训练完的模型进行优化,最后能将弱分类器组合成强分类器;
stacking类似堆叠方式的模型集合方式。
blending:利用不相交的数据集进行训练,然后累加求平均。
使用BN层可以归一化层的输入和输出,使不同分布的输入差异的影响最小,让学习率调整得更加便捷,减少过拟合风险,加快训练速度。但使用BN后,会造成训练和预测的输出差异,这种差异在小数据量时尤为明显。
下列描述错误的是?(C)
函数在某点的梯度方向与取得最大方向导数的方向一致。
在等式约束条件下,约束的梯度向量与目标函数的梯度向量在最优解处一定平行。
KKT条件是强对偶成立的充要条件。
函数在某点的梯度的模为方向导数的最大值。
解释:KKT和强对偶条件应该是必要不充分关系