精华内容
下载资源
问答
  • 做实验的重要性
    千次阅读
    2020-08-26 10:46:20

    08 网络节点重要性

    • 8.1网络节点重要性
    • 8.2节点重要性判别方法

    8.1网络节点重要性

    1. 度中心性
      D C ( i ) = k i n − 1 DC(i) =\frac{k_i}{n-1} DC(i)=n1ki
      n n n为网络的节点数目
      k i k_i ki为节点的度
      度中心性认为一一个节点的邻居数目越多,影响力就越大,这是网络中刻画节点重要性最简单的指标。1
      最简单的指标,例如Internet中的中枢节点。
    2. 介数中心性
      a)网络中所有节点对的最短路径中经过一个节点的最短路径数越多这个节点就越重要
      b)介数中心性刻画了节点对网络中沿最短路径传输的网络流的控制力
    3. 接近中心性
      ①通过计算节点与网络中其他所有节点的距离的平均值来消除特殊值的干扰。即利用信息在网络中的平均传播时长来确定节点的重要性。
      ②一个节点与网络中其他节点的平均距离越小,该节点的接近中心性就越大。2
    4. 特征向量中心性
      一个节点的重要性既取决于其邻居节点的数量(即该节点的度),也取决于每个邻居节点的重要性
      ◆x是矩阵A的特征值 c − 1 c^{-1} c1对应的特征向量
      ◆从传播的角度看,特征向量中心性适合于
      描述节点的长期影响力
      ◆在疾病传播、谣言I扩散中,一个节点的EC分值较大说明该节点距离传染源更近的可能性越大,是需要防范的关键节点
    5. 利用网络动力学识别重要节点
    • 针对特定的动力学过程
      用网络的鲁棒性和脆弱性
      • 网络中最大联通集团的节点数量3
      • 利用动力学识别重要节点(用传播动力学):网络中被感染的节点的数量(少或多)4

    8.2节点重要性判别方法

    • 方法分类5
    1. 基于节点近邻的方法
      1. 度中心性
        一个节点的邻居数越多,就越重要6
      2. 半局部中心性7
        节点j两步可达(二阶邻居)的节点数量
        T(j)示节点j的一阶邻居节点的集合
        其中N(w)是节点w一阶、二阶邻居的个数
      3. K-壳分解
        节点在网络中的位置也是至关重要的因素。
        1.删掉网络中度为Ks=l的点
        2.删掉新出现的Ks=1的点
        3.直到所剩网络中没有Ks=1的点
        取Ks=2 ,重复以上步骤8
      4. H-index
        对于网络中的一个节点v
        定义 F v ( k ) F_v(k) Fv(k)表示v由k个邻居的度大于k
        H i n d e x ( v ) = m a x k ( k ∣ F v ( k ) ) H_{index}(v)=max_k({k|F_v(k)}) Hindex(v)=maxk(kFv(k))
        即v最多有 H i n d e x ( v ) H_{index}(v) Hindex(v)个邻居的度大于 H i n d e x ( v ) H_{index}(v) Hindex(v)9
    2. 基于路径的方法
      1. 接近中心性10
        ①通过计算节点与网络中其他所有节点的距离的平均值来消除特殊值的干扰。即利用信息在网络中的平均传播时长来确定节点的重要性。
        ②一个节点与网络中其他节点的平均距离越小,该节点的接近中心性就越大。
      2. 介数中心性
        ①网络中所有节点对的最短路径中,经过一个节点的最短路径数越多这个节点就越重要。
        ②介数中心性刻画了节点对网络中沿最短路径传输的网络流的控制力
      3. 离心中心性11
        ①网络直径定义为网络G中所有节点的离心中心性中的最大值,网络半径定义为所有节点的离心中心性值中的最小值。
        ②网络的中心节点就是离心中心性值等于网络半径的节点,一个节点的离心中心性与网络半径越接近就越中心。
      4. 流介数中心性12
        如果选择最短路径来运输网络流,很多情况下反而会延长出行时间、降低出行效率
        网络中所有不重复的路径中, 经过一个节点的路径的比例越大,这个节点就越重要。其中, g s t i g^i_{st} gsti为网络中节点s与t之间的所有路径数(不包含回路) g s t g_{st} gst为节点对s与t之间经过i的路径数
      5. Katz中心性13
        Katz中心性认为短路径比长路径更加重要。它通过一个与路径长度相关的因子对不同长度的路径加权。一个与节点i相距有p步长的节点,对i的中心性的贡献为 s v s^v sv
      6. 连通介数中心性14
        考虑节点对之间的所有路径,赋予较长的路径较小的权值
        定义节点对(p,q)之间的连通度 G p q G_{pq} Gpq
        基于连通度的概念,可定义节点r的连通介数中心性。
    3. 基于特征向量的方法
      1. 特征向量中心性
        一个节点的重要性既取决于其邻居节点的数量(即该节点的度)也取决于每个邻居节点的重要性。
      2. PageRank中心性
        谷歌搜索弓|擎的核心算法,迭代算法。
        PageRank算法基于网页的链接结构给网页排序,它认为万维网中一个页面的重要性取决于指向它的其他页面的数量和质量,如果它被很多高质量页面指向,则这个页面的质量也高。15
      3. LeaderRank中心性
        对PageRank的一种修正。
        在现实中人们在内容丰富的热门J网页(出度大的节点).上浏览的时候选择使用地址栏跳转页面的概率要远小于浏览信息量少的枯燥网页(出度小的节点)
        参数c的选取往往需要实验获得, 并且在不同的应用背景下最优参数不具有普适性。
        在有向网络的随机游走过程中,通过添加一个背景节点以及该节点与网络中所有节点的双向边来代替PageRank算法中的跳转概率c,从而得到一一个无参数且形式上更加简单优美的算法。16
      4. Hits中心性
      • 权威值(authorities) +枢纽值(Hubs)17
        使用在二分网结构下,可以计算出一个节点的权威值
    4. 基于节点移除或收缩的方法
      节点的重要性往往体现在该节点被移除之后对网络的破坏性(或对特定功能的影响)18

    参考文献


    1. Bonacich P F . Factoring and Weighting Approaches to Status Scores and Clique Identification[J]. Journal of Mathematical Sociology, 1972, 2(1):113-120. ↩︎

    2. Linton, C, Freeman. Centrality in social networks conceptual clarification[J]. Social Networks, 1978. ↩︎

    3. lyer S, Killingback T, Sundaram B, et al. Attack robustness and centrality of
      complex networks. PLoS One, 2013, 8: e59613 ↩︎

    4. Lü L, Zhang Y C, Yeung C H, et al. Leaders in social networks, the delicious case[J]. PloS one, 2011, 6(6). ↩︎

    5. 任晓龙, 吕琳媛. 网络重要节点排序方法综述[J]. 科学通报, 2014(13):1175-1197. ↩︎

    6. Bonacich P F . Factoring and Weighting Approaches to Status Scores and Clique Identification[J]. Journal of Mathematical Sociology, 1972, 2(1):113-120. ↩︎

    7. Chen D, Lü L, Shang M S, et al. Identifying influential nodes in complex networks[J]. Physica a: Statistical mechanics and its applications, 2012, 391(4): 1777-1787. ↩︎

    8. Kitsak M, Gallos L K, Havlin S, et al. Identification of influential spreaders in complex networks[J]. Nature physics, 2010, 6(11): 888-893. ↩︎

    9. Hirsch J E.An index to quantify an individual’s scientific research output[J].PNAS, 2005,102(46):16569-16572. ↩︎

    10. Freeman L C. Centrality in social networks conceptual clarification[J]. Social networks, 1978, 1(3): 215-239. ↩︎

    11. Hage P, Harary F. Eccentricity and centrality in networks[J]. Social networks, 1995, 17(1): 57-63. ↩︎

    12. Freeman L C, Borgatti S P, White D R. Centrality in valued graphs: A measure of betweenness based on network flow[J]. Social networks, 1991, 13(2): 141-154. ↩︎

    13. Katz L. A new status index derived from sociometric analysis[J]. Psychometrika, 1953, 18(1): 39-43. ↩︎

    14. Estrada E, Hatano N. Communicability in complex networks[J]. Physical Review E, 2008, 77(3): 036111. ↩︎

    15. Brin S, Page L. The anatomy of a large-scale hypertextual web search engine[J]. 1998. ↩︎

    16. Lü L, Zhang Y C, Yeung C H, et al. Leaders in social networks, the delicious case[J]. PloS one, 2011, 6(6). ↩︎

    17. Kleinberg J M. Authoritative sources in a hyperlinked environment[J]. Journal of the ACM (JACM), 1999, 46(5): 604-632. ↩︎

    18. Restrepo J G, Ott E, Hunt B R. Characterizing the dynamical importance of network nodes and links[J]. Physical review letters, 2006, 97(9): 094102. ↩︎

    更多相关内容
  • XGBoost学习(六):输出特征重要性以及筛选特征

    万次阅读 多人点赞 2020-09-03 16:03:17
    XGBoost输出特征重要性以及筛选特征 1,梯度提升算法是如何计算特征重要性的? 使用梯度提升算法的好处是在提升树被创建后,可以相对直接地得到每个属性的重要性得分。一般来说,重要性分数,衡量了特征在模型中的...

    XGBoost学习(一):原理
    XGBoost学习(二):安装及介绍
    XGBoost学习(三):模型详解
    XGBoost学习(四):实战
    XGBoost学习(五):参数调优
    XGBoost学习(六):输出特征重要性以及筛选特征
    完整代码及其数据

    XGBoost输出特征重要性以及筛选特征

    1,梯度提升算法是如何计算特征重要性的?

    使用梯度提升算法的好处是在提升树被创建后,可以相对直接地得到每个属性的重要性得分。一般来说,重要性分数,衡量了特征在模型中的提升决策树构建中的价值。一个属性越多的被用来在模型中构建决策树,它的重要性就相对越高。

    属性重要性是通过对数据集中的每个属性进行计算,并进行排序得到。在单个决策树中通过每个属性分裂点改进性能度量的量来计算属性重要性。由节点负责加权和记录次数,也就是说一个属性对分裂点改进性能度量越大(越靠近根节点),权值越大;被越多提升树所选择,属性越重要。性能度量可以是选择分裂节点的Gini纯度,也可以是其他度量函数。

    最终将一个属性在所有提升树中的结果进行加权求和后然后平均,得到重要性得分。

    2,绘制特征重要性

    一个已训练的Xgboost模型能够自动计算特征重要性,这些重要性得分可以通过成员变量feature_importances_得到。可以通过如下命令打印:

    print(model.feature_importances_)
    

    我们可以直接在条形图上绘制这些分数,以便获得数据集中每个特征的相对重要性的直观显示,例如:

    # plot
    pyplot.bar(range(len(model.feature_importances_)), model.feature_importances_)
    pyplot.show()
    

    我们可以通过在the Pima Indians onset of diabetes 数据集上训练XGBoost模型来演示,并从计算的特征重要性中绘制条形图。

    # plot feature importance manually
    from numpy import loadtxt
    from xgboost import XGBClassifier
    from matplotlib import pyplot
    from sklearn.datasets import load_iris
    # load data
    dataset = load_iris()
    # split data into X and y
    X = dataset.data
    y = dataset.target
    # fit model no training data
    model = XGBClassifier()
    model.fit(X, y)
    # feature importance
    print(model.feature_importances_)
    # plot
    pyplot.bar(range(len(model.feature_importances_)), model.feature_importances_)
    pyplot.show()
    

    运行这个实例,首先输出特征重要性分数:
    [0.17941953 0.11345647 0.41556728 0.29155672]
    相对重要性条形图:
    在这里插入图片描述
      这种绘制的缺点在于,只显示了特征重要性而没有排序,可以在绘制之前对特征重要性得分进行排序。
      通过内建的绘制函数进行特征重要性得分排序后的绘制,这个函数就是plot_importance(),示例如下:

    # plot feature importance manually
    from numpy import loadtxt
    from xgboost import XGBClassifier
    from matplotlib import pyplot
    from sklearn.datasets import load_iris
    from xgboost import plot_importance
     
    # load data
    dataset = load_iris()
    # split data into X and y
    X = dataset.data
    y = dataset.target
    # fit model no training data
    model = XGBClassifier()
    model.fit(X, y)
    # feature importance
    print(model.feature_importances_)
    # plot feature importance
     
    plot_importance(model)
    pyplot.show()
    

    示例得到条形图:
    在这里插入图片描述

    根据其在输入数组的索引,特征被自动命名为f0~f3,在问题描述中手动的将这些索引映射到名称,我们可以看到,f2具有最高的重要性,f1具有最低的重要性。

    3,根据Xgboost特征重要性得分进行特征选择

    特征重要性得分,可以用于在scikit-learn中进行特征选择。通过SelectFromModel类实现,该类采用模型并将数据集转换为具有选定特征的子集。这个类可以采取预先训练的模型,例如在整个数据集上训练的模型。然后,它可以阈值来决定选择哪些特征。当在SelectFromModel实例上调用transform()方法时,该阈值被用于在训练集和测试集上一致性选择相同特征。

    在下面的示例中,我们首先在训练集上训练xgboost模型,然后在测试上评估。使用从训练数据集计算的特征重要性,然后,将模型封装在一个SelectFromModel实例中。我们使用这个来选择训练集上的特征,用所选择的特征子集训练模型,然后在相同的特征方案下对测试集进行评估。

    # select features using threshold
    selection = SelectFromModel(model, threshold=thresh, prefit=True)
    select_X_train = selection.transform(X_train)
    # train model
    selection_model = XGBClassifier()
    selection_model.fit(select_X_train, y_train)
    # eval model
    select_X_test = selection.transform(X_test)
    y_pred = selection_model.predict(select_X_test)
    

    我们可以通过测试多个阈值,来从特征重要性中选择特征。具体而言,每个输入变量的特征重要性,本质上允许我们通过重要性来测试每个特征子集。

    完整代码如下:

    # plot feature importance manually
    import numpy as np
    from xgboost import XGBClassifier
    from matplotlib import pyplot
    from sklearn.datasets import load_iris
    from xgboost import plot_importance
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score
    from sklearn.feature_selection import SelectFromModel
     
    # load data
    dataset = load_iris()
    # split data into X and y
    X = dataset.data
    y = dataset.target
     
    # split data into train and test sets
    X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.33,random_state=7)
     
    # fit model no training data
    model = XGBClassifier()
    model.fit(X_train, y_train)
    # feature importance
    print(model.feature_importances_)
     
    # make predictions for test data and evaluate
    y_pred = model.predict(X_test)
    predictions = [round(value) for value in y_pred]
    accuracy = accuracy_score(y_test,predictions)
    print("Accuracy:%.2f%%"%(accuracy*100.0))
     
    #fit model using each importance as a threshold
    thresholds = np.sort(model.feature_importances_)
    for thresh in thresholds:
        # select features using threshold
        selection = SelectFromModel(model,threshold=thresh,prefit=True )
        select_X_train = selection.transform(X_train)
        # train model
        selection_model = XGBClassifier()
        selection_model.fit(select_X_train, y_train)
        # eval model
        select_X_test = selection.transform(X_test)
        y_pred = selection_model.predict(select_X_test)
        predictions = [round(value) for value in y_pred]
        accuracy = accuracy_score(y_test,predictions)
        print("Thresh=%.3f, n=%d, Accuracy: %.2f%%" % (thresh, select_X_train.shape[1], accuracy * 100.0))
    

    运行示例,得到输出:
    [0.20993228 0.09029345 0.54176074 0.15801354]
    Accuracy:92.00%
    Thresh=0.090, n=4, Accuracy: 92.00%
    Thresh=0.158, n=3, Accuracy: 92.00%
    Thresh=0.210, n=2, Accuracy: 86.00%
    Thresh=0.542, n=1, Accuracy: 90.00%
    我们可以看到,模型的性能通常随着所选择的特征的数量减少,在这一问题上,可以对测试集准确率和模型复杂度做一个权衡,例如选择三个特征,接受准确率为92%,这可能是对这样一个小数据集的清洗,但是对于更大的数据集和使用交叉验证作为模型评估方案可能是更有用的策略。

    4,网格搜索

    代码1:

    from sklearn.model_selection import GridSearchCV
    tuned_parameters= [{'n_estimators':[100,200,500],
                      'max_depth':[3,5,7], ##range(3,10,2)
                      'learning_rate':[0.5, 1.0],
                      'subsample':[0.75,0.8,0.85,0.9]
                      }]
    tuned_parameters= [{'n_estimators':[100,200,500,1000]
                      }]
    clf = GridSearchCV(XGBClassifier(silent=0,nthread=4,learning_rate= 0.5,min_child_weight=1, max_depth=3,gamma=0,subsample=1,colsample_bytree=1,reg_lambda=1,seed=1000), param_grid=tuned_parameters,scoring='roc_auc',n_jobs=4,iid=False,cv=5) 
    clf.fit(X_train, y_train)
    ##clf.grid_scores_, clf.best_params_, clf.best_score_
    print(clf.best_params_)
    y_true, y_pred = y_test, clf.predict(X_test)
    print"Accuracy : %.4g" % metrics.accuracy_score(y_true, y_pred)
    y_proba=clf.predict_proba(X_test)[:,1]
    print "AUC Score (Train): %f" % metrics.roc_auc_score(y_true, y_proba)   
    

    代码2:

    from sklearn.model_selection import GridSearchCV
    parameters= [{'learning_rate':[0.01,0.1,0.3],'n_estimators':[1000,1200,1500,2000,2500]}]
    clf = GridSearchCV(XGBClassifier(
                 max_depth=3,
                 min_child_weight=1,
                 gamma=0.5,
                 subsample=0.6,
                 colsample_bytree=0.6,
                 objective= 'binary:logistic', #逻辑回归损失函数
                 scale_pos_weight=1,
                 reg_alpha=0,
                 reg_lambda=1,
                 seed=27
                ),
                param_grid=parameters,scoring='roc_auc') 
    clf.fit(X_train, y_train)
    print(clf.best_params_) 
    y_pre= clf.predict(X_test)
    y_pro= clf.predict_proba(X_test)[:,1]
    print "AUC Score : %f" % metrics.roc_auc_score(y_test, y_pro)
    print"Accuracy : %.4g" % metrics.accuracy_score(y_test, y_pre)
    

    输出特征重要性:

    import pandas as pd
    import matplotlib.pylab as plt
    feat_imp = pd.Series(clf.booster().get_fscore()).sort_values(ascending=False)
    feat_imp.plot(kind='bar', title='Feature Importances')
    plt.ylabel('Feature Importance Score')
    plt.show()
    

    补充:关于随机种子——random_state

    random_state是一个随机种子,是在任意带有随机性的类或者函数里作为参数来控制随机模式。random_state取某一个值的时候,也就确定了一种规则。
    random_state可以用于很多函数,比如训练集测试集的划分;构建决策树;构建随机森林

    1,划分训练集和测试集的类train_test_split

    随机数种子控制每次划分训练集和测试集的模式,其取值不变时划分得到的结果一模一样,其值改变时,划分得到的结果不同。若不设置此参数,则函数会自动选择一种随机模式,得到的结果也就不同。

    2,构建决策树的函数

    clf = tree.DecisionTreeClassifier(criterion="entropy",random_state=30,splitter="random")
    

    其取值不变时,用相同的训练集建树得到的结果一模一样,对测试集的预测结果也是一样的
    其取值改变时,得到的结果不同;
    若不设置此参数(即设置为None),则函数会自动选择一种随机模式,每次得到的结果也就不同,可能稍微有所波动。

    3,构建随机森林

    clf = RandomForestClassifier(random_state=0)
    

    其取值不变时,用相同的训练集建树得到的结果一模一样,对测试集的预测结果也是一样的
    其取值改变时,得到的结果不同;
    若不设置此参数(即设置为None),则函数会自动选择一种随机模式,每次得到的结果也就不同,可能稍微有所波动。

    4,总结

    在需要设置random_state的地方给其赋值,当多次运行此段代码得到完全一样的结果,别人运行代码也可以复现你的过程。若不设置此参数则会随机选择一个种子,执行结果也会因此不同。虽然可以对random_state进行调参,但是调参后再训练集上表现好的模型未必在陌生训练集上表现好,所以一般会随便选择一个random_state的值作为参数。
    对于那些本质上是随机的过程,我们有必要控制随机的状态,这样才能重复的展现相同的结果。如果对随机状态不加控制,那么实验的结果就无法固定,而是随机的显示。
    其实random_state 与 random seed作用是相同的,下面我们通过 random seed来学习一下 random_state:
    在这里插入图片描述
    第一段代码和第二段代码完全相同,在1~100中取10个随机数,都没有设置 random seed,它每次取的结果就不太,它的随机数种子与当前系统的时间有关。
    第三段代码和第四段代码设置了相同的 random seed(123),他们取的随机数就完全相同,你多运行几次也是这样。
    第五段代码设置了 random seed(456),但是与之前设置的不同,于是运行取随机数的结果也不同。

    展开全文
  • 粒子滤波与重要性采样

    万次阅读 多人点赞 2016-06-02 22:52:48
    现在我们明白了,粒子滤波的结构实际上是加了一层重要性采样的思想在里面的蒙特卡洛方法。 现在我们要解决的就是如何估计这个相似程度的问题。粒子滤波在这里了很牛逼的一件事。我们不知道这个东西原本的分布是...

    最近又复习粒子滤波,感觉实际代码和推导总是有那么一些差距那一理解,主要是好好的分布为什么一转就变成特征似然程度了。这个东西让我们理一遍

    之前理解粒子的思想可能是有一些问题的,对于一个未知分布来说的话,我们想要知道这个分布的期望,好,现在我们均匀的去撒粒子吧,其实蒙特卡洛方法来说,我们只要对大量的粒子求平均就可以知道我们想要分布的期望了。但是在粒子滤波的问题里面,我们偏偏对每一个粒子反馈的情报加上了一个权,这个权代表我们-是不是很信任这个分布。再看这个权的分布形式,实际上就是它和目标的相似程度。现在我们明白了,粒子滤波的结构实际上是加了一层重要性采样的思想在里面的蒙特卡洛方法。

    现在我们要解决的就是如何估计这个相似程度的问题。粒子滤波在这里做了很牛逼的一件事。我们不知道这个东西原本的分布是什么,,但是我们可以观察某一个特征啊,如果这个特征的分布能够代表原来的分布的话,我们是不是可以近似这样来理解!!!!!!!

    让我们一步一步理解这个思路:
    蒙特卡洛方法是什么,就是试验,用大量的样本去替代概率。
    比如说,我们想要知道一个骰子投出点数的期望,我们就不断去投这个骰子,把每一次的结果平均取来,就可以知道这个筛子的期望了。
    在这个过程之中,有一个非常重要的点:为什么我们通过简单的平均就能够推算出这个骰子的期望呢?原因在于每一次单独实验的概率分布都是符合骰子本来的概率分布的。对于蒙特卡洛方法来说,样本的分布和要求取期望的分布一致至关重要。

    蒙特卡洛方法应用的另一个常用的例子是使用计算面积。
    就是这个玩意:
    这里写图片描述
    我们用维基百科蒙特卡洛方法词条的这个图来说明。如果我想要知道这个四分之一圆的面积,一种方法当然是测量半径,然后用圆面积公式 4πr2 来算。但是假设我们回到古代,并不知道 π 的具体数值。就没有办法算圆的面积了么?这时候我们可以用蒙特卡洛方法解决,在一个矩形空间均匀撒下粒子,然后计算落在圆面积里面的粒子和撒下所有粒子的比值,这个比值刚好就是圆面积和这个矩形空间面积的比值。于是,圆的面积就可以被反推回来了。
    这个例子实际上是由一定误导性的,原因在于:这不是最朴素的蒙特卡洛方法!!为什么呢?试问:每一个粒子遵从的是什么分布?为了让求值正确,我们投放粒子的时候是在整个空间均匀分布的。但是,属于圆的部分在这个矩形空间并非是均匀分布的。换而言之,这两个分布,不一样啊,那还算什么蒙特卡洛方法呢。那么这套算法究竟是经历了什么,让它又歪打正着算出正确的结果了呢,这就是我们要重点讨论的问题:重要性采样。

    在此之前,我们还需要绕个圈子,好更好的引出我们的问题。蒙特卡洛方法其实核心就在于解决一个分布的期望问题,而且,这个分布的概率分布还他妈必须是已知的!(或者你能够确信我们的样本一定一定是和要求期望的分布时一致的)
    比如,一个变量 x 的概率分布是p(x),我们要求它的期望怎么求?按照定义

    E(x)=xp(x)dx

    很好,现在我告诉你,这个 p(x) 形式巨复杂巨难算,臣妾根本积不出来(在高维的情况下尤甚)。那好,我就们不得不祭出蒙特卡洛了,蒙特卡洛告诉你,想知道期望,按照这个分布得到一些样本,平均就好了嘛。问题又来了,我们该怎么按照这个分布生成样本呢。
    比如,我们想要按照正态分布生成一些样本,继而通过这些样本获取它的期望。但是,就计算机的角度来说,我们只能够得到均匀分布的随机数如何从均匀分布的随机数得到高斯分布的随机数呢?概率累计!

    这里我们使用:http://blog.csdn.net/tudouniurou/article/details/6277526 的一个例子
    例如我想按照标准正态分布N(0,1)取10个随机数,那么我首先在[0,1]上按照均匀分布取10个点

    0.4505 0.0838 0.2290 0.9133 0.1524 0.8258 0.5383 0.9961 0.0782 0.4427

    然后,我去找这些值在cdf上对应的x0,如下

    -0.1243 -1.3798 -0.7422 1.3616 -1.0263 0.9378 0.0963 2.6636 -1.4175 -0.1442

    用画图来表述的话,是这样的:

    可是问题在这里:本来这个分布我就积不出来,你还要我积分,有啥用呢。重点来了!积不出来,我可以试着用其他方法啊,让我们改变一下求期望积分的形式:

    E(x)=xp(x)q(x)q(x)dx

    对,我们把这个积分项目上下乘以了一个q(x),这是我们已知的一个分布,并且这个分布在数学上来说是可以随意设定的。那么,这个式子其实可以理解为:现在我们求取的是 xp(x)q(x) 的期望,这个变量是按照 q(x) 分布的。看不太明白?让我们来看一个例子,这个例子出自
    Udacity的机器人人工智能教程-CS373 Artificial Intelligence for Robotics Programming a Robotic Car:
    这里写图片描述

    绿色的点是一个机器人,看色的线代表激光发出的测量线,现在它被随机放在了地图的一个位置,它想要知道自己到底在哪里,于是,它就开始猜测:由于没有任何的先验信息,所以一开始,它可能存在与房间的任何一个角落,每一个红色的点即代表机器人对自己所处位置的一个猜想,这就是我们在蒙特卡洛方法里面所提到的样本。而猜测(红色点)的分布是均匀的,也就是之前式子里面的 q(x) 分布。当然,每一个猜测有好有坏,不然我们简单的把所有粒子一平均,机器人对自己位置的猜想肯定一直会处于整个房间的最中心了。 p(x)q(x) 这部分我们称之为权值,就是为了衡量每个猜测的好坏,也就是衡量我们随意决定的分布和真实分布之间的相似度。
    在这里其实还有一个小问题的,我们应该如何去衡量 p(x)q(x) ,在机器人定位问题里面, p(x) 我们根本不知道!不知道的东西怎么去衡量啊,粒子滤波在这里有很牛逼的一招:这个不知道,我们可以抓特征啊。在这个问题里面,由于机器人知道整个房间的地图,又能探测到自己周边环境的样子,所以它可以把 p(x)q(x) 转换为计算当前猜测点的特和探测器感知的周围环境的似然程度!粒子滤波器牛逼的地方就在这里:我不知道真实情况怎么分布的,但是我可以追踪你的一个特征,并且我假设:这个特征的分布期望和原始目标的分布期望是一致的。这就好像是老师叫你去操场上找人,但是你并不知道要找的人会在操场哪里出现,而且最关键的是你还不认识那个人。这时候老师说,不知道不认识不要紧,你只要找那个穿着红衣服的人就可以了。然后你就去操场一看,哟,红衣服在这里,虽然你不认识他,但是你认为红衣服是他在这个状态空间的唯一特征,所以你还是准确找到了这个人。
    这样, p(x)q(x) 在实际计算中实际上就近似于计算特征的相似程度了。在这个问题里面,就是比较猜测位置姿态所应该得到的环境信息和实际得到的环境信息之间的差异。
    当然,为了更好的性能,我们还是希望 p(x)q(x) 尽可能接近于1,也就是 q(x) 尽可能接近于原始 p(x) 的分布的,这个问题我们可以通过粒子重采样解决。在这里我们不深入讨论,只给出重采样迭代之后的效果:
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    可以看到,在移动过程中,机器人的猜测渐渐全部收敛到机器人的真实位置了!
    真他妈好玩。

    最后回到之前我们提到的算面积那个问题,它实际上也是采用了重要性采样的思想,而权重分布变成了0-1分布,所以得到了之前的结果。
    均匀的撒粒子只是一种折中的方法。在不知道原始分布是什么样子的情况下,均匀分布的粒子最具有适应性,为了提升性能,我们在做重采样的时候,依然会不断优化粒子,使其趋近于原来的概率分布。这样使其不断接近真实分布,从而完成整个蒙特卡洛的思路。

    展开全文
  • 在打比赛的时候一直贯穿的思考,大概就是判别各个特征的重要性。 在建立模型之前,特征重要性能够帮助训练模型,防止过拟合,提升模型的RUC效果。 建立模型之后,特征重要性能够增强模型(集成模型 非深度学习模型...

    在打比赛的时候一直贯穿的思考,大概就是判别各个特征的重要性。

    在建立模型之前,特征重要性能够帮助训练模型,防止过拟合,提升模型的RUC效果。

    建立模型之后,特征重要性能够增强模型(集成模型 非深度学习模型)的可解释性,帮助建立模型信任、做出现实意义上的决策。

    建模前特征重要性判别

    要构建数值型连续变量的监督学习模型,最重要的方面之一就是好好理解特征。观察一个模型的部分依赖图有助于理解模型的输出是如何随着每个特征变化而改变的。

    1.featexp

    一位名叫Abhay Pawar的小哥开发了一些特征工程和机器学习建模的标准方法。

    • 特征理解
    • 识别嘈杂特征
    • 特征工程
    • 特征重要性
    • 特征调试
    • 泄漏检测与理解
    • 模型监控

    特征理解

                                                         

    如果因变量 (分析目标) 是二分类数据,散点图就不太好用了,因为所有点不是0就是1。针对连续型变量,数据点太多的话,会让人很难理解目标和特征之间的关系。但是,用featexp可以做出更加友好的图像。

                                

    Featexp可以把一个数字特征,分成很多个样本量相等的区间(X轴)。然后,计算出目标的平均值 (Mean),并绘制出左上方的图像。在这里,平均值代表违约率。图像告诉我们,年纪 (DAYS_BIRTH) 越大的人,违约率越低。

    这非常合理的,因为年轻人通常更可能违约。这些图能够帮助我们理解客户的特征,以及这些特征是如何影响模型的。右上方的图像表示每个区间内的客户数量。

    get_univariate_plots(data=data_train, target_col='target', features_list=data_train.columns[0:10], data_test=data_test)

    识别嘈杂特征

    嘈杂特征容易造成过拟合,分辨噪音一点也不容易。

    在featexp里,你可以跑一下测试集或者验证集,然后对比训练集和测试集的特征趋势,从而找出嘈杂的特征。

           

                                                                               训练集和测试集特征趋势的对比

    为了衡量噪音影响程度,featexp会计算两个指标:

    • 趋势相关性 (从测试绘图中可见) :如果一个特征在训练集和验证集里面表现出来的趋势不一样,就有可能导致过拟合。这是因为,模型从训练集里学到的一些东西,在验证集中不适用。趋势相关性可以告诉我们训练集和验证集趋势的相似度,以及每个区间的平均值。上面这个例子中,两个数据集的相关性达到了99%。看起来噪音不是很严重!

    • 趋势变化:有时候,趋势会发生突然变化和反复变化。这可能就参入噪音了,但也有可能是特定区间内有其他独特的特征对其产生了影响。如果出现这种情况,这个区间的违约率就没办法和其他区间直接对比了。

    如果训练集和测试集没有相同的趋势:如两者相关性只有85%。有时候,可以选择丢掉这样的特征。

    嘈杂特征的例子

    抛弃相关性低的特征,这种做法在特征非常多、特征之间又充满相关性(95%以上的很多)的情况下比较适用。这样可以减少过拟合,避免信息丢失。不过,别把太多重要的特征都丢掉了;否则模型的预测效果可能会大打折扣。同时,你也不能用重要性来评价特征是否嘈杂,因为有些特征既非常重要,又嘈杂得不得了。

    用与训练集不同时间段的数据来做测试集可能会比较好。这样就能看出来数据是不是随时间变化的了。

    Featexp里有一个 get_trend_stats() 函数,可以返回一个数据框 (Dataframe) ,显示趋势相关性和趋势变化。

    stats = get_trend_stats(data=data_train, target_col='target', data_test=data_test)

                                     

                                                                                  get_trend_stats()返回的数据框

    现在,可以试着去丢弃一些趋势相关性弱的特征了,看看预测效果是否有提高。

    我们可以看到,丢弃特征的相关性阈值越高,排行榜(LB)上的AUC越高。只要注意不要丢弃重要特征,AUC可以提升到0.74。有趣的是,测试集的AUC并没有像排行榜的AUC变化那么大。完整代码可以在featexp_demo记事本里面找到。

    featexp_demo

    https://github.com/abhayspawar/featexp/blob/master/featexp_demo.ipynb

    特征工程

    通过查看这些图表获得的见解,有助于我们创建更好的特征。只需更好地了解数据,就可以实现更好的特征工程。除此之外,它还可以帮助你改良现有特征。下面来看另一个特征EXT_SOURCE_1:

                         

    具有较高EXT_SOURCE_1值的客户违约率较低。但是,第一个区间(违约率约8%)不遵循这个特征趋势(上升并下降)。它只有-99.985左右的负值且人群数量较多。这可能意味着这些是特殊值,因此不遵循特征趋势。幸运的是,非线性模型在学习这种关系时不会有问题。但是,对于像Logistic回归这样的线性模型,如果需要对特殊值和控制进行插值,就需要考虑特征分布,而不是简单地使用特征的均值进行插补。

    特征重要性

    Featexp还可以帮助衡量特征的重要性。DAYS_BIRTH和EXT_SOURCE_1都有很好的趋势。但是,EXT_SOURCE_1的人群集中在特殊值区间中,这表明它可能不如DAYS_BIRTH那么重要。基于XGBoost模型来衡量特征重要性,发现DAYS_BIRTH实际上比EXT_SOURCE_1更重要。

    特征调试

    查看Featexp的图表,可以帮助你通过以下两项操作来发现复杂特征工程代码中的错误:

                    

    零方差特征只展现一个区间

    • 检查要素的总体分布是否正确。由于一些小错误,我个人曾多次遇到类似上述的极端情况。
    • 在查看这些图之前,预先假设特征趋势可能会是怎样,特性趋势如果不像你所期望的那样,这可能暗示了一些问题。坦白地说,这个假设趋势的过程使构建机器学习模型变得更加有趣!

    泄漏检测

    从目标到特征的数据泄漏会导致过拟合。泄露的特征具有很高的特征重要性。要理解为什么在特征中会发生泄漏是很困难的,查看featexp图像可以帮助理解这一问题。

    在“Nulls”区间的特征违约率为0%,同时,在其他所有区间中的违约率为100%。显然,这是泄漏的极端情况。只有当客户违约时,此特征才有价值。基于此特征,可能是因为一个故障,或者因为这个特征在违约者中很常见。了解泄漏特征的问题所在能让你更快地进行调试。

                                  

    理解为什么特征会泄漏

    模型监控

    由于featexp可计算两个数据集之间的趋势相关性,因此它可以很容易地利用于模型监控。每次我们重新训练模型时,都可以将新的训练数据与测试好的训练数据(通常是第一次构建模型时的训练数据)进行比较。趋势相关性可以帮助你监控特征信息与目标的关系是否发生了变化。

     

    这些简单的步骤总能帮助在Kaggle或者实际工作中构建更好的模型。用featexp,花15分钟去观察那些图像,是十分有价值的:它会带你一步步看清黑箱里的世界。

     

    建模后的特征重要性(模型可解释性)

    深度神经网络能够在多个层次进行抽象推断,所以他们可以处理因变量与自变量之间非常复杂的关系,并且达到非常高的精度。但是这种复杂性也使模型成为黑箱,我们无法获知所有产生模型预测结果的这些特征之间的关系,所以我们只能用准确率、错误率这样的评价标准来代替,来评估模型的可信性。

    但我们在构建树类模型(XGBoost、LightGBM等)时,想要知道哪些变量比较重要的话。可以通过模型feature_importances_方法来获取特征重要性。例如LightGBM的feature_importances_可以通过特征的分裂次数或利用该特征分裂后的增益来衡量。

    对模型结果的解释可应用到以下这些场景当中:

    数据收集

    对于从网上下载的数据集,你是无法控制的。但是很多使用数据科学的企业和组织都有机会扩展所收集数据的类型。因为收集新类型的数据可能成本会很高,或者非常麻烦,所以只有在清楚这么做是划算的时候,企业和组织才会去做。基于模型的解释会帮你更好地理解现有特征地价值,进而推断出哪些新数据可能是最有帮助的。

    决策制定

    某些情况下,模型会直接自动做出决策,但是有很多重要的决策是需要人来确定。对于最终需要人来做的决策,模型的可解释性比单纯的预测结果更重要

    建立信任

    许多人在确定一些基本的事实之前,不会信赖你用来做重要决策的模型。鉴于数据错误的频繁出现,这是一种明智的防范措施。在实际业务场景中,如果给出的模型解释符合对方自身对问题的理解,那么即使在基本不具备深入的数据科学知识的人之间,也将有助于建立互相信任的关系。

    1.Permutaion Importance —— 排列重要性

    训练得到一个模型之后,我们可能会问的一个最基本的问题是 哪些特征对预测结果的影响最大?

    这一概念叫做 特征重要性

    我们想用一个人10岁的数据去预测他20岁的身高是多少?

    数据中包含:

    • 有用的特征(10岁时的身高)
    • 较弱的特征(10岁时每天体育锻炼的时间)
    • 对预测基本没有作用的特征(10岁时股票数量)

    排列重要性是要在模型拟合之后才能进行计算。 所以对于给定的身高、股票数量等取值之后,计算排列重要性并不会改变模型或者是它的预测结果。

    相反,我们会问以下问题:如果随机打乱验证数据某一列的值,保持目标列以及其它列的数据不变,那么这种操作会在这些打乱的数据上对预测准确率产生怎样的影响?

    对某一列进行随机排序应当会降低预测的准确率,这是因为产生的数据不再对应于现实世界中的任何东西。如果随机打乱的那一列模型预测对其依赖程度很高,那么模型准确率的衰减程度就会更大。在这个例子中,打乱height at age 10将会让预测结果非常差。但是如果我们随机打乱的是socks owned,那么产生的预测结果就不会衰减得那么厉害。

    有了上述认识之后,排列重要性就按照以下步骤进行计算:

    1. 得到一个训练好的模型
    2. 打乱某一列数据的值,然后在得到的数据集上进行预测。用预测值和真实的目标值计算损失函数因为随机排序升高了多少。模型性能的衰减量代表了打乱顺序的那一列的重要程度。
    3. 将打乱的那一列复原,在下一列数据上重复第2步操作,直到计算出了每一列的重要性。

                                                                   

    排列重要性结果解读

    排在最上面的是最重要的特征,排在最下面是重要性最低的特征。

    每一行的第一个数字表示模型性能衰减了多少(在这个例子中,使用准确率作为性能度量)。

    跟数据科学里面的很多事情一样,在对某一打乱的特征提取重要性的时候,是存在随机性的,所以我们在计算排列重要性的时候,会通过多次打乱顺序的方式重复这一过程。在±后面的数字表示标准差。

    偶尔你会看到负值的排列重要性。在这些情况中,在打乱的数据上得到预测结果比真实数据的准确率更高。这在所选特征与目标基本无关(重要性应该为0)的情况下会出现,但是随机的因素导致预测结果在打乱的数据上表现得更准确。就像这个例子一样,因为没有容忍随机性的空间,这种情况在小的数据集上很常见。

    2.Partial Dependence Plots —— 部分依赖图

    特征重要性展示的是哪些变量对预测的影响最大,而部分依赖图展示的是特征如何影响模型预测的。

    部分依赖图可以用来展示一个特征是怎样影响模型预测的。可以用部分依赖图回答一些与下面这些类似的问题:1. 假如保持其它所有的特征不变,经纬度对房价有什么影响?换句话说,相同大小的房子,在不同的地方价格会有什么差别?2. 在两组不同的人群上,模型预测出的健康水平差异是由他们的负债水平引起的,还是另有原因?

    工作原理

    跟排列重要性一样,部分依赖图也是要在拟合出模型之后才能进行计算。 模型是在真实的未加修改的真实数据上进行拟合的。

    以足球比赛为例,球队间可能在很多方面都存在着不同。比如传球次数,射门次数,得分数等等。乍看上去,似乎很难梳理出这些特征产生的影响。

    为了搞清楚部分依赖图是怎样把每个特征的影响分离出来的,首先我们只看一行数据。比如,这行数据显示的可能是一支占有50%的控球时间,传了100次球,射门了10次,得了1分的球队。

    接下来,利用训练好的模型和上面的这一行数据去预测该队斩获最佳球员的概率。但是,我们会多次改变某一特征的数值,从而产生一系列预测结果。比如我们会在把控球时间设成40%的时候,得到一个预测结果,设成50%的时候,得到一个预测结果,设成60%的时候,也得到一个结果,以此类推。以从小到大设定的控球时间为横坐标,以相应的预测输出为纵坐标,我们可以把实验的结果画出来。

    from matplotlib import pyplot as plt
    from pdpbox import pdp, get_dataset, info_plots
    
    # Create the data that we will plot
    pdp_goals = pdp.pdp_isolate(model=tree_model, dataset=val_X, model_features=feature_names, feature='Goal Scored')
    
    # plot it
    pdp.pdp_plot(pdp_goals, 'Goal Scored')
    plt.show()

                                                                         

    在看上面的部分依赖图的时候,有两点值得注意的地方:

    • y轴表示的是模型预测相较于基线值或最左边的值的变化
    • 蓝色阴影部分表示置信区间。

    2D 部分依赖图

    如果你对特征之间的相互作用感兴趣的话,2D部分依赖图就能排得上用场了。

    key code:
    from sklearn.ensemble.partial_dependence import partial_dependence, plot_partial_dependence
    
    my_plots = plot_partial_dependence(my_model,       
                                       features=[0, 2], # column numbers of plots we want to show
                                       X=X,            # raw predictors data.
                                       feature_names=['Distance', 'Landsize', 'BuildingArea'], # labels on graphs
                                       grid_resolution=10) # number of values to plot on x axis
    

    优点

    pdp的计算是直观的:partial dependence function 在某个特定特征值位置表示预测的平均值,如果我们强制所有的数据点都取那个特征值。在我的经验中,lay people(普通人,没有专业知识的大众)通常都可以很快理解PDPs的idea。

    如果你要计算的PDP的特征和其它特征没有关联,那么PDP可以完美的展示出这个特征大体上上如何影响预测值的。在不相关的情况下,解释是清晰的:PDP展示了平均预测值在某个特征改变时是如何变化的。如果特征是相互关联的,这会变得更加复杂。

    不足

    实际分析PDP时的最大特征个数是2。这不是PDP的错误,而是由于我们人无法想象超过三维的空间。

    有一些 PDP并不展示特征分布。忽略分布可能会造成误解,因为你可能会过度解读具有少量数据的地方。这个问题通过展示一个rug或者histogram在x轴上的方式很容易解决。

    独立性假设是PDP的最大问题,它假设计算的特征和其它特征是不相关的。当特征是相关的时候,我们创造的新的数据点在特征分布的空间中出现的概率是很低的。对这个问题的一个解决方法就是Accumulate Local Effect plots,或者简称ALE plots,它工作在条件分布下而不是边缘分布下。

    多种类的影响可能会被隐藏,因为PDP仅仅展示边际影响的平均值。假设对于一个要计算的特征,一半的数据点对预测有正相关性,一半的数据点对预测有负相关性。PD曲线可能会是一个水平的直线,因为两半数据点的影响可能会互相抵消。然后你可能会得出特征对预测没有影响的结论。通过绘制individual conditional expectation curves而不是aggregated line,我们可以揭示出这种heterogeneous effects。

    3.SHAP VALUES —— 什么影响了你的决定?

     

    SHAP值(SHapley Additive exPlanations的缩写)从预测中把每一个特征的影响分解出来。可以把它应用到类似于下面的场景当中:

    • 模型认为银行不应该给某人放贷,但是法律上需要银行给出每一笔拒绝放贷的原因。
    • 医务人员想要确定对不同的病人而言,分别是哪些因素导致他们有患某种疾病的风险,这样就可以因人而异地采取针对性的卫生干预措施,直接处理这些风险因素。

    工作原理

    SHAP值通过与某一特征取基线值时的预测做对比,来解释该特征取某一特定值的影响。

    可以继续用排列重要性部分依赖图中用到的例子进行解释。

    我们对一个球队会不会赢得“最佳球员”称号进行了预测。

    我们可能会有以下疑问:

    • 预测的结果有多大的程度是由球队进了3个球这一事实影响的?

    但是,如果我们像下面这样重新表述一下的话,那么给出具体、定量的答案还是比较容易的:

    • 预测的结果有多大的程度是由球队进了3个球这一事实影响的,而不是某些基线进球数?

    当然,每个球队都由很多特征,所以,如果我们能回答“进球数”的问题,那么我们也能对其它特征重复这一过程。

    import shap  
    
    #实例化
    explainer = shap.TreeExplainer(my_model)
    
    #计算
    shap_values = explainer.shap_values(data_for_prediction)
    shap.initjs()
    shap.force_plot(explainer.expected_value[1], shap_values[1], data_for_prediction)

     

    我们预测的结果时0.7,而基准值是0.4979。引起预测增加的特征值是粉色的,它们的长度表示特征影响的程度。引起预测降低的特征值是蓝色的。最大的影响源自Goal Scored等于2的时候。但ball possesion的值则对降低预测的值具有比较有意义的影响。

    如果把粉色条状图的长度与蓝色条状图的长度相减,差值就等于基准值到预测值之间的距离。

    要保证基线值加上每个特征各自影响的和等于预测值的话,在技术上还是有一些复杂度的(这并不像听上去那么直接)。我们不会研究这些细节,因为对于使用这项技术来说,这并不是很关键。这篇博客对此做了比较长篇幅的技术解释。

    如果仔细观察一下计算SHAP值的代码,就会发现在shap.TreeExplainer(my_model)中涉及到了树。但是SHAP库有用于各种模型的解释器。

    • shap.DeepExplainer适用于深度学习模型
    • shap.KernelExplainer 适用于各种模型,但是比其它解释器慢,它给出的是SHAP值的近似值而不是精确值。
      下面是用KernelExplainer得到类似结果的例子。结果跟上面并不一致,这是因为KernelExplainer`计算的是近似值,但是表达的意思是一样的。

    4.Summary Plots

    explainer = shap.TreeExplainer(my_model)
    
    shap_values = explainer.shap_values(val_X)
    
    shap.summary_plot(shap_values[1], val_X)

                                                

    图形解释

    • 每个点是一个样本(人),图片中包含所有样本

    • X轴:样本按Shap值排序-

    • Y轴:特征按Shap值排序

    • 颜色:特征的数值越大,越红

    特征解释

    • martial_status2这个特征最重要,且值越大,收入会相对更高,到达一定峰值,会明显下降

    • 年龄也是影响结果的重要特征,年龄小收入普遍低,但年龄到达一定程度,并不会增加收入,存在年龄小,收入高的人群。

    • 收入水平和capital_gain大致呈正相关。

    shap.summary_plot(shap_values[1],X_test, plot_type="bar")
    

                                                    

    上图是特征重要性图谱,由上向下重要性依次减弱。

    shap_values = explainer.shap_values(df)
    shap.dependence_plot('age', shap_values[1], df, interaction_index="capital_gain")
    
     

                                                  

    图形解释:

    • X轴:age

    • Y轴(左):一个样本的age对应的Shap值

    • 颜色:capital_gain越大越红

    特征解释:

    • 排除所有特征的影响,描述age和capital_gain的关系。

    • 年龄大的人更趋向于有大的资本收益,小部分年轻人有大的资本收益。

    5.树GraphViz可视化export_graphviz

    export_graphviz(estimator, out_file='tree.dot', 
                    feature_names = feature_names,
                    class_names = y_train_str,
                    rounded = True, proportion = True, 
                    label='root',
                    precision = 2, filled = True)
    
    from subprocess import call
    call(['dot', '-Tpng', 'tree.dot', '-o', 'tree.png', '-Gdpi=600'])
    
    from IPython.display import Image
    Image(filename = 'tree.png')

     

    写到这里就告一段落。

    后来发现了一个更全面的学习博文,更进一步参考。

    https://blog.csdn.net/Datawhale/article/details/103169719

    展开全文
  • 数据库完整性实验报告

    千次阅读 2019-12-03 13:43:39
    (1)实现数据完整性的概念及实施数据完整性的重要性。 (2)掌握数据完整性的分类。 (3)掌握完整性约束的添加、删除方法。 (4)掌握通用默认值的创建、实施与删除方法。 (5)掌握规则的创建、实施与删除...
  • 大学物理电学基本实验实验报告

    千次阅读 2020-12-21 04:18:13
    【www.520z-2.com - 范文大全】篇一:《大学物理实验--电学部分》电学部分交流电及整流滤波电路实验与示波器测量时间实验...........................................................................................
  • 关于计算思维重要性的思考

    千次阅读 2019-12-01 14:03:30
    目录前言计算思维举例说明附——关注用户体验的重要性(毕竟顾客就是“上帝”,甲方就是“爸爸”) 前言 在传统的人类思维中,有逻辑思维(即推理和演绎,以数学为代表),还有实证思维(即实验和验证,以物理为...
  • java实验实验报告

    千次阅读 2021-03-05 14:28:56
    Java实验报告一:Java开发环境的熟悉20135315 宋宸宁实验要求:1. 使用JDK编译、运行简单的Java程序2.使用Eclipse 编辑、编译、运行、调试Java程序实验内容(一) 命令行下Java程序开发(二)Eclipse下Java程序开发、...
  • 1. 麻省理工学院计算机科学与人工智能实验室(CSAIL) 2. 卡耐基梅隆大学机器人学院(Robotics Academy) 3. 斯坦福大学的人工智能实验室(SAIL) 二、国外市场派 1. 谷歌DeepMind人工智能实验室 2. 微软Microsoft ...
  • 蒙特卡罗和重要性采样

    万次阅读 2014-10-08 22:08:20
    重要性采样是非常有意思的一个方法。我们首先需要明确,这个方法是基于采样的,也就是基于所谓的蒙特卡洛法(Monte Carlo)。蒙特卡洛法,本身是一个利用随机采样对一个目标函数近似。例如求一个稀奇古怪的形状的...
  • 手动测试作为自动测试的一种补充,是渗透测试过程中必不可少的一个重要部分。渗透测试不同于传统的安全扫描,在整体风险评估框架中,脆弱与安全扫描的关系可描述为“承上”,是对扫描结果的一种验证和补充。
  • java实验心得体会范例精选

    万次阅读 2021-02-12 12:00:13
    ​【导语】Java具有简单、面向对象、分布式、健壮、安全与可移植、多线程、动态等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。以下是无忧考网为大家精心整理了java...
  • 计算机组成原理实验:微程序控制实验

    万次阅读 多人点赞 2021-02-07 15:20:32
    学生实验报告 实验课名称:计算机组成原理 实验项目名称:微程序控制实验 一、实验名称: 微程序控制实验 二、实验目的: (1)掌握微程序控制器的组成原理。 (2)掌握微程序的编制、写入,观察微程序的运行过程。 ...
  • 数值计算方法实验报告(一)算法的数值稳定性实验数值分析实验报告姓 名学 号系 ...2.通过对稳定算法和不稳定算法的结果分析、比较,深入理解算法的数值稳定性及其重要性。1.用Matlab语言编写按递推公式计算(n=0,1...
  • 细胞表型检测之细胞迁移(细胞划痕实验 + transwell实验
  • 论“事前-事中-事后”的重要性

    万次阅读 2018-09-08 17:33:31
    所谓事前,就是事情之前应该有统筹的规划,考虑可能出现的问题和困难,最好提前做实验验证下,以保证在真实现场不出问题,或者即使出现问题也有应对方案,不至于手忙脚乱、大动干戈。 所谓事中,就是事情的过程...
  • 互联网时代个人信息安全的重要性

    万次阅读 2017-10-18 16:09:20
    社会工程学常常被人说成是一门艺术,很多人可能都认为自己没有艺术细胞,因为大家对艺术的理解就是诸如绘画、摄影、诗歌等领域,其实社会工程学也可以被归为艺术的一类,只要你能把一个项目或者说工程的精致,那...
  • 实验六 三层交换机的配置实验报告

    千次阅读 2021-07-09 09:05:10
    实验报告实验名称三层交换机的配置同组同学实验成绩一、实验目的(1)深入了解三层交换机的功能、特点及工作原理。(2)掌握三层交换机实现路由功能的方法。二、实验仪器设备及软件Packet Tracer 5.3三、实验方案按照...
  • 看看学姐的经验刚好处于开学季,所以学霸姐姐想聊一聊这个话题,之所以说这个话题的契机是——前几天,学霸姐姐看到了中科大的迎新报道,一位来自东北吉林的女生,在被校园记者问到“大学最想的事情是什么?...
  • 本文叙述了中英文论文写作第三节实验部分:材料和方法。在以后的博文中我们将学会更多写作技巧,从而实现对外部世界进行感知,充分认识这个有机与无机的环境,科学地合理地进行创作和发挥效益,然后为人类社会发展...
  • 实验室安全考试

    千次阅读 2022-03-31 17:23:21
    实验室安全考试题
  • Introduction Google是一个数据驱动型公司,这意味着所有对用户的...在web的语境下,一个实验是由一股流量(比如,用户的请求)和在这股流量上进行的相对对比实验的修改组成的。修改包括用户可见的修改(比如,修...
  • MATLAB程序设计实验报告.doc

    千次阅读 2021-04-24 17:54:55
    11 -MATLAB程序设计实验报告一、实验目的1. 通过实验熟悉MATLAB仿真软件的使用方法;2. 掌握用MATLAB对连续信号时域分析、频域分析和s域分析的方法,利用绘图命令绘制出典型信号的波形,了解这些信号的基本特征;3. ...
  • 这篇文章将从个人角度介绍英文论文实验评估(Evaluation)部分,即Experimental Evaluation或Experimental study,主要以入侵检测系统为例(Intrusion Detection System)。希望这篇文章对您有所帮助~
  • 建模的重要性及意义

    万次阅读 2018-06-07 17:40:15
    建模的重要性? 如果你想搭一个狗窝,你备好木料、钉子和一些基本工具(如锤子、锯和卷尺) ,就可以开始工作。从制定一点初步的计划到完成一个满足适当功能的狗窝,你 可能不用别人帮助,在几个小时内就能够实现...
  • 软件测试的目的和意义

    千次阅读 2021-07-23 06:08:33
    软件测试整体是验证功能的实现、可用,检查程序的错误,最终目的是为了提高用户体验;在测试过程中,有一些缺陷级别低,解决与否都不影响用户使用,且缺陷存在本身用户也不会有感知,这时就需要从用户体验的角度...
  • 计算机系统基础实验-LinkLab实验

    千次阅读 2021-03-24 22:13:36
    这是大三时的实验课,很久以前的东西,应要求放出来,的不是很好。linux永远都是很重要的,希望我和大家都记得这个。实际上做到第五阶段我就不会了。 实验课程名称:计算机系统基础 实验项目名称:LinkLab实验 ...
  • 实验心得体会4篇

    万次阅读 2021-04-18 05:42:41
    实践是检验真理唯一的标准,当想要检验自己的所学时一需要做实验来检验。下面是由出国留学网小编为大家整理的“实验心得体会四篇”,仅供参考,欢迎大家阅读。篇一:实验心得体会大学数学实验对于我们来说是一门陌生...
  • 北京联合大学信息学院“面向对象程序设计”课程上机实验报告题目:JAVA上机实验心得体会 姓名(学号):专业:计算机科学与技术编制时间:2012年12月19日版本:1.0.0指导教师:北京联合大学-信息学院编制 实验1 熟悉...
  • 微机原理实验总结(共5篇)

    千次阅读 2021-06-17 00:37:36
    回想起来受益匪浅,主要是加深了对计算机的一些硬件情况和运行原理的理解和汇编语言的编写汇编语言,对于学习机电工程的自动控制和计算机都是很重要的,因为它是和机器语言最接近的了,如果用它来编程序的话,会比用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 374,598
精华内容 149,839
热门标签
关键字:

做实验的重要性