精华内容
下载资源
问答
  • 根据数据结构的不同,常见的数据模型有层次模型、网状模型和关系模型。 【分析】 1、数据模型的概念 数据模型是一组概念的组合,这些概念包括数据结构、数据操作和完整性约束条件。这称之为数据模型的要素。 a...

    根据数据结构的不同,常见的数据模型有层次模型、网状模型和关系模型。
    1、数据模型的概念
    数据模型是一组概念的组合,这些概念包括数据结构、数据操作和完整性约束条件。这称之为数据模型的三要素。
    a、数据结构:指数据模型中数据对象的存储形式;
    b、数据操作:指数据库中允许对数据执行的操作集合;
    c、完整性约束条件:指一组数据完整性规则的集合,用于保证数据库中数据的正确和有效。

    2、数据模型的介绍
    根据数据结构的不同,常见的数据模型有:层次模型、网状模型关系模型
    A、层次模型
    指实体间使用树形结构进行描述的数据模型
    满足以下条件:
    (1)在结构中有且只有一个结点没有双亲结点,即根结点。
    (2)除根结点以外的结点有且只有一个双亲结点。

    B、网状模型
    (1)有一个以上的结点没有双亲。
    (2)结点可以有多余一个的双亲。

    C、关系模型
    指数据逻辑结构为二维表的数据模型。是现代数据库应用最为广泛的数据模型。

    展开全文
  • 众所周知,BIM数据有...首先确认模型的复杂度,这里方式去判断:首先可以用三角面数去判断模型是否复杂对象,然后可以通过观察确认数据属于哪种类型(是建筑,还是条状公路),然后可以确认下模型的纹理是

    众所周知,BIM数据有数据量精细,细节表现好等优点,但是BIM数据加到GIS系统中,就会存在很多性能问题。这篇文章记录下遇到过的一些问题。

    BIM+GIS遇到的性能问题可以分为几类,最常见的就是在webgl端加载的时候显示出加载模型缓慢,卡顿等问题。需要解决这类问题,我一般会按照以下步骤进行数据检查和优化:

    一:确认数据内容

    首先确认模型的复杂度,这里有几种方式去判断:首先可以用三角面数去判断模型是否有复杂对象,然后可以通过观察确认数据属于哪种类型(是建筑,还是条状的公路),然后可以确认下模型的纹理是否有大纹理存在(纹理图片大于1024*1024即可作为大纹理)。

    二:筛选

    1. 我们可以iDesktop去统计出每个对象的三角面数,然后通过属性表的排序去检查出三角面数特别大的对象,单独对这类数据进行优化。
    2. 如果是条状的数据,一个对象跨度长达几百米甚至几千米的,也需要挑选出来
    3. 挑选出业主单位不太关心的数据,和主要关注数据,了解数据优化的重点方向

    三:优化

    • 针对三角面比较大的对象,可以利用桌面里的三角网简化工具,但是这个工具简化率设置的不好的话容易使模型发生形变,推荐使用★☆☆☆☆

    • 针对条状的数据,可以利用桌面里的模型切分工具,合理控制模型长度,设置切分参数,推荐使用★★★★☆

    • 针对重点数据和非重点数据,可以利用桌面里的模型拆分工具,对复杂对象进行拆分;还可以利用桌面里的子对象编辑工具,对子对象进行简化和删除等操作,推荐使用★★★★☆

    • 数据优化最重要的一点是切缓存,缓存的参数选择对缓存的最终加载速度也是有很大的影像的。

            ①剖分方式:BIM模型颗粒度较小的时候选择八叉树,其余选择四叉树;

            ②瓦片边长:瓦片边长不宜过大,需要根据实际情况去调整,根据生成的S3M数据来进行调整,如果单个S3M文件过大(超过3-5M),这个时候就需要去减少瓦片变长了

            ③过滤阈值:BIM中过滤阈值可以设置的稍微大点,这样可以过滤掉一些细小部件的显示来优化显示内容

            ④lod层数:lod层一般默认的3层即可,如果有特殊需求,可以修改层数和每层的简化率(简化率100表示全部简化)

            ⑤保存工作空间:保存工作空间的时候可以设置每个图层的最大最小可见距离,用来控制数据的显示内容

    • 数据的优化,“冤有头,债有主”,源头可以从建模开始就避免掉一些问题,比如在建模的时候就可以按照关注度对数据选择合理的建模方法,过度复杂的对象建模耗时长,占用性能高,但是业主并不关注,所以建模时有几点需要注意下:

             ①避免建复杂对象,个别确实需要的,可以对模型进行拆分建模,或者根据业主定义的建模细粒度来建模

             ②避免建超长对象,可以对这类进行合理分段

             ③避免对象有过多子对象,合理对模型进行合并和拆分

             ④圆柱的对象,圆形的对象可以利用六边形来代替

             ⑤避免使用大纹理贴图

     

             

     

     

    展开全文
  • 107.spring boot 配置文件有哪类型?它们有什么区别? 108.spring boot 有哪些方式可以实现热部署? 109.jpa 和 hibernate 有什么区别? 110.什么是 spring cloud? 111.spring cloud 断路器作用是什么? 112....
  • C#数据结构

    2013-12-10 11:49:54
    储在计算机中的数据进行操作,可以哪些操作,如何实现这些操作以及如何对 同一问题的不同操作方法进行评价;四是必须理解每数据结构的性能特征,以 便选择一个适合于某个特定问题的数据结构。这些问题就是数据...
  • 不同编译器给出不同结果, 有的为 3, 有的为 4, 哪个是正确? o 4.4 这是个巧妙表达式: a ^= b ^= a ^= b 它不需要临时变量就可以交换 a 和 b 值。 o 4.5 我可否用括号来强制执行我所需要计算顺序? o ...
  • 引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...
  • 线性回归是常见的机器学习模型,也是很多人学习机器学习的第一个模型,并且因为线性回归的数学原理比较简单,可以帮助初学者把机器学习和数学原理比较清晰的结合理解。 1.1 平面拟合 假如一个银行贷款的任务,...

    线性回归和逻辑回归作为机器学习领域的基础模型,简单却也经典。机器学习领域一般有两种任务:分类和回归。分类通常是判断未知样本属于哪一类,例如0和1,好和坏,大和小等等,而回归不仅仅是判断是是什么,还要判断是多少的任务。本文作为机器学习领域基础模型的介绍,除了对线性回归和逻辑回归自身做介绍外,还会对一些处理方法和评价指标等知识做介绍。

    一、线性回归

    线性回归是常见的机器学习模型,也是很多人学习机器学习的第一个模型,并且因为线性回归的数学原理比较简单,可以帮助初学者把机器学习和数学原理比较清晰的结合理解。

    1.1 平面拟合

    假如有一个银行贷款的任务,根据贷款人的工资和年龄来决定贷款金额。现在我们有一批银行实际的贷款数据,需要建立一个多元线性回归模型来判断贷款人的实际贷款金额。

    由上表我们可以知道,数据有两个特征:工资和年龄。标签是贷款金额,工资和年龄都会影响终端贷款结果,那么他们的各自影响有多大呢?转化为一个数学问题就是:我们有两个自变量X1、X2(年龄、工资),因变量Y(贷款金额),我们需要找到一个最合适的平面来拟合我们的数据。

    平面拟合

    由此,我们可以列出一个参数方程:

    \theta _{1}是年龄的参数,\theta _{2}是工资的参数,\theta _{0}是偏执项(注意上式的x_{0}是1,为了转化为矩阵问题,方便计算)。现在我们的任务变成了求解这三个参数的问题。三个参数,只需给出三组(X,Y)数据即可求出,但是现在我们拥有远多于此的数据,可能是三千组或者三万组、三十万组,现在该怎么计算呢?可以发现我们的任务变成了:找出一个拟合平面,使得所有样本的自变量通过该平面的映射值与实际值之间的误差(损失)最小。是不是很熟悉这句话,还记得曾经学习过的最小二乘法吗?那么最小二乘法能不能解决我们的问题呢?

    1.2 似然函数

    前面我们说了,虽然我们可以找出一个拟合平面建立模型,但是这个拟合平面求出的值和实际值之间肯定是有差异的(误差),使用 \varepsilon 来表示这个差异值。则对于每一个样本:

    同时,我们认为误差 \varepsilon ^{(i)} 是独立且都服从均值为0,方差为\theta ^{2}的高斯分布。什么意思呢?

    • 独立:任意两个样本之间都是没有关系的,即A的贷款金额和B的贷款金额没有任何关系。
    • 同分布:任意两个样本都根据同一套标准得出,即所有贷款数据都来自同一家银行的同一套判断标准。
    • 高斯分布:前面两点比较容易理解,之所以说误差满足高斯分布,是因为根据我们的模型预测出的结果,可能都会存在偏差,有的会比实际值大,有的会比实际值小,但是绝大多数情况,这个偏差都是非常小的,预测结果和实际值偏差比较大的情况会比较少,也就是说,我们首先假设我们的模型是有效的。
    高斯分布

    由于误差服从标准高斯分布,则:

    将(2)式代入(3)中:

    假设我们的样本个数是m,那么则m个样本同时发生的概率就是:

    根据最大似然估计,已经得到样本发生的概率最大,则(5)式就是我们的似然函数,采用对数化简:

    为了使得最大似然函数最大,因为(6)式的前半部分为正,则我们的任务就变成了使(6)式的后半部分最小即可,那么我们最终需要求解的目标函数就是:

    其中:

    这里注意区分X_{1}X_{2},...,X_{i}表示我们的样本特征,也就是我们上文说到的m个样本,而X_{i}中的1x_{1}x_{2}表示我们的实际特征(年龄、工资),在实际任务中,特征数量可能会远多于两个,此处只列出两个是为了结合前文的例子,易于理解。

    对(7)式求偏导:

    求极小值点,令偏导为0:

    1.3 梯度下降

    在1.2中我们已经介绍了目标函数和\theta的解,但是在实际中我们几乎不会直接去求解模型参数,除了直接计算复杂和计算成本高之外,很多模型并不像线性回归一样可以直接求解的。

    我们的任务是在已知样本X的基础上,寻找一个最优解\theta使得目标函数的值最小,我们在计算过程中往往不会把所有样本数据一次性全部进行计算(实际任务中样本数据一般都比较大,对计算机硬件要求较高),而是分批迭代计算,例如每次拿一万个样本参与计算。对于\theta,我们也不会直接根据样本X直接计算,我们采用不断调整\theta的值,使得目标函数越来越小,也即整个计算过程是一个不断迭代的过程。当然,对于\theta的调整也并不是盲目的,沿着坡度(偏导)的方向调整参数效率是最高的,每次调整的幅度(学习率)也不能太大,因为太大很可能会跳过全局最小值点,导致“震荡现象”。沿着坡度的方向不断调整参数,这也就是我们常说的梯度下降算法。

    根据(7)式的目标函数(分母的m表示求平均损失):

     

    梯度下降可以按照三种不同的方法进行:

    1. 批量(全局)梯度下降,即每次计算都把全部样本参与计算,好处是容易得到最优解,缺点是前文叙述的计算成本高、速度慢。
    2. 随机梯度下降,每次拿一个样本参与计算,好处是迭代速度快,但是因为每次只考虑了一个样本,会导致模型收敛较慢,并且每次迭代有很多时间消耗在了数据更新上。
    3. 小批量梯度下降(batch),即每次只拿一部分样本参与计算,兼顾计算成本和收敛速度。例如,每次拿10个样本参与计算(\alpha表示学习率):

    1.4 学习率

    在1.3中我们已经提到了学习率的概念。顾名思义,学习率参数是用来控制学习参数调节幅度的,学习率太大,容易导致“震荡现象”,甚至不收敛,学习率太小又会导致模型训练速度变慢。当然,对于现在的很多服务器算力来说,这个参数并不是很重要,即使设置的很小,也能在可接受的时间范围内收敛。学习率在深度学习模型训练中更加重要,因为刚开始的模型损失一般都比较大,学习率可以大一点,等到损失降下来以后,学习率可以设置的小一点,因此,在深度学习中也经常使用学习率衰减的方法来训练模型。

    二、逻辑回归

    如果说线性回归只是为了让我们更好的理解机器学习中的数学知识,在实际中应用较少的话,那么逻辑回归在实际应用中就很普遍了,同时逻辑回归也是一个非常经典的分类模型。机器学习虽然有很多算法,但是在实际业务中,我们往往也会首先使用逻辑回归测试效果,作为一个baseline,在效果差不多的情况下,也会优先选择逻辑回归。

    2.1 sigmod函数

    逻辑回归的核心是sigmod函数,sigmod函数定义如下:

    sigmod函数的输入可以为任意实数值,值域(0,1),且是在(0,0.5)坐标点中心对称的。sigmod函数的(0,1)值域可以很好的转为概率定义,因此sigmod函数包括其升级版softmax在很多模型中的最后一步用的非常广泛,在(0,0.5)坐标点的中心对称特性,可以很好的作为二分类模型。

    sigmod函数的另一个优点就是求导非常方便,g(z)^{'} = g(z)(1-g(z)),这在进行梯度下降的时候非常有用。

    2.2 梯度下降

    sigmod函数的(0,1)值域可以很好的转为概率定义,把上文介绍的线性回归模型输入sigmod函数。

    对于二分类任务:

    m个样本的似然函数和对说似然分别为:

    利用 J(\theta ) = -\frac{1}{m}l(\theta ) 将最大值问题转换为最小值问题,并对 \theta 求偏导:

    至此,我们已经了解了线性回归和逻辑回归的数学原理和梯度下降参数更新过程。

    三、实践

    前面我们已经学习了线性回归和逻辑回归的原理,现在我们将使用逻辑回归模型来完成一个信用卡分类模型。

    3.1 数据分析

    现在有一批信用卡数据(已经是特征处理后的脱敏数据)如下,共有29个特征,Class表示类别,现在需要构建一个分类模型。

    在开始建模之前,我们需要对原始数据做一些基本分析,主要包括数据量分析、缺失值统计处理、样本分布、特征分布等。

    import pandas as pd
    import matplotlib.pyplot as plt
    import numpy as np
    from sklearn.preprocessing import StandardScaler
    from sklearn.model_selection import train_test_split
    from sklearn.linear_model import LogisticRegression
    from sklearn.model_selection import KFold, cross_val_score
    from sklearn.metrics import confusion_matrix,recall_score,classification_report 
    
    %matplotlib inline
    
    data = pd.read_csv("creditcard.csv")
    print(data.head())
    print(data.shape)
    
    data['Class'].value_counts()

    3.2 归一化和下采样

    分析可以发现,本例中的原始数据没有缺失数据,共有28万条记录,但是正负样本数据比例严重不均衡,另外,Amount特征的数值相对于其他特征数值偏大。因此,我们在建模之前需要先处理这两个问题,数据不均衡一直是机器学习中一个比较热点的问题,后面有时间会单独开一篇文章讲这个问题,比较常见的处理方式就是下采样和上采样。在计算机视觉领域,针对图像的处理,往往可以通过图像增强的方法扩充数据集,但在机器学习实际工作中,下采样的使用率要高得多,这主要是因为针对业务问题的数据集增强往往很难。其次,对于Amount数值较大的问题,可以采用归一化处理,归一化也有很多方法,常见的有min-max、正则化等,可以参考这篇文章内容。本文选择正则化的方法对Amount进行处理。

    ##正则化处理
    data['normAmount'] = StandardScaler().fit_transform(data['Amount'].values.reshape(-1, 1)).reshape(-1)
    data = data.drop(['Time','Amount'],axis=1)
    print(data.head())
    
    
    ##数据下采样
    fraud_indices = np.array(data[data.Class == 1].index)
    normal_indices = data[data.Class == 0].index
    
    number_records_fraud = len(fraud_indices)
    random_normal_indices = np.random.choice(normal_indices, number_records_fraud, replace = False)
    random_normal_indices = np.array(random_normal_indices)
    
    under_sample_indices = np.concatenate([fraud_indices,random_normal_indices])
    under_sample_data = data.iloc[under_sample_indices,:]
    
    print(under_sample_data.shape)  ##(984, 31)
    
    X_undersample = under_sample_data.iloc[:, under_sample_data.columns != 'Class']
    y_undersample = under_sample_data.iloc[:, under_sample_data.columns == 'Class']

    划分训练集、验证集、测试集。

    X_train_undersample, X_test_undersample, y_train_undersample, y_test_undersample = train_test_split(X_undersample
                                                                                                       ,y_undersample
                                                                                                       ,test_size = 0.3
                                                                                                       ,random_state = 0)
    print("")
    print("Number transactions train dataset: ", len(X_train_undersample))
    print("Number transactions test dataset: ", len(X_test_undersample))
    print("Total number of transactions: ", len(X_train_undersample)+len(X_test_undersample))
    
    #Number transactions train dataset:  688
    #Number transactions test dataset:  296
    #Total number of transactions:  984

    3.3 评价指标

    在机器学习中常见的评价指标有准确率、召回率、F1等,主要用来衡量一个模型的效果好坏。通常以关注的类为正类,其他类为负类。分类器在测试数据集上预测要么正确要么不正确。4种情况出现的总数分别记作,也就是混淆矩阵:

    tp--将正类预测为正类(true positive)

    fn--将正类预测为负类(false negative)

    fp--将负类预测为正类(false positive)

    tn--将负类预测为负类(true negative)

    用医院诊断病人是否有病作为示例,“有病”是被关注的正类,“没病”是负类,混淆矩阵如下。

      预测为有病 预测为没病
    病人         TP         FN

     正常人

            FP         TN

    不同指标的计算方法为:

    精确度:precision = TP / (TP + FP)

    召回率:recall = TP / (TP + FN)

    准确率:accuracy = (TP + TN) / (TP + FP + TN + FN)

    错误率:error rate =  (FN + FP) / (TP + FP + TN + FN)

    F1值:F1 = 2*P*R/(P+R),其中P和R分别为 precision 和 recall

    \frac{2}{F_{1}} =\frac{1}{P}+\frac{1}{R} \Rightarrow F_{1}=\frac{2PR}{P+R}

    F1值是精确度和召回率的调和平均值。 这是因为通常情况下,precision高的话,recall就会低;precision低的时候,recall往往比较高。为了权衡这种关系(tradeoff),所以有了F1值。

    (1)混淆矩阵

    from sklearn.metrics import confusion_matrix
    
    y_true = [2, 0, 2, 2, 0, 1]
    y_pred = [0, 0, 2, 2, 0, 2]
    confusion_matrix(y_true, y_pred)
    
    array([[2, 0, 0],
           [0, 0, 1],
           [1, 0, 2]])

    (2)准确率计算

    from sklearn.metrics import accuracy_score
    
    y_pred = [0, 2, 1, 3]
    y_true = [0, 1, 2, 3]
    accuracy_score(y_true, y_pred)   ##计算准确率
    0.5
    accuracy_score(y_true, y_pred, normalize=False)   ##结果正确的个数
    2

    (3)精确度计算

    对于二分类模型来说,精确度是很容易计算的,只是主要介绍一些多分类的情况。sklearn中精确度的计算方法如下:

    from sklearn.metrics import precision_score
    
    precision_score(y_true, y_pred, labels=None, pos_label=1, average='binary', sample_weight=None)

    可以看到 average 参数的默认值是 'binary',也就是二进制的情况,对于多分类的情况必须修改这个参数,参数意义如下:

    1.  average = 'macro',计算每个类别的 precision_score,然后求平均值。
    2.  average='micro',计算总体的 precision_score,相当于accuracy_score。
    3.  average = None,分别计算每个类别的 precision_score,计算结果是每个类别的计算值。
    4. average='weighted',按照y_true中各类别所在比例进行加权计算。
    from sklearn.metrics import precision_score
    
    y_pred = [0, 2, 1, 2, 5, 0]
    y_true = [0, 2, 3, 4, 6, 0]
    print(accuracy_score(y_true, y_pred))  # 3/6 = 0.5
    print(precision_score(y_true,y_pred,average='micro')) # 3/6 = 0.5
    print(precision_score(y_true,y_pred,average='macro')) # (1+1/2) / 7 = 0.21428571428571427
    print(precision_score(y_true,y_pred,average='weighted')) # 1*1/3 + 1/2 * 1/6 = 0.4166666666666667
    print(precision_score(y_true,y_pred,average=None)) # [1.  0.  0.5 0.  0.  0.  0. ]

    其他多分类指标的计算方法和 precision 大同小异。

    3.4 k折交叉验证

    机器学习建模过程中,经常会把数据集分成三类,即:训练集、验证集、测试集,但是在划分过程中,可能存在随机因素导致数据集分布不均衡,例如某一类的样本都分在了验证集,那么训练得到的模型参数就不会理想。因此,为了排除偶然因素,建立更好的模型,出现了k折交叉验证的方法。

    k折交叉验证与案例也很简单,原来的处理方法是把大量数据作为训练集(例如4/5),少量数据作为验证集验证模型(例如1/5),k折交叉验证处理的时候不同点在于,不再仅仅把固定的一部分作为验证集,而是依次把每个1/5部分都用来作为验证集建模,前面提到的1/5就是5折交叉验证,即每次拿出不同的1/5部分作为验证集,其余4/5作为训练集训练模型,得到5个模型,根据这5个模型的综合效果选出最好的参数。

    3.5 LogisticRegression

    LogisticRegression是sklearn中逻辑回归的工具类,主要参数如下:

    def __init__(self, penalty='l2', dual=False, tol=1e-4, C=1.0,
                 fit_intercept=True, intercept_scaling=1, class_weight=None,
                 random_state=None, solver='warn', max_iter=100,
                 multi_class='warn', verbose=0, warm_start=False, n_jobs=None,
                 l1_ratio=None):
    • penalty:正则化惩罚项,'l1', 'l2', 'elasticnet' or 'none',关于L1和L2正则化惩罚项的实现区别是一个是平方,一个是绝对值(模),关于l1、l2以及solver参数的更多内容可以阅读参考资料中的附录文章。
    • C:正则化乘法系数的倒数,值越小,惩罚越强,也是主要调节的参数
    • solver:求解方法(优化器),可选值为'newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'。其中'newton-cg','sag' and 'lbfgs'仅支持l2惩罚项,因为l1正则化惩罚项的损失函数不是连续可导的。

    3.6 构建模型

    在完成数据处理以后就可以开始建模了,在模型训练过程中我们采用5折交叉验证和召回率来查找合适的参数。

    def printing_Kfold_scores(x_train_data,y_train_data):
        fold = KFold(5,shuffle=False) 
    
        c_param_range = [0.01,0.1,1,10,100]
        results_table = pd.DataFrame(index = range(len(c_param_range),2), columns = ['C_parameter','Mean recall score'])
        results_table['C_parameter'] = c_param_range
    
        j = 0
        for c_param in c_param_range:
            print('-------------------------------------------')
            print('C parameter: ', c_param)
            print('-------------------------------------------')
            print('')
            recall_accs = []
    
            for iteration, indices in enumerate(fold.split(y_test_undersample),start=1):
                lr = LogisticRegression(C = c_param, penalty = 'l1')
                lr.fit(x_train_data.iloc[indices[0],:],y_train_data.iloc[indices[0],:].values.ravel())
                y_pred_undersample = lr.predict(x_train_data.iloc[indices[1],:].values)
                recall_acc = recall_score(y_train_data.iloc[indices[1],:].values,y_pred_undersample)
                recall_accs.append(recall_acc)
                print('Iteration ', iteration,': recall score = ', recall_acc)
    
            results_table.loc[j,'Mean recall score'] = np.mean(recall_accs)
            j += 1
            print('')
            print('Mean recall score ', np.mean(recall_accs))
            print('')
    
        print(results_table)
        results_table['Mean recall score'] = results_table['Mean recall score'].map(lambda x:float(x))
    
        best_c = results_table.iloc[[results_table['Mean recall score'].idxmax()]]['C_parameter'].values[0]
        print('*********************************************************************************')
        print('Best model to choose from cross validation is with C parameter = ', best_c)
        print('*********************************************************************************')
        
        return best_c
    
    best_c = printing_Kfold_scores(X_train_undersample,y_train_undersample)

    3.7 预测

    在3.5节中我们已经找到了最合适的模型参数,此时就可以把全量数据作为训练集训练模型,并在测试集上分析效果。

    import itertools
    
    ##绘制混淆矩阵
    def plot_confusion_matrix(cm, classes,
                              title='Confusion matrix',
                              cmap=plt.cm.Blues):
        """
        This function prints and plots the confusion matrix.
        """
        plt.imshow(cm, interpolation='nearest', cmap=cmap)
        plt.title(title)
        plt.colorbar()
        tick_marks = np.arange(len(classes))
        plt.xticks(tick_marks, classes, rotation=0)
        plt.yticks(tick_marks, classes)
    
        thresh = cm.max() / 2.
        for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
            plt.text(j, i, cm[i, j],
                     horizontalalignment="center",
                     color="white" if cm[i, j] > thresh else "black")
    
        plt.tight_layout()
        plt.ylabel('True label')
        plt.xlabel('Predicted label')
    
    
    lr = LogisticRegression(C = best_c, penalty = 'l1')
    lr.fit(X_train_undersample,y_train_undersample.values.ravel())
    y_pred_undersample = lr.predict(X_test_undersample.values)
    
    # Compute confusion matrix
    cnf_matrix = confusion_matrix(y_test_undersample,y_pred_undersample)
    np.set_printoptions(precision=2)
    
    print("Recall metric in the testing dataset: ", cnf_matrix[1,1]/(cnf_matrix[1,0]+cnf_matrix[1,1]))
    
    # Plot non-normalized confusion matrix
    class_names = [0,1]
    plt.figure()
    plot_confusion_matrix(cnf_matrix, classes=class_names, title='Confusion matrix')
    plt.show()

    三、参考资料

    https://www.jianshu.com/p/bbdeb356057e

     

    展开全文
  • 8、操作系统IO模型有了解吗 9、linux会用吗(不会) 10、Shell命令会吗(不会) 11、OSI七层模型说一下 12、TCP/UDP在一层,有什么区别 13、说一下TCP次握手 14、了解过服务端半连接队列吗 15、握手过程中...

    渣本,正准备找工作,抽空整理了百度三面面试经验,希望可以帮助到大家

    百度APP一面

    1、自我介绍

    2、字符串匹配(有几种不同方法)

    3、写一个单例模式(DCL)

    4、进程和线程的区别

    5、进程间通信

    6、死锁了解吗

    7、进程有哪些状态

    8、操作系统的IO模型有了解吗

    9、linux会用吗(不会)

    10、Shell命令会吗(不会)

    11、OSI七层模型说一下

    12、TCP/UDP在哪一层,有什么区别

    13、说一下TCP三次握手

    14、了解过服务端的半连接队列吗

    15、握手的过程中可以携带数据吗

    16、常见的状态码了解吗

    17、有自己去搭网站吗(没有)

    18、https有了解吗

    19、有用过数据库吗

    20、有了解过数据库的引擎吗

    21、还知道其他的数据库引擎吗

    22、事务有了解吗

    23、事物的隔离级别了解吗

    24、有研究过innoDB的底层原理吗

    25、说一下抽象类和接口的区别

    26、说一下JVM的内存划分,JVM的知识是做项目用到的还是专门去看的

    27、有自己做过JVM的参数配置吗

    28、再说一下对年轻代和老年代的理解

    29、触发FullGC的条件

    30、介绍一下垃圾回收的算法和垃圾回收器

    31、介绍一下G1回收器的思想和应用场景

    32、类加载原理有了解吗,类的加载过程

    33、双亲委派机制有了解吗

    34、有了解安卓上的热修复技术吗

    35、能说一下JAVA线程池的实现原理吗

    36、ThreadLocal有了解吗

    37、Android学习了有多久,是自学的吗,之前学过什么语言

    38、Activity的生命周期

    39、Android的数据持久化方式

    40、用过哪些布局(还没说完,面试官有别的事就提前结束了 )

    百度APP二面

    1、自我介绍

    2、抓着项目问

    3、有用过安卓端的数据库吗

    4、介绍一下项目的功能模块

    5、并发的问题如何解决

    6、JAVA里可以用什么数据结构解决生产者消费者模型

    7、说一下常见的排序算法及其复杂度

    8、LRU算法,大体思路,在安卓中有哪些使用

    9、说一下final

    10、如何删除数组的偶数项,口述思路

    11、具体说一下进程与线程的区别

    12、安卓里面的进程和线程有什么区别

    13、Activity间跳转的生命周期

    14、Activity销毁前保存数据应该在哪个生命周期中进行

    15、startActivity时在Intent中加一个newTask的flag会有什么不同

    16、说一下Activity的启动模式

    17、广播接收器的onReceive中可以做耗时的操作

    18、ContentProvider有用过吗,说一说它的实现过程

    19、ContentProvider如何有针对性的提供数据(安全校验)

    20、有没有自己写过自定义的控件

    21、如何给按钮加圆角

    22、有了解过gradle编译过程吗?(不知道)

    23、开发过程中代码库放在哪?

    24、有用过git吗

    25、说一下touch事件在控件里面的传递过程

    (换人,女面试官,问的我都好难答T_T)

    26、项目中如何组织自己的代码

    27、项目代码规模,代码如何分层设计

    28、如果项目后期要拓展功能,有考虑过如何对代码进行分层设计

    29、APP打包完成内部有哪些内容有了解过吗

    30、打包流程有了解吗?

    31、有了解过进程保活吗

    32、系统按什么规则去回收在后台运行的APP

    33、有了解View的绘制过程吗

    (完全没有反问的机会,最后抢问了一下大概什么时间会有通知,告诉我具体得看部门技术评审,然后反问我是不是很急。。。。)

    百度三面

    1、刚拿到你的简历,先做个自我介绍;

    2、项目相关,很多细节

    3、平时自己是怎么自学的(这就是全部的学习手段吗?)

    4、你是怎么找到相关的资料的

    5、平时用百度还是谷歌

    6、技术问题不是查谷歌更好一些吗?

    7、近一年,在学习和项目上比较困难的事情,怎么解决的,结果怎么样

    8、有和其他人合作项目的经历吗

    9、说一下你印象比较深,时间比较长,与他人合作的项目,你在其中负责的部分,成效如何,这个项目里最困难的部分,你如何解决的

    10、在学校期间压力最大的时间,遇到了什么事情,你是怎么解决的

    11、平时有什么兴趣爱好

    12、简历是主动投的,还是百度自己找过去的,为什么要投百度简历,你能为百度带来什么

    13、对城市有什么倾向吗

    14、有收到其他offer吗,或者有面过其他家吗

    15、如果两家公司都给了offer你会怎么选择,为什么这么选择

    反问

    1、公司目前的技术栈(百度APP极速版,双端开发维护)

    2、职业发展方面有什么建议(应届生不要太看重钱,期望不要太高,不要浮躁)

    3、后面还有流程吗(可能会有HR面)

    4、有啥评价(端上经验是张白纸,可能连门都没入<恐怖事件>)

    不用等通知我就已经知道结果了,一首凉凉送给自己

    文末附上大厂学长给我的资料,内容包含:Android学习PDF+架构视频+源码笔记高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 这几块的内容

    分享给大家,非常适合近期有面试和想在技术道路上继续精进的朋友。也是希望可以帮助到大家提升进阶

    如果你有需要的话,可以私信我【面试】我发给你

    如果你觉得自己学习效率低,缺乏正确的指导,可以加入资源丰富,学习氛围浓厚的技术圈一起学习交流吧

    展开全文
  • 4、需求分析类建模:功能模型、数据模型、行为模型。面向过程 和面向对象需分析过程中,类模型各包含哪些内容?--------------- 15 5、 掌握数据流图和用例图作法。 31 第四章系统设计 32 1、系统设计分为概要...
  • 需求模型的表现形式自然语言、半形式化(如图、表、结构化英语等)和形式化表示等三种。需求概念模型的要求包括实现独立性:不模拟数据的表示和内部组织等;需求模拟技术又分为企业模拟、功能需求模拟和非功能需求...
  • 4.2.0 IO模型有哪些,讲讲你理解nio ,他和bio,aio区别是啥,谈谈reactor模型。 4.2.1 反射原理,反射创建类实例的三种方式是什么。 4.2.2 反射中,Class.forName和ClassLoader区别 。 4.2.3 描述动态代理...
  • XX软件工程师笔试试题 注:1、请参考人员将答案写在答题纸上,勿将答案写在此卷上。 2、请参考人员将编号与...47、Flex与数据库连接的三种方式? 我答案: 自己编 ---------------------------------...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    9.2 对象的模型技术 .103 9.3 面向对象分析 .105 9.4 面向对象设计 .107 9.5 小 结 .110 第十章 类 .112 10.1 类 声 明 .112 10.2 类 成 员 .113 10.3 构造函数和析构函数 .119 10.4 小 ...
  • (50) 数据库概念设计过程中,视图设计一般有三种设计次序,以下各项中不对是(D) 注:P127,要牢记 A. 自顶向下 B. 由底向上 C. 由内向外 D. 由整体到局部 (51) 在计算机中,算法是指(C) A. 查询方法 B. 加工方法...
  • 在此Repo中,我们展示了如何用 PaddlePaddle来解决常见的机器学习任务,提供若干不同的易学易用的神经网络模型。PaddlePaddle用户可领取免费Tesla V100在线算力资源,高效训练模型,每日登陆即送12小时,连续五天...
  • C#微软培训资料

    2014-01-22 14:10:17
    9.2 对象的模型技术 .103 9.3 面向对象分析 .105 9.4 面向对象设计 .107 9.5 小 结 .110 第十章 类 .112 10.1 类 声 明 .112 10.2 类 成 员 .113 10.3 构造函数和析构函数 .119 10.4 小 ...
  • (40) 数据库管理系统常见的数据模型有层次模型、网状模型和______三种。 答:关系模型 (1) 下面叙述正确的是______。(C) A. 算法的执行效率与数据的存储结构无关 B. 算法的空间复杂度是指算法程序中指令(或语句)...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    分组机制,把各种各样的模型元素通过内在语义连在一起成为一个整体就叫做包 包关系 包--软件比赛作品 架构图--包图变形 任务4 UML动态建模机制 对象之间交互 状态图 交互图 活动图 四...
  • 2.5.4 半结构数据模型 30 第3章 Oracle DBAUNIX/Linux基础 31 3.1 UNIX和Linux操作系统概述 31 3.1.1 UNIX 31 3.1.2 Linux 32 3.1.3 中档系统 32 3.2 理解UNIX shell 33 3.3 访问UNIX系统 33 3.4...
  • JAVA面试题最全集

    2010-03-13 13:09:10
    除了使用new关键字创建对象意外,试列举另外三种以上创建实例方式? 37.classloader中,JDKAPI、Classpath中同web-inf中class加载方式什么区别? 38.列举三种以上垃圾回收算法,并比较其优缺点? 39....
  • asp.net知识库

    2015-06-18 08:45:45
    常见的 ASP.NET 2.0 转换问题和解决方案 Asp.Net2.0无刷新客户端回调 体验.net 2.0 的优雅(1) -- 异步WebService调用 ASP.NET 2.0页面框架的几点新功能 ASP.NET 2.0 中收集的小功能点 asp.net2.0中的webpart使用...
  • 52、 常见的Caching技术://ASP.NET Cache //数据库缓存 //通过静态变量缓存//Memory-Mapped Files 53、 授权包括://用户的权限//代码的执行权限 54、 在构思阶段,各种角色的职责是://根据质量目标提供反馈//...
  • ● 增强安全性:每个程序集还可以包含内置安全信息,这些信息可以准确地指出哪种类型用户或进程可以调用什么类哪些方法。这样就可以非常准确地控制用户部署程序集使用方式。 ● 对安装没有任何影响:...
  • java 面试题 总结

    2009-09-16 08:45:34
    引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始...
  • 16.6 决定采用哪种加密技术 670 16.7 小结 671 索引 672 译者序  Oracle Database 11g推出让关注Oracle人欣喜万分,不过也不免有些担心,因为此前还没有合适书系统而深入地介绍这个新版本。要想学习和...
  • 44. 创建线程池有哪方式? 17 45. 线程池都有哪些状态? 18 46. 线程池中 submit()和 execute()方法有什么区别? 18 49. 什么是死锁? 19 50. 怎么防止死锁? 19 51. ThreadLocal 是什么?有哪些使用场景? 20 ...
  • java面试宝典

    2013-02-28 16:04:01
    92、一般情况下,关系数据模型与对象模型之间哪些匹配关系(A,B,C) 21 93、以下关于SessionFactory说法哪些正确?(B,C) 21 94、元素一个cascade属性,如果希望Hibernate级联保存集合中对象,casecade属性...
  • 千方百计笔试题大全

    2011-11-30 21:58:33
    92、一般情况下,关系数据模型与对象模型之间哪些匹配关系(A,B,C) 21 93、以下关于SessionFactory说法哪些正确?(B,C) 21 94、元素一个cascade属性,如果希望Hibernate级联保存集合中对象,casecade属性...
  • 实战系列03:请避开Stream流式编程常见的坑 实战系列04:使用Java8 Optional类优雅解决空指针问题 数据结构和算法 学什么? 有些同学可能要问了:我学 Java 的必要学习算法吗?答案是:别无选择! 国内互联网...

空空如也

空空如也

1 2 3
收藏数 41
精华内容 16
关键字:

常见的数据模型有哪三种