秋季招聘面试知识点汇总(面试题),秋招,总结,及

发表时间:2020-11-16

1.python中的self

https://blog.csdn.net/xrinosvip/article/details/89647884

在Python类中规定,函数的第一个参数是 实例对象本身 ,并且约定俗成,把其名字写为self。其作用相当于java中的this,表示当前类的对象,可以调用当前类中的属性和方法。

class是面向对象的设计思想,instance(也即是 object,对象)是根据 class 创建的

一个类(class)应该包含 数据和操作数据 的方法,通俗来讲就是 属性 和 函数(即调用方法)

类 class 中为啥用使用 self ?

在类的代码(函数)中,需要访问当前的实例中的变量和函数,即,访问Instance中的:

  • 对应的变量(property):Instance.ProperyNam,去读取之前的值和写入新的值

  • 调用对应函数(function):Instance.function(),即执行对应的动作

-> 而需要访问实例的变量和调用实例的函数,当然需要对应的实例Instance对象本身

-> 而Python中就规定好了,函数的第一个参数,就必须是实例对象本身,并且建议,约定俗成,把其名字写为self

-> 所以,我们需要self(需要用到self)

类中初始化的过程self.att = att其实就是创建一个dict字典来保存这些属性,可以通过self.__dict__来访问。

2.ROC和AUC

roc曲线:接收者操作特征(receiveroperating characteristic),roc曲线上每个点反映着对同一信号刺激的感受性。

曲线横坐标为假正率FPR,纵坐标为真正率TPR

FPR=\frac{FP}{FP+TN}

TPR=\frac{TP}{TP+FN}

假正率FPR:简单通俗来理解就是预测为正样本但是预测错了的可能性,显然,我们不希望该指标太高。

真正率TPR:则是代表预测为正样本但是预测对了的可能性,当然,我们希望真阳率越高越好。

分类器通过不同的阈值(如大于0.5为正)得到不同的结果,画出ROC曲线。

AUC计算方法:

  1. ROC曲线下面的面积即为AUC
  2. 一个关于AUC的很有趣的性质是,它和Wilcoxon-Mann-Witney Test是等价的。而Wilcoxon-Mann-Witney Test就是测试任意给一个正类样本和一个负类样本,正类样本的score有多大的概率大于负类样本的score。 一个正例,一个负例,预测为正的概率值比预测为负的概率值还要大的可能性,即为AUC。 具体来说就是统计一下所有的 M×N(M为正类样本的数目,N为负类样本的数目)个正负样本对中,有多少个组中的正样本的score大于负样本的score。当二元组中正负样本的 score相等的时候,按照0.5计算。然后除以MN。实现这个方法的复杂度为O(n^2)。n为样本数(即n=M+N)
  3. 第三种方法实际上和上述第二种方法是一样的,但是复杂度减小了。它也是首先对score从大到小排序,然后令最大score对应的sample 的rank为n,第二大score对应sample的rank为n-1,以此类推。然后把所有的正类样本的rank相加,再减去M-1种两个正样本组合的情况。得到的就是所有的样本中有多少对正类样本的score大于负类样本的score。然后再除以M×N。即

1、为了求的组合中正样本的score值大于负样本,如果所有的正样本score值都是大于负样本的,那么第一位与任意的进行组合score值都要大,我们取它的rank值为n,但是n-1中有M-1是正样例和正样例的组合这种是不在统计范围内的(为计算方便我们取n组,相应的不符合的有M个),所以要减掉,那么同理排在第二位的n-1,会有M-1个是不满足的,依次类推,故得到后面的公式M*(M+1)/2,我们可以验证在正样本score都大于负样本的假设下,AUC的值为1

2、根据上面的解释,不难得出,rank的值代表的是能够产生score前大后小的这样的组合数,但是这里包含了(正,正)的情况,所以要减去这样的组(即排在它后面正例的个数),即可得到上面的公式

另外,特别需要注意的是,再存在score相等的情况时,对相等score的样本,需要 赋予相同的rank(无论这个相等的score是出现在同类样本还是不同类的样本之间,都需要这样处理)。具体操作就是再把所有这些score相等的样本 的rank取平均。然后再使用上述公式。

AUC反应了模型的泛化能力。

#author: wepon
def naive_auc(labels,preds):
    """
    最简单粗暴的方法
   先排序,然后统计有多少正负样本对满足:正样本预测值>负样本预测值, 再除以总的正负样本对个数
     复杂度 O(NlogN), N为样本数
    """
    n_pos = sum(labels)
    n_neg = len(labels) - n_pos
    total_pair = n_pos * n_neg

    labels_preds = zip(labels,preds)
    labels_preds = sorted(labels_preds,key=lambda x:x[1])
    accumulated_neg = 0
    satisfied_pair = 0
    for i in range(len(labels_preds)):
        if labels_preds[i][0] == 1:
            satisfied_pair += accumulated_neg
        else:
            accumulated_neg += 1

    return satisfied_pair / float(total_pair)

score从小到大排序,当遇到正样本时,加上已经出现的负样本,代表当前正样本可以组成多少需要的样本对(正样本预测值>负样本预测值)。

2.均值滤波、高斯滤波python实现

https://www.cnblogs.com/xinyuLee404/p/12719112.html

def image_convolution(image,kernel):
    [img_height,img_width] = image.shape
    [kernel_height,kernel_width] = kernel.shape

    expand_width = int((kernel_width - 1)/2)
    expand_height = int((kernel_height - 1)/2)

    con_height = int(img_height + expand_height*2)
    con_width = int(img_width + expand_width*2)

    #给结果图像、用于卷积处理的矩阵创建空间
    result_image = np.zeros(image.shape)
    con_image = np.zeros((con_height, con_width))

    #填入图片
    con_image[expand_height:expand_height+img_height, expand_width:expand_width+img_width]=image[ : , :]
    #对每个像素点进行处理
    for i in range(expand_height,expand_height+img_height):
        for j in range(expand_width,expand_width+img_width):
            result_image[i-expand_height][j-expand_width] = int(np.sum(con_image[i-expand_height:i+expand_height+1, j-expand_width:j+expand_width+1]*kernel))
    print(result_image)
    return result_image

def mean_mask(size):
    mask=np.ones((size, size))
    return mask/size/size

3.Attention机制,Attention常用公式

本质:Attention机制其实就是一系列注意力分配系数,也就是一系列权重参数罢了。

attention函数共有三步完成得到attention value。

  1. Q与K进行 相似度计算得到权值
  2. 对上部 权值归一化
  3. 用归一化的权值与V加权求和

参数少

模型复杂度跟 CNN RNN 相比,复杂度更小,参数也更少。所以对算力的要求也就更小。

速度快

Attention 解决了 RNN 不能并行计算的问题。Attention机制每一步计算不依赖于上一步的计算结果,因此可以和CNN一样并行处理。

效果好

在 Attention 机制引入之前,有一个问题大家一直很苦恼:长距离的信息会被弱化,就好像记忆能力弱的人,记不住过去的事情是一样的。

文章来源互联网,如有侵权,请联系管理员删除。邮箱:417803890@qq.com / QQ:417803890

微配音

Python Free

邮箱:417803890@qq.com
QQ:417803890

皖ICP备19001818号
© 2019 copyright www.pythonf.cn - All rights reserved

微信扫一扫关注公众号:

联系方式

Python Free