精华内容
下载资源
问答
  • 2016-09-21 22:00:44

    首先是概念。

    信道利用率,也叫信道的效率,定义很多,但是常用的是时间角度的定义。

    OK,上定义:对发送方而言,发送方在一个发送周期内有效地发送数据所需要的时间占整个发送周期的比率。

    那么,什么是发送周期

    发送周期:发送方从发送第一个数据开始,到接收到第一个确认帧为止。

    设发送周期为T,这个周期内发送的数据量为L,发送方的速率是C,则发送方用于发送有效数据的时间是L/C

    在这种情况下,信道的利用率是:
    ( L / C ) T \frac{(L/C)}{T} T(L/C)

    另外,信道的吞吐率 = 信道的利用率 * 发送方的发送速率

    看一道题目加深理解:

    (2012年联考) 两台主机之间的数据链路层采用了后退N帧协议(GBN)传输数据,数据的传输速率为16kbps,单向传播时延为270ms,数据帧的长度范围是128~512字节,接收方总是以数据帧等长的帧进行确认(即确认帧长度与发送的帧一样大)。为使信道利用率最高,帧序列的比特数至少是(B)

    A.5 B.4 C.3 D.2

    思考:本题用的并不是捎带确认,因此只需要看一个帧的确认即可。
    传输速率C = 16kbps
    延迟是R = 270ms
    设帧的大小是a字节。则发送周期是:T = a / C + 2 * R + a / C

    第一个a/c是发送方发送一帧的时间,2*R是发送的帧和确认帧的传播时延,这里的确认帧大小不可忽略,所以是a/C

    从而发送效率
    α = ( a / C ) ( 2 ∗ ( a / C + R ) ) \alpha = \frac{(a/C) } { (2*(a/C+R))} α=(2(a/C+R))(a/C)

    这里就是求如何使得 α \alpha α最大。

    这样推导的结果是512B时利用率最高!

    但是答案又说,为了发送的数据帧数更多!Why? 帧数大和帧数多居然直接取帧数多作为优先?

    不科学,因此这题存疑

    update: 2016.11.13修正。

    我之前一直理解错了题干的含义。题干说数据帧的长度范围是128B~512B。我片面的认为取512B时可以使得数据链路不停发送数据,即利用率接近100%时,用的帧序号数最小。诚然,这没有任何可以争论的点。我存疑就是因为大部分的解释是,为了使信道利用率最高,需要多发帧。所以帧长越短越好。这个推导逻辑是不对的!因为无论使用128B还是512B都可以理论上达到最大的100%。现在是,我们需要考虑到最极端的情况,即帧序号用的编码比特数无论何时都能满足。很显然128B,帧长最小时,需要的帧序号编码数自然多与512B。如果就以512B计算,那么得到的最小帧序号数在128B的帧长下,达不到最大的信道利用率。因为帧序号数目的限制,连续发送的数目有限。这才是整个题目的设计逻辑。

    有了这个理解,问题就简单多了,我们考虑128B至少需要多少比特,就是我们需要的数。

    发送一帧用时:128B/16kbps = 64ms
    RTT = 540ms
    发送周期T = 64+RTT+64 = 668ms

    则连续不断发送时可以发送:668/64 = 10.4帧

    因此,需要比特数是n.

    2 n ≥ 10.4 + 1 2^n\geq 10.4+1 2n10.4+1即:要能够区分新旧轮次的帧。

    得到n至少为4.

    进一步思考:668ms发送10.4帧,则数据传输率是:15.942kbps
    10.4是取了约数的,即我们可以直接认为连续不断发送。则用16kbps,因此,每秒发送的帧数是:15.6帧。则一个发送周期内发送:10.4帧。
    也是一样的结果。

    特别注意,我们算帧数时,是以一个发送周期为单位计算的,不是1秒!
    我们担心的是不能区分每个发送周期的帧是新的还是旧的,因此,才来计算序号,换算成1秒发送多少,毫无意义!所以之前考察2015年的一道习题时理解错了。这里一并纠正。那边也更新了。

    END.

    更多相关内容
  • 利用SHAP解释Xgboost模型

    千次阅读 2020-10-08 20:06:31
    Xgboost相对于线性模型在进行预测时往往有更好的精度,但是同时...本教程中,我们在真实数据集上进行实操,利用SHAP来解释Xgboost模型。 预计学习用时:30分钟。 本教程基于Python 3.6版本、Xgboost 0.82版本以及shap 0

    Xgboost相对于线性模型在进行预测时往往有更好的精度,但是同时也失去了线性模型的可解释性。所以Xgboost通常被认为是黑箱模型。

    2017年,Lundberg和Lee的论文提出了SHAP值这一广泛适用的方法用来解释各种模型(分类以及回归),其中最大的受益者莫过于之前难以被理解的黑箱模型,如xgboost和神经网络模型。

    本教程中,我们在真实数据集上进行实操,利用SHAP来解释Xgboost模型。

    预计学习用时:30分钟。

    本教程基于Python 3.6版本、Xgboost 0.82版本以及shap 0.28.5版本。

    原创者:东布东 | 修改校对:SofaSofa TeamM |…

    http://sofasofa.io/tutorials/shap_xgboost/

    1. Feature importance

    在这里插入图片描述

    # 加载模块
    import xgboost as xgb
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt; plt.style.use('seaborn')
    
    # 读取数据,目标变量y是球员的身价(万欧元)
    data = pd.read_csv('train.csv')
    
    # 获得当时球员年龄
    today = pd.to_datetime('2018-01-01')
    data['birth_date'] = pd.to_datetime(data['birth_date'])
    data['age'] = np.round((today - data['birth_date']).apply(lambda x: x.days) / 365., 1)
    
    # 选择特征,这里只是举例,未必是最佳组合
    # 特征依次为身高(厘米)、潜力、速度、射门、传球、带球、防守、体格、国际知名度、年龄
    cols = ['height_cm', 'potential', 'pac', 'sho', 'pas', 'dri', 'def', 'phy', 'international_reputation', 'age']
    
    # 训练xgboost回归模型
    model = xgb.XGBRegressor(max_depth=4, learning_rate=0.05, n_estimators=150)
    model.fit(data[cols], data['y'].values)
    
    # 获取feature importance
    plt.figure(figsize=(15, 5))
    plt.bar(range(len(cols)), model.feature_importances_)
    plt.xticks(range(len(cols)), cols, rotation=-45, fontsize=14)
    plt.title('Feature importance', fontsize=14)
    plt.show()
    

    在这里插入图片描述
    在这里插入图片描述

    2. SHAP value

    在这里插入图片描述

    3. SHAP的Python实现

    Python中SHAP值的计算由shap这个package实现,可以通过pip install shap安装。

    下面我们针对第1节中训练出的模型model,计算其SHAP值。

    引用package并且获得解释器explainer。

    import shap
    # model是在第1节中训练的模型
    explainer = shap.TreeExplainer(model)
    

    在这里插入图片描述

    shap_values = explainer.shap_values(data[cols])
    print(shap_values.shape)
    

    在这里插入图片描述
    通过对比发现,我们可以确认基线值就是训练集的目标变量的拟合值的均值。在这里例子中,目标变量是球员的身价(万欧元),也就是球员的平均身价为229万欧元。
    在这里插入图片描述

    y_base = explainer.expected_value
    print(y_base)
    
    data['pred'] = model.predict(data[cols])
    print(data['pred'].mean())
    

    在这里插入图片描述

    3.1 单个样本的SHAP值

    我们可以随机检查其中一位球员身价的预测值以及其特征对预测值的影响。

    下面的数据框中第一列是特征名称,第二列是特征的数值,第三列是各个特征在该样本中对应的SHAP值。

    # 比如我们挑选数据集中的第30位
    j = 30
    player_explainer = pd.DataFrame()
    player_explainer['feature'] = cols
    #某行
    player_explainer['feature_value'] = data[cols].iloc[j].values
    player_explainer['shap_value'] = shap_values[j]
    player_explaine
    

    在这里插入图片描述
    我们知道一个样本中各特征SHAP值的和加上基线值应该等于该样本的预测值。

    我们可以做如下的验证。

    我们知道一个样本中各特征SHAP值的和加上基线值应该等于该样本的预测值。

    我们可以做如下的验证。

    print('y_base + sum_of_shap_values: %.2f'%(y_base + player_explainer['shap_value'].sum()))
    print('y_pred: %.2f'%(data['pred'].iloc[j]))
    

    在这里插入图片描述
    shap还提供极其强大的数据可视化功能。下图是对上面数据框的可视化。

    指定其中某行进行特征的分析

    蓝色表示该特征的贡献是负数,红色则表示该特征的贡献是正数。最长的红色条是潜力值,球员的潜力值很高,而他的身价也因此增加了1092万;最长的蓝色条是年龄,这个球员年龄较小才20岁出头,尚未到职业巅峰,未来也有诸多不确定性,身价也因此降低了180万元

    shap.initjs()
    shap.force_plot(explainer.expected_value, shap_values[j], data[cols].iloc[j])
    

    在这里插入图片描述

    3.2 对特征的总体分析

    除了能对单个样本的SHAP值进行可视化之外,还能对特征进行整体的可视化。

    下图中每一行代表一个特征,横坐标为SHAP值。一个点代表一个样本,颜色越红说明特征本身数值越大,颜色越蓝说明特征本身数值越小。

    我们可以直观地看出潜力potential是一个很重要的特征,而且基本上是与身价成正相关的。年龄age也会明显影响身价,蓝色点主要集中在SHAP小于0的区域,可见年纪小会降低身价估值,另一方面如果年纪很大,也会降低估值,甚至降低得更明显,因为age这一行最左端的点基本上都是红色的。

    shap.summary_plot(shap_values, data[cols])
    

    在这里插入图片描述
    我们也可以把一个特征对目标变量影响程度的绝对值的均值作为这个特征的重要性

    因为SHAP和feature_importance的计算方法不同,所以我们这里也得到了与第1节不同的重要性排序。

    shap.summary_plot(shap_values, data[cols], plot_type="bar")
    

    在这里插入图片描述

    3.3 部分依赖图Partial Dependence Plot

    shap.dependence_plot('age', shap_values, data[cols], interaction_index=None, show=False)
    

    SHAP也提供了部分依赖图的功能,与传统的部分依赖图不同的是,这里纵坐标不是目标变量y的数值而是SHAP值。

    比如下图中,年纪大概呈现出金字塔分布,也就是24到31岁这个年纪对球员的身价是拉抬作用,小于24以及大于31岁的球员身价则会被年纪所累。
    在这里插入图片描述

    3.4 对多个变量的交互进行分析

    shap_interaction_values = shap.TreeExplainer(model).shap_interaction_values(data[cols])
    shap.summary_plot(shap_interaction_values, data[cols], max_display=4)
    

    在这里插入图片描述

    我们也可以用dependence_plot描绘两个变量交互下变量对目标值的影响。

    #两个列名  一个potential一个是 international——reputation
    shap.dependence_plot('potential', shap_values, data[cols], interaction_index='international_reputation', show=False)
    

    在这里插入图片描述

    展开全文
  • 利用Shap解释Xgboost(或者别的)模型

    千次阅读 2019-12-07 16:33:07
    Shap的一些介绍: SHAP包 算法解析 shap的中文解析 知乎的翻译 ps,sklearn库的模型可以用lime模块解析 本文参考利用SHAP解释Xgboost模型 数据集

    Shap的一些介绍:
    SHAP包
    算法解析
    shap的中文解析
    知乎的翻译
    ps,sklearn库的模型可以用lime模块解析

    DEMO1

    参(chao)考(xi)利用SHAP解释Xgboost模型
    数据集
    数据集基本做了特征处理,就基本也不处理别的了。

    检查下缺失值

    print(data.isnull().sum().sort_values(ascending=False))
    
    gk                          9315
    cam                         1126
    rw                          1126
    rb                          1126
    st                          1126
    cf                          1126
    lw                          1126
    cm                          1126
    cdm                         1126
    cb                          1126
    lb                          1126
    
    data.isnull().sum(axis=0).plot.barh()
    plt.title("Ratio of missing values per columns")
    plt.show()
    

    在这里插入图片描述

    获取年龄

    days = today - data['birth_date']
    print(days.head())
    
    0    8464 days
    1   12860 days
    2    7487 days
    3   11457 days
    4   14369 days
    Name: birth_date, dtype: timedelta64[ns]
    

    关于年龄计算这一块

    day2 = (today - data['birth_date'])
    
    0    8464 days
    1   12860 days
    2    7487 days
    3   11457 days
    4   14369 days
    Name: birth_date, dtype: timedelta64[ns]
    
    day2 = (today - data['birth_date']).apply(lambda x: x.days)
    #把天数提取成整数
    
    0     8464
    1    12860
    2     7487
    3    11457
    4    14369
    Name: birth_date, dtype: int64
    

    获得年龄特征

    data['age'] = np.round((today - data['birth_date']).apply(lambda x: x.days) / 365., 1)
    

    建立模型和输出

    随便选一些特征训练(主要是学习一下shap的用法)

    Feature importance:可以直观地反映出特征的重要性,看出哪些特征对最终的模型影响较大。但是无法判断特征与最终预测结果的关系是如何的。

    cols = ['height_cm', 'potential', 'pac', 'sho', 'pas', 'dri', 'def', 'phy', 'international_reputation', 'age']
    
    model = xgb.XGBRegressor(max_depth=4, learning_rate=0.05, n_estimators=150)
    model.fit(data[cols], data['y'].values)
    
    plt.figure(figsize=(15, 5))
    plt.bar(range(len(cols)), model.feature_importances_)
    plt.xticks(range(len(cols)), cols, rotation=-45, fontsize=14)
    plt.title('Feature importance', fontsize=14)
    plt.show()
    

    在这里插入图片描述

    采用shap(SHapley Additive exPlanation)验证模型

    解释器explainer

    explainer = shap.TreeExplainer(model)
    

    获取训练集data各个样本各个特征的SHAP值

    因为data中有10441个样本以及10个特征,得到的shap_values的维度是10441×10。

    shap_values = explainer.shap_values(data[cols])
    print(shap_values.shape)
    

    这里我是报错的。没找到原因。应该是自带的BUG。

    AssertionError: Additivity check failed in TreeExplainer! Please report this on GitHub. Consider retrying with the feature_dependence='independent' option.
    

    计算基线

    y_base = explainer.expected_value
    print(y_base)
    
    data['pred'] = model.predict(X_train)
    print(data['pred'].mean())
    
    229.16510445903987
    229.16512
    
    

    DEMO2

    Explain Your Model with the SHAP Values
    Explain Any Models with the SHAP Values — Use the KernelExplainer

    导入库

    import xgboost as xgb
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import seaborn as sns
    plt.style.use('seaborn')
    pd.set_option('display.max_columns', 1000)
    pd.set_option('display.width', 1000)
    pd.set_option('display.max_colwidth', 1000)
    
    data = pd.read_csv("C:\\Users\\Nihil\\Documents\\pythonlearn\\data\\kaggle\\winequality-red.csv")
    

    检查数据

    print(data.info())
    
    Data columns (total 12 columns):
    fixed acidity           1599 non-null float64
    volatile acidity        1599 non-null float64
    citric acid             1599 non-null float64
    residual sugar          1599 non-null float64
    chlorides               1599 non-null float64
    free sulfur dioxide     1599 non-null float64
    total sulfur dioxide    1599 non-null float64
    density                 1599 non-null float64
    pH                      1599 non-null float64
    sulphates               1599 non-null float64
    alcohol                 1599 non-null float64
    quality                 1599 non-null int64
    dtypes: float64(11), int64(1)
    memory usage: 150.0 KB
    None
    
    print(data.head())
    
          fixed acidity  volatile acidity  citric acid  residual sugar  chlorides  free sulfur dioxide  total sulfur dioxide  density    pH  sulphates  alcohol  quality
    0            7.4              0.70         0.00             1.9      0.076                 11.0                  34.0   0.9978  3.51       0.56      9.4        5
    1            7.8              0.88         0.00             2.6      0.098                 25.0                  67.0   0.9968  3.20       0.68      9.8        5
    2            7.8              0.76         0.04             2.3      0.092                 15.0                  54.0   0.9970  3.26       0.65      9.8        5
    3           11.2              0.28         0.56             1.9      0.075                 17.0                  60.0   0.9980  3.16       0.58      9.8        6
    4            7.4              0.70         0.00             1.9      0.076                 11.0                  34.0   0.9978  3.51       0.56      9.4        5
    
    

    设置feature和target

    target = 'quality' 
    X_columns = [x for x in data.columns if x not in [target]]
    X = data[X_columns]
    Y = data['quality']
    

    训练一个随机森林模型

    X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3)
    model = RandomForestRegressor(max_depth=6, random_state=0, n_estimators=10)
    model.fit(X_train, y_train)
    

    (A)Variable Importance Plot — Global Interpretability(全局可解释性)

    • 目的:variable importance plot 列出了最重要的变量,顶部特征对预测能力的贡献最大。
    import shap
    shap_values = shap.TreeExplainer(model).shap_values(X_train)
    shap.summary_plot(shap_values, X_train, plot_type="bar")
    

    在这里插入图片描述
    卧槽跟度数关于这么大么?(重点错

    SHAP value plot

    • 目的:The SHAP value plot可以进一步显示预测因子与目标变量之间的正、负关系
    shap.summary_plot(shap_values, X_train)
    

    在这里插入图片描述

    图还是很好看的。这个图是由所有训练数据构成,表达以下信息:

    • Feature importance 可以看出各特征对预测能力的贡献程度
    • Impact: 水平位置显示该值的影响是与较高还是较低的预测相关联。比如图上酒精就与1.0更相关
    • Original value 颜色显示该变量是该观察值的高(红色)还是低(蓝色)。
    • Correlation 酒精含量高对产品的质量等级有高而积极的影响。高来自红色,positive impact显示在x轴上。同样,挥发性酸度与目标变量呈负相关。

    (B) SHAP Dependence Plot — Global Interpretability

    含义:部分相关图显示了一个或两个特征对机器学习模型预测结果的边际效应(J. H. Friedman 2001)。
    Greedy function approximation: A gradient boosting machine.(上面那篇论文)
    Marginal effects measure the expected instantaneous change in the dependent variable as a function of a change in a certain explanatory variable while keeping all the other covariates constant. The marginal effect measurement is required to interpret the effect of the regressors on the dependent variable.
    它告诉我们目标和特征之间的关系是线性的、单调的还是更复杂的。
    代码如下:

    shap.dependence_plot('alcohol',shap_values, X_train)
    

    在这里插入图片描述
    下图显示“酒精”和目标变量之间存在近似线性和正相关,并且“酒精”经常与“Sulphates”相互作用。

    显示关于“挥发性酸度”的Dependence Plot

    shap.dependence_plot('volatile acidity',shap_values, X_train)
    

    在这里插入图片描述
    这是个负相关

    © Individual SHAP Value Plot — Local Interpretability(单个特征,局部解释性)

    这个图得用Jupyter,我先跳过吧。

    X_output = X_test.copy()
    X_output.loc[:,'predict'] = np.round(model.predict(X_output),2)
    random_picks = np.arange(1,330,50)#随便选点来观察
    S = X_output.iloc[random_picks]
    print(S)
    
             fixed acidity  volatile acidity  citric acid  residual sugar  chlorides  free sulfur dioxide  total sulfur dioxide  density    pH  sulphates  alcohol  predict
    1146            7.8             0.500         0.12             1.8      0.178                  6.0                  21.0  0.99600  3.28       0.87      9.8     5.51
    854             9.3             0.360         0.39             1.5      0.080                 41.0                  55.0  0.99652  3.47       0.73     10.9     5.94
    1070            9.3             0.330         0.45             1.5      0.057                 19.0                  37.0  0.99498  3.18       0.89     11.1     6.47
    697             7.0             0.650         0.02             2.1      0.066                  8.0                  25.0  0.99720  3.47       0.67      9.5     5.39
    1155            8.3             0.600         0.25             2.2      0.118                  9.0                  38.0  0.99616  3.15       0.53      9.8     5.17
    1553            7.3             0.735         0.00             2.2      0.080                 18.0                  28.0  0.99765  3.41       0.60      9.4     5.24
    99              8.1             0.545         0.18             1.9      0.080                 13.0                  35.0  0.99720  3.30       0.59      9.0     5.27
    

    对多个变量的交互进行分析

    shap_interaction_values = shap.TreeExplainer(model).shap_interaction_values(X_train)
    shap.summary_plot(shap_interaction_values, X_train, max_display=4)
    

    在这里插入图片描述

    展开全文
  • 机器学习的可解释性(总结)

    千次阅读 2020-07-18 01:08:38
    目录背景什么是可解释性可解释性的分类ante-hoc可解释性post-hoc可解释性可解释性与安全性展望解释方法设计解释方法评估 论文 机器学习模型可解释性方法、应用与安全研究综述. 背景 近年来,机器学习在计算机视觉、...


    论文 机器学习模型可解释性方法、应用与安全研究综述.

    背景

    近年来,机器学习在计算机视觉、自然语言处理、语音识别等多个领域取得了巨大的成功,机器学习模型也被广泛地应用到一些重要的现实任务中,如人脸识别、自动驾驶、恶意软件检测 和智慧医疗分析等。

    然而,由于机器学习缺乏可解释性,在应用方面受到许多制约。例如DNN模型,就如同一个黑盒,给予一个输入,得到一个决策结果,但是我们无法确切地知道它背后的决策依据以及它做出的决策是否可靠。可解释性的缺乏,将有可能给实际任务中,尤其是安全敏感任务中的许多基于DNN的应用带来严重的威胁。比如说,缺乏可解释性的自动医疗诊断模型可能给患者带来错误的治疗方案,甚至严重威胁患者的生命安全。

    什么是可解释性

    在数据挖掘和机器学习场景中,可解释性被定义为向人类解释或以呈现可理解的术语的 能力。

    • 自上而下的机器学习任务中,模型通常建立在一组统计规则和假设之上,因而可 解释性至关重要,因为它是所定义的规则和假设的基石。此外,模型可解释性是验证假设是否稳健,以及所定义的规则是否完全适合任务的重要手段。
    • 自下而上的机器学习中,实现了手动和繁重任务的自动化,即给定一批训练数 据,通过最小化学习误差,让模型自动地学习输入数据与输出类别之间的映射关系。由于模型是自动构建的,我们并不清楚它的学习过程,也不清楚其工作机制,因此,可解释性旨在帮助人们理解机器学习模型是如何进行学习的,它从数据中学到了什么,针对每一个输入它为什么会做出如此决策以及它所做的决策是否可靠等。

    可解释性的分类

    在机器学习中还有2个概念:模型准确性(accuracy)和模型复杂度(model complexity)。

    模型的准确性反映了模型的拟合能力以及在某种程度上准确预测未知样本的能力。

    模型的复杂度反映了模型结构上的复杂性,这只与模型本身有关,而与模型的训练数据无关。例如,在线性模型中,模型的复杂度由非零权重的个数来体现;在决策树模型中,模型的复杂度由树的深度体现;在神经网络模型中,模型复杂度则由神经网络的深度、宽度、模型的参数量以及模型的计算量来体现。

    模型的复杂度与模型准确性相关联,又与模型的可解释性相对立。通常情况下,结构简单的模型可解释性好,但拟合能力差,往往准确率不高。结构复杂的模型,拟合能力 强,准确性高,但由于模型参数量大、工作机制复杂、透明性低,因而可解释性又相对较差。

    机器学习模型可解释性总体上可分为2类:

    • 事前(ante-hoc)可解释性
      指通过训练结构简单、可解释性好的模型或将可解释性结合到具体的模型结构中的自解释模型使模型本身具备可解释能力。
    • 事后(post-hoc)可解释性
      指通过开发可解释性技术解释已训练好的机器学习模型。根据解释目标和解释对象的不同,post-hoc可解释性又可分为全局可解释性(global interpretability)和局部可解释性(local interpretability)。全局可解释性旨在帮助人们理解复杂模型背后的整体逻辑以及内部的工作机制,局部可解释性旨在帮助人们理解机器学习模型针对每一个输入样本的决策过程和决策依据。

    ante-hoc可解释性

    1. 自解释模型
    对于自解释模型,我们从2个角度考虑模型的可解释性和透明性,即模型整体的可模拟性(simulatability)和模型单个组件的可分解性(decomposability)。

    当我们认为某个模型是透明的,那么我们一定能从整体上完全理解一个模型,也应该能够将输入数据连同模型的参数一起,在合理的时间步骤内完成产生预测所需的每一个计算 (即整体上的可模拟性)。比如在朴素贝叶斯模型中,由于条件独立性的假设,我们可以将模型的决策过 程转化为概率运算。在线性模型中,我们可以基于模型权重,通过矩阵运算线性组合样本的特征值,复现线性模型的决策过程,其中模型权重体现了特征之间的相关关 系。而在决策树模型中,每一棵决策树都由表示特征或者属性的内部节点和表示类别的叶子节点组成,树的每一个分支代表一种可能的决策结果。决策树中每一条从根节点到 不同叶子节点的路径都代表着一条不同的决策规则,因而每一棵决策树都可以被线性化为一系列由if-then形式组成的决策规则。因此,对于新的观测样本,我们可以通过从上到下遍历决策树,结合内部节点中的条件测试,基于if-then决策规则判定样本是否必须遵循左或右分支来模拟决策树的决策过程。

    自解释模型的可分解性要求模型的每个部分,包括模型结构、模型参数,模型的每一个输入以及每一维特征都允许直观的解释。这要求自解释模型结构一定不能过于复杂。因此,自解释模型的内置可解释性与模型准确性之间始终存在一个平衡。

    2. 广义加性模型
    广义加性模型既能提高简单线性模型的准确率,又能保留线性模型良好的内置可解释性。广义加性模型一般形式为: g ( y ) = f 1 ( x 1 ) + f 2 ( x 2 ) + ⋅ ⋅ ⋅ + f n ( x n ) g(y)=f_1(x_1)+f_2(x_2)+···+f_n(x_n) g(y)=f1(x1)+f2(x2)++fn(xn)。在广义加性模型中,形函数本身可能是非线性的,每一个单特征模型可能采用一个非常复杂的形函数 f i ( x i ) f_i(x_i) fi(xi)来量化每一个特征 x i x_i xi与最终决策目标之间的关系,因而可以捕获到每一个特征与最终决策目标之间的非线性关系,因此广义加性模型准确率高于简单线性模型。又因为广义加性模型通过简单的线性函数组合每一个单特征模型得到最终的决策形式,消除了特征之间的相互作用,因此可以保留简单线性模型良好的可解释性,从而解决了复杂模型因为特征之间复杂的相关关系而削弱自身可解释性的问题。

    3. 注意力机制
    神经网络模型由于模型结构复杂,算法透明性低,因而模型本身的可解释性差。因此,神经网络模型的自身可解释性只能通过额外引入可解释性模块来实现,一种有效的方法就是引入注意力机制。

    注意力机制源于对人类认知神经学的研究。在认知科学中,由于信息处理的瓶颈,人脑可以有意或无意地从大量输入信息中选择小部分有用信息来重点处理,同时忽略其他可见的信息,这就是人脑的注意力机制。在计算能力有限的情况下,注意力机制是解决信息超载问题的一种有效手段,通过决定需要关注的输入部分,将有限的信息处理资源分配给更重要的任务。

    post-hoc可解释性

    post-hoc可解释性旨在利用解释方法或构建解释模型,解释学习模型的工作机制、决策行为和决策依据。

    1. 全局解释

    • 规则提取
      规则提取技术以难以理解的复杂模型或黑盒模型作为手点,利用可理解的规则集合生成可解释的符号描述,或从中提取可解释模型(如决策树、基于规则的模型等),使之具有与原模型相当的决策能力。然而,规则提取方法提取的规则往往不够精确,因而只能提供近似解释,不一定能反映待解释模型的真实行为。

    • 模型蒸馏
      当模型的结构过于复杂时,要想从整体上理解受训模型的决策逻辑通常是很困难的。解决该问题的一个有效途径是降低待解释模型的复杂度,而模型蒸馏(model distillation)则是降低模型复杂度的一个最典型的方法。然而,蒸馏模型只是对原始复杂模型的一种全局近似,它们之间始终存在差距。

    • 激活最大化
      激活最大化方法思想较为简单,即通过寻找有界范数的输入模式,最大限度地激活给定的隐藏单元,而一个单元最大限度地响应的输入模式可能是 一个单元正在做什么的良好的一阶表示。激活最大化解释方法是一种模型相关的解释方法,相比规则提取解释和模型蒸馏解释,其解释结果更准确,更能反映待解释模型的真实行为。然而,激活最大化方法只能用于优化连续性数据,无法直接应用于诸如文本、图数据等离散型数据,故该方法难以直接用于解释自然语言处理模型和图神经网络模型。

    2. 局部解释
    与全局可解释性不同,模型的局部可解释性以输入样本为导向,通常可以通过分析输入样本的每一维特征对模型最终决策结果的贡献来实现。经典的局部解释方法包括敏感性分析解释、局部近似解释、梯度反向传播解释、特征反演解释以及类激活映射解释等。

    • 敏感性分析
      核心思想是通过逐一改变自变量的值来解释因变量受自变量变化影响大小的规律。敏感性分析作为一种模型局部解释方法,被用于分析待解释样本的每一维特征对模型最终分类结果的影响,以提供对某一个特定决策结果的解释。
      根据是否需要利用模型的梯度信息,敏感性分析方法可分为模型相关方法和模型无关方法。模型相关方法利用模型的局部梯度信息评估特征与决策结果的相关性。在模型无关敏感性分析方法中,待解释模型可以看作是黑盒,我们无需利用模型的梯度信息,只关注待解释样本特征值变化对模型最终决策结果的影响。
      敏感性分析方法提供的解释结果通常相对粗糙且难以理解。此外,敏感性分析方法无法解释特征之间的相关关系对最终决策结果的影响。

    • 局部近似
      核心思想是利用结构简单的可解释模型拟合待解释模型针对某一输入实例的决策结果,然后基于解释模型对该决策结果进行解释。该解释方法实现简单,易于理解且不依赖待解释模型的具体结构,适于解释黑盒机器学习模型。但解释模型只是待解释模型的局部近似,因而只能捕获模型的局部特征,无法解释模型的整体决策行为。针对每一个输入实例,局部近似解释方法均需要重新训练一个解释模型来拟合待解释模型针对该实例的决策结果,因而此类方法的解释效率通常不高。此外,大多数的局部近似解释方法假设待解释实例的特征相互独立,因此无法解释特征之间的相关关系对决策结果的影响。

    • 反向传播
      核心思想是利用DNN的反向传播机制将模型的决策重要性信号从模型的输出层神经元逐层传播到模型的输入以推导输入样本的特征重要性。然而,从理论上易知,如果预测函数在输入附近变得平坦,那么预测函数相对于输入的梯度在该输入附近将变得很小,进而导致无法利用梯度信息定位样本的决策特征。此外,梯度信息只能用于定位重要特征,而无法量化特征对决策结果的重要程度,利用基于重要性或相关性反向传播的解释方法则可以解决该问题。

    • 特征反演
      尽管敏感性分析、局部近似以及梯度反向传播等方法在一定程度上可以提供对待解释模型决策结果的局部解释,但它们通常忽略了待解释模型的中间层,因而遗漏了大量的中间信息。而利用模型的中间层信息,我们能更容易地表征模型在正常工作条件下的决策行为,进而可提供更准确的解释结果。特征反演(feature inversion)作为一种可视化和理解DNN 中间特征表征的技术,可以充分利用模型的中间层信息,以提供对模型整体行为及模型决策结果的解释。特征反演解释方法可分为模型级(model-level) 解释方法和实例级(instance-level)解释方法。

    可解释性与安全性

    以冰原狼与哈士奇的分类为例,由于训练集中所有冰原狼样本图片的背景均为雪地,导致分类模型可能从训练集中学到数据偏差从而将雪作为冰原狼的分类特征,又由于验证集与训练集同分布,模型在验证集上的分类性能与在训练集上的性能同样优异,因而导致传统的模型验证方法将该模型识别为一个好的分类模型。很显然,这样的模型通常是不可靠的,一旦模型在推理阶段遇到背景为雪地的哈士奇样本图片,分类模型会做出错误的决策,而模型的这种行为将会给实际场景尤其是风险敏感场景中的真实应用带来潜在的威胁。

    模型可解释性研究的初衷是通过构建可解释的模型或设计解释方法提高模型的透明性,同时验证和评估模型决策行为和决策结果的可靠性和安全性,消除模型在实际部署应用中的安全隐患。然而,模型可解释性相关技术同样可以被攻击者利用以探测机器学习模型中的“漏洞”,因而会给机器学习模 型以及真实应用场景中尤其是风险敏感场景中的机器学习应用带来威胁。此外,由于解释方法与待解释模型之间可能存在不一致性,因而可解释系统或可解释方法本身就存在一定的安全风险。

    对于对抗样本,现存防御方法大多数是针对某一个特定的对抗样本攻击设计的静态的经验性防御,因而防御能力极其有限。然而,不管是哪种攻击方法,其本质思想都是通过向输入中添加扰动以转移模型的决策注意力,最终使模型决策出错。由于这种攻击使得模型决策依据发生变化,因而解释方法针对对抗样本的解释结果必然与其针对对应的正常样本的解释结果不同。因此,我们可以通过对比并利用这种解释结果的反差来检测对抗样本,而这种方法并不特定于某一种对抗攻击,因而可以弥补传统经验性防御的不足。

    尽管可解释性技术是为保证模型可靠性和安全性而设计的,但其同样可以被恶意用户滥用而给实际部署应用的机器学习系统带来安全威胁。比如说,攻击者可以利用解释方法探测能触发模型崩溃的模型漏洞,在对抗攻击中,攻击者还可以利用可解释方法探测模型的决策弱点或决策逻辑,从而为设计更强大的攻击提供详细的信息。

    由于采用了近似处理或是基于优化手段,大多数解释方法只能提供近似的解释,因而解释结果与模型的真实行为之间存在一定的不一致性。而最新研究表明,攻击者可以利用解释方法与待解释模型之间的这种不一致性设计针对可解释系统的新型对抗样本攻击,因而严重的威胁着可解释系统的自身安全。根据攻击目的不同,现存针对可解释系统的新型对抗样本攻击可以分为2类:1)在不改变模型的决策结果的前提下,使解释方法解释出错;2)使模型决策出错而不改变解释方法的解释结果。

    现存解释方法大多数是脆弱的,因此只能提供有限的安全保证。为保证机器学习及可解释性技术在实际部署应用中的安全,解释方法本身必须是安全的,而设计更精确的解释方法以消除解释方法与决策系统之间的不一致性则是提高解释方法鲁棒性进而消除其外在安全隐患的重要途径。

    展望

    可解释性研究当前面临的一个挑战是如何设计更精确、更友好的解释方法,消除解释结果与模型真实行为之间的不一致;第2个挑战是如何设计更科学、更统一的可解释性评估指标,以评估可解释方法解释性能和安全性。

    解释方法设计

    如何设计可解释的机器学习模型以消除模型准确性与可解释 性之间的制约是ante-hoc可解释性研究所面临的一大挑战,也是未来可解释性研究发展的一个重要趋势。

    当前post-hoc可解释性相关研究面临的巨大挑战是如何设计忠实于决策模型的安全可保障的精确解释方法,以消除解释结果与模型真实行为之间的不一致性,从而保证解释结果的可靠性和安全性。

    解释方法评估

    目前,可解释性研究领域缺乏一个用于评估解释方法的科学评估体系。

    对于ante-hoc可解释性而言,其评估挑战在于如何量化模型的内在解释能力。

    对于post-hoc可解释性而言,其评估挑战在于如何量化解释结果的保真度和一致性。

    展开全文
  • 机器学习模型可解释性方法、应用与安全研究综述 纪守领1 李进锋1 杜天宇1 李 博2 1(浙江大学计算机科学与技术学院网络空间安全研究中心 杭州 310027) 2(伊利诺伊大学香槟分校计算机科学学院 ...
  • 信道利用

    万次阅读 2019-10-22 14:26:30
    因为如果以4.1帧为标准,也就是帧比特数为三,那么在发送数据字节为128的情况下就达不到最大的信道利用率。故本题结果选择B。 例2:source:2015年真题 分析:由于确认帧的开销忽略不计,考虑发送周期即为1000B/...
  • 【土地利用变化分析】土地利用转移矩阵

    万次阅读 多人点赞 2021-05-17 14:00:44
    ​国土空间规划怎么会这么忙?...通过对得到的转移矩阵进行分析,能够得到2个时相,不同的地类之间相互转化的情况,它描述了不同的土地利用的类型在不同年份发生变化的土地类别以及发生变化的位置和..
  • 我们经常想知道土地利用在不同年份的变化过程,然而ArcGIS里面并没有现成的工具可以使用。因此,我制作了2010年到2020年的土地利用变化模式图。虽然只是两年的变化过程,但是我觉得挺有意思。所以记录下来,以便提供...
  • 利用CCA识别SSVEP信号的数学解释

    千次阅读 2020-09-05 21:10:37
    #利用CCA识别SSVEP信号的数学解释 #本篇由BCIduino脑机接口开源社区整理(公众号“BCIduino脑机接口社区”)。BCIduino脑机接口社区由来自北京航空航天大学、康奈尔大学、北京大学、首都医科大学等硕博发起成立,...
  • click(getIndex()/1.5, 725/1.5);
  • 极智开发 | 谈谈 GPU 利用

    千次阅读 2022-01-28 20:24:57
    大家好,我是极智视界,本文主要谈谈 GPU 利用率,以 Nvidia GPU 为例。
  • 解释器模式

    千次阅读 2019-09-25 20:28:33
    解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。 介绍 意图:...
  • 电子商务之部分名词解释

    千次阅读 2020-01-03 17:47:25
    电子商务——部分名词解释 目录 电子商务——部分名词解释 (1)电子商务 (2)企业资源计划ERP (3)管理信息系统 (4)人力资源管理 (5)客户关系管理 (6)供应链管理 (7)认证机构 (8)数字证书 ...
  • 机器学习模型可解释性的详尽介绍

    千次阅读 多人点赞 2019-11-26 12:22:00
    机器之心平台来源:腾讯技术工程模型可解释性方面的研究,在近两年的科研会议上成为关注热点,因为大家不仅仅满足于模型的效果,更对模型效果的原因产生更多的思考,这样的思考有助于模型和特征的优化,更能够帮助更...
  • 计网真题:信道利用率计算

    万次阅读 多人点赞 2020-07-16 22:29:44
    2012年408统考的一道计网的题目 两台主机之间的数据链路层采用后退N帧协议(GBN)传输数据,数据传输率为16kb/s,单向传播时延为270ms,数据帧长度范围是128~512字节,接收...为使信道利用率达到最高,帧序列的比特数至少?
  • 一文详解什么是可解释AI

    千次阅读 多人点赞 2021-03-03 11:43:08
    摘要:本文带来什么是可解释AI,如何使用可解释AI能力来更好理解图片分类模型的预测结果,获取作为分类预测依据的关键特征区域,从而判断得到分类结果的合理性和正确性,加速模型调优。 1. 为什么需要可解释AI? ...
  • 土地利用/土地覆盖(LUCC)——知识汇总

    万次阅读 多人点赞 2020-02-27 15:58:40
    土地利用:是一个把土地的自然生态系统变为人工生态系统的过程,是自然、经济、社会诸因素综合作用的过程,其中社会生产方式往往对土地利用起决定的作用,它是人类对土地自然属性的利用方式和利用状况,包含着人类...
  • 【log4j2漏洞复现与利用

    千次阅读 2022-01-31 21:31:01
    文章目录 漏洞简介 log4j2 教程 环境搭建 测试运行 专业名词解释及其payload分析 利用工具简介: log4j2漏洞验证(弹出计算器版) 被攻击者的log4j2 打印函数示例 攻击者执行操作 漏洞复现 log4j2漏洞验证(DNSlog版...
  • 解释型语言

    千次阅读 2019-08-01 09:29:28
    因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释型的。 Basic/Python/JavaScript / Perl /Shell等都是解释型语言。 解释型语言(英语:Interpreted language),是一种编程语言。这种类型的...
  • ML之LightGBM:基于titanic数据集利用LightGBM和shap算法实现数据特征的可解释性(量化特征对模型贡献度得分) 目录 基于titanic数据集利用LightGBM和shap算法实现数据特征的可解释性(量化特征对模型贡献度...
  • XSS漏洞利用方式汇总

    千次阅读 2020-05-04 16:20:26
    以下所有的针对XSS的利用方式都是对XSS的深一步的学习了解、请勿于未授权环境下进行非法操作!!! 一、窃取Cookie 1.1 解释   恶意攻击者通过XSS攻击,窃取其他账户的Cookie信息从而进行未授权非法操作。 1.2 ...
  • Python怎么利用多核cpu

    万次阅读 多人点赞 2018-05-06 14:15:26
    在 Python 语言的主流实现 CPython 中,GIL 是一个货真价实的全局线程锁,在解释解释执行任何 Python 代码时,都需要先获得这把锁才行,在遇到 I/O 操作时会释放这把锁。如果是纯计算的程序,没有 I/O 操作,解释...
  • webshell利用原理

    千次阅读 2019-03-03 14:55:37
    #这里只是说明并解释原理操作,并没有展示具体的渗透过程,仅仅了解webshell作用。   这样,菜刀的原理过程介绍完毕,但是存在的问题还是比较明显的,比如容易被查杀,最好做编码并且能被服务器端...
  • 具体在以后讲到基本强化学习方法的时候会再具体解释。这个策略是比贪婪策略稍微复杂一点,意思是说,我会以 ε \varepsilon ε 概率随机选择任何一个动作,否则选择Q最大的动作。该策略称为抖动策略。 利用抖动...
  • 计算机网络名词解释

    万次阅读 多人点赞 2019-01-05 17:53:05
    名词解释 ADSL Asymmetric Digital Subscriber Line,即非对称数字用户线,用数字技术对现有模拟电话用户线进行改造,使其能够承载宽带数字业务。 AN Acess Network,即接入网,用来把用户接入...
  • 模型可解释性-LIME

    千次阅读 多人点赞 2020-09-08 19:25:24
    模型可解释性 LIME的原理 LIME的想法很简单, 我们希望使用简单的模型来对复杂的模型进行解释. 这里简单的模型可以是线性模型, 因为我们可以通过查看线性模型的系数大小来对模型进行解释. 在这里,LIME只会对每一...
  • TensorFlow 显存占用率高 GPU利用率低

    千次阅读 多人点赞 2020-07-18 11:31:43
    如果解释为什么,则先了解一个背景知识,类似于CPU与内存的关系,在GPU工作流水线中,也是按照显存准备数据——GPU拿数据运算——显存准备数据——GPU拿数据运算 …的方式工作的。如果图片的分辨率太大,即使一张...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 896,389
精华内容 358,555
关键字:

利用怎么解释