DeepChem手册3.21量度

3.21 Metrics

量度是机器学习的一个非常重要的方面。不像传统的软件,算法要么有用要么没用,机器学习是有工作程度的。即到于一个模型有一个“好”的连续范围。

“量度”是一些测定模型工作得多好的函数。量度有许多不同的选择,取决于手头的模型。

3.21.1 量度工具

量度工具允许一些共用的操作如来或到one-hot表示的切换。

to_one_hot(y: numpy.ndarray, n_classes: int = 2)→ numpy.ndarray

转换标签向量到one-hot编码。

转换y到(N, n_classes)形状的向量具有one-hot编码。假定y取值0 到n_classes – 1。

参数

 y (np.ndarray) – 形状为 (N,) 或 (N, 1)的向量

 n_classes (int, default 2) – 如指定用这个作为类的数量。否则将试图归因于n_classes = max(y) + 1(对于数组)而n_classes=2(对于标量)。 注意这个参数只有在mode==”classification”时有值。

返回形状为(N, n_classes)的numpy数组。

返回类型np.ndarray。

from_one_hot(y: numpy.ndarray, axis: int = 1) →numpy.ndarray

从one-hot编码转换标签向量。

参数

 y (np.ndarray) – 形状为 (n_samples, num_classes)向量

 axis (int, optional (default 1)) – 进行归约的one-hot编码轴。

返回形状 (n_samples,)的Numpy数组。

Return类型np.ndarray

3.21.2 Metric Shape Handling量度形状处理

处理量度最有技巧的部分是保证输入权重、预测和标签的形状及处理正确。这特别有挑战因为 DeepChem支持多任务多分类模型,意味着必须小心的处理形状以防错误。DeepChem维护如下的工具函数试图便于你处理形状。

normalize_weight_shape(w: numpy.ndarray, n_samples: int, n_tasks: int)→ numpy.ndarray

一个用于更正权重数组的形状的函数。

这个函数用于正态化指定权重数组的形状。

参数

 w (np.ndarray) – w 可以是 None 或标量或 形状为  (n_samples,)的np.ndarray或

形状为 (n_samples, n_tasks) 的np.ndarray。如 w 是标量,假定所有的样本/任务有相同的权重。

n_samples (int) – 数据集中的样本的数量。如 w 为 None, 我们应用n_samples = w.shape[0],如果 w 是ndarray。

 n_tasks (int) – 任务数。如 w 是 2d ndarray,则我们应用w.shape[1]== n_tasks。

示例

>>> import numpy as np

>>> w_out = normalize_weight_shape(None, n_samples=10, n_tasks=1)

>>> (w_out == np.ones((10, 1))).all()

True

返回 w_out – 形状 (n_samples, n_tasks)的数组。

返回类型 np.ndarray

normalize_labels_shape(y: numpy.ndarray, mode: Optional[str] = None, n_tasks: Optional[int] =

None, n_classes: Optional[int] = None)→numpy.ndarray

一个用于更正标签形状的工具函数

参数

 y (np.ndarray) – y是 形状为 (N,)或 (N, n_tasks)或 (N, n_tasks, 1)的数组。

 mode (str, default None) –如模式型是“分类”或“回归”的,试图用应数据转换。

  n_tasks (int, default None) – 希望处理的这个类的任务数。

n_classes (int, default 2) – 如指定用这个作为类的数量。否则将试图归因于n_classes = max(y) + 1(对于数组)而n_classes=2(对于标量)。 注意这个参数只有在mode==”classification”时有值。

返回 y_out – 如 mode==”classification”, y_out 是形状为 (N, n_tasks, n_classes)数组。如mode==”regression”, y_out是形状(N, n_tasks)数组。

返回类型np.ndarray。

normalize_prediction_shape(y: numpy.ndarray, mode: Optional[str] = None, n_tasks: Optional[

int] = None, n_classes: Optional[int] = None)

一个更正提供的预测的工具函数。

这个函数计算期望分类的输入有均一形状(N, n_tasks,n_classes)的类及回归的输入有均一形状(N, n_tasks)。这个函数正态化提供的输入以得到希望的形状。

示例

>>> import numpy as np

>>> y = np.random.rand(10)

>>> y_out = normalize_prediction_shape(y, "regression", n_tasks=1)

>>> y_out.shape

(10, 1)

参数

 y (np.ndarray) – 如 mode==”classification”, y是 形状为 (N,)或 (N, n_tasks)或  (N, n_tasks, n_classes)的数组。 如 mode==”regression”, y 是 形状为 (N,)或 (N, n_tasks)或 (N, n_tasks, 1)的数组。

mode (str, default None) –如模式型是“分类”或“回归”的,试图用应数据转换。

n_tasks (int, default None) – 希望处理的这个类的任务数。

? n_classes (int, default None) –如指定用这个作为类的数量。否则将试图归因于n_classes = max(y) + 1(对于数组)而n_classes=2(对于标量)。 注意这个参数只有在mode==”classification”时有值。

返回 y_out – 如 mode==”classification”, y_out 是形状为 (N, n_tasks, n_classes)数组。如mode==”regression”, y_out是形状(N, n_tasks)数组。

返回类型np.ndarray。

handle_classification_mode(y: numpy.ndarray, classification_handling_mode: Optional[str] =

None, threshold_value: Optional[float] = None)→ numpy.ndarray

处理分类模型

转换预测使它们有正确的分类模型。

参数

 y (np.ndarray) – 必须是形状 (N, n_tasks, n_classes)

 classification_handling_mode (str, default None) – 对于分类问题DeepChem模型默认预测类的概率。这意味着指定的单任务预测,形状正态化后,DeepChem预测将会是一个(N, n_classes)形状的numpy数组带有类的概率。classification_handling_mode是个字串,指示这个方法如何处理转换这些概率。它可以取如下值:

 - None: 默认值。传递 y_pred 到self.metric.

 -“threshold”: 用threshold_predictions 来阈值 y_pred。用threshold_value 作为期望的阈值。

– ”threshold-one-hot”: 用 threshold_predictions来阈值 y_pred,用 threshold_

values, 然后用 to_one_hot 到输出。

 threshold_value (float, default None) – 如设置, 且classification_handling_mode为 “threshold”或“threshold-one-hot” 应用阈值操作到值使用这个阈值。这个选项仅对二值分类任务敏感。如为浮点,这将应用为二值分类值。

Returns y_out –如 classification_handling_mode 为None, 然后形状为 (N, n_tasks, n_classes)。如 classification_handling_mode 为“threshold”, 然后形状为 (N, n_tasks)。如 `classification_handling_mode 是“threshold-one-hot”, 然后形状为 `(N, n_tasks, n_classes)”

返回类型 np.ndarray。

3.21.3 量度函数

DeepChem有许多不同的量度用于测量模型的性能。用些 (不是全部) 量度直接从sklearn评分。

matthews_corrcoef(y_true, y_pred, *, sample_weight=None)

计算Matthews相关系数 (MCC)。

Matthews相关系数作为二分或多分类的机器学习量度 。它考虑真阳真阴和假阳假阴。

它通常被认为是平衡测量,即使类的大小不同也可以使用。MCC本质是-1到+1的相关系数。系数为+1表示预测能力很好,0表示随机预测的平均,-1是逆的预测。这个统计量也称为phi相关系数。 [来源:Wikipedia]

支持二分或多分类标签。只有二分类情况这个值与真阳真阴和假阳假阴的信息相关。

参数

 y_true (array, shape = [n_samples]) – 真阳 (正确)目标值。

 y_pred (array, shape = [n_samples]) – 分类器返回的评估目标。

 sample_weight (array-like of shape (n_samples,), default=None)– 样本权重。

返回 mcc – Matthews相关系数 (系数为+1表示预测能力很好,0表示随机预测的平均,-1是逆的预测)。

返回类型 浮点

示例

>>> from sklearn.metrics import matthews_corrcoef

>>> y_true = [+1, +1, +1, -1]

>>> y_pred = [+1, -1, +1, +1]

>>> matthews_corrcoef(y_true, y_pred)

-0.33...

recall_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None,

zero_division='warn')

计算召回。

召回是tp / (tp + fn)的比值,其中tp是真阳数,fn是假阴数。召回直观上是分类器找到所有阳性样本的能力。

最好的值为1最差值为0。

参数

y_true (1d array-like, or label indicator array / sparse

matrix) – 真阳(正确)目标值。

y_pred (1d array-like, or label indicator array / sparse

matrix) – 分类器返回的评估目标。

labels (array-like, default=None) – 当average != 'binary'时包括的标签集合,及平均值为None时的它们的顺序。可以不包括数据中的标签,例如计算多分类平均值忽略主要的负类,不存在于数据的标签将为宏平均的0成份。对于多分类目标,标签是列索引的。默认情况,y_true和y_pred中所有的标签是按序使用的。

pos_label (str or int, default=1) – average='binary'以及数据为二值时报告的类。如果数据为多分类和多标签,它将忽略;设置labels=[pos_label]以及average != 'binary',将只报告那个类的分值。

 average ({'micro', 'macro', 'samples', 'weighted', 'binary'}

default='binary') – 这个参数对于多分类/多标签目标需要。如为None,返回每个类的分。

否则它确定对数据进行平均的类型:'binary': 仅报告pos_label 指定类的结果。仅当targets (y_{true,pred})为二值时适用。

'micro': 通过计算总的真阳、假阴、假阳数全局地计算量度。

'macro': 为每个标签计算量度,找到未加权的平均值。 它不考虑不增衡的标签。

'weighted': 为每个标签计算量度,找到加权平均值(每个标签真的例数).这为不平衡标签改变‘macro’; 它会得到不在准确度与召回之间的F-score。

'samples': 为每个实例计算量度,找到它们的均值 (仅对多标签分类有意义,它不同于accuracy_score()).

sample_weight (array-like of shape (n_samples,), default=None)

– 样本权重。

 zero_division ("warn", 0 or 1, default="warn") – 设置当有零除数时的返回值。如设置为“warn”,它作为0,但会出现警告。

Returns recall – (n_unique_labels,) 二分类中阳性分类的召回或多分类任务中每个类的召回的加权平值。

返回类型 浮点 (如平均值不为 None)或浮点数组。

参见:

precision_recall_fscore_support, balanced_accuracy_score,

multilabel_confusion_matrix

注意

当真阳 + 假阴 == 0, 召回返回 0 并出现UndefinedMetricWarning。这个行为可以被zero_division修饰。

示例

>>> from sklearn.metrics import recall_score

>>> y_true = [0, 1, 2, 0, 1, 2]

>>> y_pred = [0, 2, 1, 0, 0, 1]

>>> recall_score(y_true, y_pred, average='macro')

0.33...

>>> recall_score(y_true, y_pred, average='micro')

0.33...

>>> recall_score(y_true, y_pred, average='weighted')

0.33...

>>> recall_score(y_true, y_pred, average=None)

array([1., 0., 0.])

>>> y_true = [0, 0, 0, 0, 0, 0]

>>> recall_score(y_true, y_pred, average=None)

array([0.5, 0. , 0. ])

>>> recall_score(y_true, y_pred, average=None, zero_division=1)

array([0.5, 1. , 1. ])

r2_score(y_true, y_pred, *, sample_weight=None, multioutput='uniform_average')

R^2 (决定系数) 回归分值函数。

最可能的值为1.0并且它可能是负的 (因为模型可能是错的). 常数模型总是准确预测y值, 不管输入的特征, 将得到R^2分为0.0.

参数

y_true (array-like of shape (n_samples,) or (n_samples,

n_outputs)) – 真阳目标值。

y_pred (array-like of shape (n_samples,) or (n_samples,

n_outputs)) – 评估目标值。

sample_weight (array-like of shape (n_samples,), default=None)

– 样本权重。

 multioutput ({'raw_values', 'uniform_average',

'variance_weighted'}, array-like of shape (n_outputs,) or

None, default='uniform_average') – 确定多输出分的聚合。数组样值确定平均分值的权重。默认“uniform_average”。

’raw_values’ : 当有我输出的输入时返回全部分值。

’uniform_average’ : 用统一权重平均所有输出的分值。

’variance_weighted’ : 所有输出的分值平均,用不同输出的方差加权。

返回 z – R^2分值或分值的ndarray如果‘multioutput’为‘raw_values’。

返回类型浮点或浮点ndarray。

注意

这不是对称函数

不像其它的分值, R^2可以是负的 (它不一定的R的平方).

这个量度对于单样本没有良好的定义且会返回 NaN值如果 n_samples 小于2时。

示例

>>> from sklearn.metrics import r2_score

>>> y_true = [3, -0.5, 2, 7]

>>> y_pred = [2.5, 0.0, 2, 8]

>>> r2_score(y_true, y_pred)

0.948...

>>> y_true = [[0.5, 1], [-1, 1], [7, -6]]

>>> y_pred = [[0, 2], [-1, 2], [8, -5]]

>>> r2_score(y_true, y_pred,

... multioutput='variance_weighted')

0.938...

>>> y_true = [1, 2, 3]

>>> y_pred = [1, 2, 3]

>>> r2_score(y_true, y_pred)

1.0

>>> y_true = [1, 2, 3]

>>> y_pred = [2, 2, 2]

>>> r2_score(y_true, y_pred)

0.0

>>> y_true = [1, 2, 3]

>>> y_pred = [3, 2, 1]

>>> r2_score(y_true, y_pred)

-3.0

mean_squared_error(y_true, y_pred, *, sample_weight=None, multioutput='uniform_average',

squared=True)

均方误差回归损失。

参数

y_true (array-like of shape (n_samples,) or (n_samples,

n_outputs)) – 真阳目标值。

y_pred (array-like of shape (n_samples,) or (n_samples,

n_outputs)) – 评估目标值。

sample_weight (array-like of shape (n_samples,), default=None)

– 样本权重。

 multioutput ({'raw_values', 'uniform_average',

'variance_weighted'}, array-like of shape (n_outputs,) or

None, default='uniform_average') – 确定多输出分的聚合。数组样值确定平均分值的权重。

’raw_values’ : 当有多输出的输入时返回全部分值。

’uniform_average’ : 用统一权重平均所有输出的分值。

 squared (bool, default=True) – 如为True返回MSE值,如为False返回RMSE值。

返回 损失 – 非负的浮点值 (最佳值为0.0), 或浮点数组, 每个值对一个目标。

返回类型 浮点或浮点的ndarray。

示例

>>> from sklearn.metrics import mean_squared_error

>>> y_true = [3, -0.5, 2, 7]

>>> y_pred = [2.5, 0.0, 2, 8]

>>> mean_squared_error(y_true, y_pred)

0.375

>>> y_true = [3, -0.5, 2, 7]

>>> y_pred = [2.5, 0.0, 2, 8]

>>> mean_squared_error(y_true, y_pred, squared=False)

0.612...

>>> y_true = [[0.5, 1],[-1, 1],[7, -6]]

>>> y_pred = [[0, 2],[-1, 2],[8, -5]]

>>> mean_squared_error(y_true, y_pred)

0.708...

>>> mean_squared_error(y_true, y_pred, squared=False)

0.822...

>>> mean_squared_error(y_true, y_pred, multioutput='raw_values')

array([0.41666667, 1. ])

>>> mean_squared_error(y_true, y_pred, multioutput=[0.3, 0.7])

0.825...

mean_absolute_error(y_true, y_pred, *, sample_weight=None, multioutput='uniform_average')

平均绝对误差回归损失。

参数

y_true (array-like of shape (n_samples,) or (n_samples,

n_outputs)) – 真阳目标值。

y_pred (array-like of shape (n_samples,) or (n_samples,

n_outputs)) – 评估目标值。

sample_weight (array-like of shape (n_samples,), default=None)

– 样本权重。

 multioutput ({'raw_values', 'uniform_average',

'variance_weighted'}, array-like of shape (n_outputs,) or

None, default='uniform_average') – 确定多输出分的聚合。数组样值确定平均分值的权重。默认“uniform_average”。

’raw_values’ : 当有我输出的输入时返回全部分值。

’uniform_average’ : 用统一权重平均所有输出的分值。

返回 损失 – 如多输出为‘raw_values’, 则为每个输出返回平均色对误差。

如多输出为‘uniform_average’ 或权重的数组, 则返回所有输出的加权平均。

MAE 输出是非负的浮点。最佳值为 0.0。

返回类型为浮点或浮点数组

示例

>>> from sklearn.metrics import mean_absolute_error

>>> y_true = [3, -0.5, 2, 7]

>>> y_pred = [2.5, 0.0, 2, 8]

>>> mean_absolute_error(y_true, y_pred)

0.5

>>> y_true = [[0.5, 1], [-1, 1], [7, -6]]

>>> y_pred = [[0, 2], [-1, 2], [8, -5]]

>>> mean_absolute_error(y_true, y_pred)

0.75

>>> mean_absolute_error(y_true, y_pred, multioutput='raw_values')

array([0.5, 1. ])

>>> mean_absolute_error(y_true, y_pred, multioutput=[0.3, 0.7])

0.85...

precision_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None,

zero_division='warn')

计算精确度.

精确度是tp / (tp + fp)的比值,其中 tp是真阳数,fp是假阳数。精确度直观的是分类器不会把假的样本标记为真的能力。

最佳值为1最差值为 0。

参数

y_true (array-like of shape (n_samples,) or (n_samples,

n_outputs)) – 真阳目标值。

y_pred (array-like of shape (n_samples,) or (n_samples,

n_outputs)) – 评估目标值。

 labels (array-like, default=None) – 当average != 'binary'时包括标签的集合,及它们的顺序如果均值为None时。数据中的标签可以被排除,如计算多分类均值时忽略主要的负类,数据中不出现的标签将在宏均值中为0成份.对于多分类标签,标签为列索引。默认地,y_true

和y_pred 所有标签是按序使用的。

pos_label (str or int, default=1) – 报告的类当average='binary' 以及数据为二值时。如果数据是多分类或多标签,这将忽略; 设置labels=[pos_label]以及average != 'binary' 将仅为标签报告分值。

 average ({'micro', 'macro', 'samples', 'weighted', 'binary'}

default='binary') – 多分类或多标签目标需要这个参数。

如为None, 返回每个分类分值。否则, 这确定对数据平均的类型。

'binary': 仅为pos_label 指定的类报告结果。仅当目标(y_{true,pred})为二值时适用。

'micro': 通过计算总的真阳数、假阴数、假阳数全局的计算量度。

'macro': 为每个标签计算量度,找到它们的未加权均值。这不考虑不平衡的标签。

'weighted': 为每个标签计算量度,通过支持(每个标签真例数)找到加权均值。这为不平衡标签改变‘macro’;它得到不在精确度和召回间的F-score。

'samples': 为每个实例计算量度,找到它们的均值(仅对多标签分类有意义,不同于accuracy_score()).

 sample_weight (array-like of shape (n_samples,), default=None)

– 样本权重.

 zero_division ("warn", 0 or 1, default="warn") – 当有零除数时的返回值,如设置为 “warn”, 将作为 0, 但会出现报警。

返回 精确度 – (n_unique_labels,) 二分类中正分类的精确度,或多分类任务的每个类的精确度的加权均值。

返回类型 浮点 (如均值不为 None)或数组。

参见:

precision_recall_fscore_support, multilabel_confusion_matrix

注意

当真阳 + 假阳 == 0时, 精确度返回 0 并出现UndefinedMetricWarning. 这个行为可以被zero_division修改。

示例

>>> from sklearn.metrics import precision_score

>>> y_true = [0, 1, 2, 0, 1, 2]

>>> y_pred = [0, 2, 1, 0, 0, 1]

>>> precision_score(y_true, y_pred, average='macro')

0.22...

>>> precision_score(y_true, y_pred, average='micro')

0.33...

>>> precision_score(y_true, y_pred, average='weighted')

0.22...

>>> precision_score(y_true, y_pred, average=None)

array([0.66..., 0. , 0. ])

>>> y_pred = [0, 0, 0, 0, 0, 0]

>>> precision_score(y_true, y_pred, average=None)

array([0.33..., 0. , 0. ])

>>> precision_score(y_true, y_pred, average=None, zero_division=1)

array([0.33..., 1. , 1. ])

precision_recall_curve(y_true, probas_pred, *, pos_label=None, sample_weight=None)

为不同的概率阈计算精确度-召回对。

注意:这个实施仅限于二分类任务。

精确度是tp / (tp + fp)的比值,其中 tp是真阳数,fp是假阳数。精确度直观的是分类器不会把假的样本标记为真的能力。

召回是tp / (tp + fn)比值,其中tp 是是真阳数,fp是假阳数。召回直观的是分类器找到所有阳性样本的能力。精确度和召回的值为1.到0.,没有相应的阈值。这确保图从 y轴开始。

参数

y_true (ndarray of shape (n_samples,)) –真二值标签。如标签不为 {-1, 1} 或{0, 1}, 则 pos_label 应显示给出。

 probas_pred (ndarray of shape (n_samples,)) –评估决定函数的概率或输出。

 pos_label (int or str, default=None) – 阳性类的标签。当pos_label=None, 如 y_true 在 {-1, 1} 或 {0, 1}, pos_label 设为1, 否则将出现错误。

? sample_weight (array-like of shape (n_samples,), default=None)

– 样本权重。

返回

precision (ndarray of shape (n_thresholds + 1,)) – 精确度值使得元素i是分值 >= thresholds[i]的预测精确度且最后一个元素为1.

recall (ndarray of shape (n_thresholds + 1,)) – 下降召回值使得元素i是分值 >= thresholds[i]

的预测召回且最后一个元素为0。

thresholds (ndarray of shape (n_thresholds,)) – 对计算精确度和召回的决定函数增加阈值。

n_thresholds <= len(np.unique(probas_pred)).

参见:

plot_precision_recall_curve Plot Precision Recall Curve for binary classifiers.

PrecisionRecallDisplay Precision Recall visualization.

average_precision_score Compute average precision from prediction scores.

det_curve Compute error rates for different probability thresholds.

roc_curve Compute Receiver operating characteristic (ROC) curve.

示例

>>> import numpy as np

>>> from sklearn.metrics import precision_recall_curve

>>> y_true = np.array([0, 0, 1, 1])

>>> y_scores = np.array([0.1, 0.4, 0.35, 0.8])

>>> precision, recall, thresholds = precision_recall_curve(

... y_true, y_scores)

>>> precision

array([0.66666667, 0.5 , 1. , 1. ])

(continues on next page)

>>> recall

array([1. , 0.5, 0.5, 0. ])

>>> thresholds

array([0.35, 0.4 , 0.8 ])

auc(x, y)

用梯形法则计算曲线下面积 (AUC)。

这是个通用函数,给定曲线上的点。对于ROC曲线下的面积的计算见roc_auc_score(). 对于汇总精确度-召回曲线的代替方法,见average_precision_score().

参数

 x (ndarray of shape (n,)) – x 坐标。这必须为单调升或单调降。

 y (ndarray of shape, (n,)) – y 坐标。

返回 auc

返回类型 浮点

另见:

roc_auc_score Compute the area under the ROC curve.

average_precision_score Compute average precision from prediction scores.

precision_recall_curve Compute precision-recall pairs for different probability thresholds.

示例

>>> import numpy as np

>>> from sklearn import metrics

>>> y = np.array([1, 1, 2, 2])

>>> pred = np.array([0.1, 0.4, 0.35, 0.8])

>>> fpr, tpr, thresholds = metrics.roc_curve(y, pred, pos_label=2)

>>> metrics.auc(fpr, tpr)

0.75

jaccard_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None,

zero_division='warn')

Jaccard相似系数分值.

Jaccard 指数 [1], 或Jaccard 相似系数, 定义为两个标签集的交集和并集的比值, 用于比较真实标签与预测标签的相似性。

参数

 y_true (1d array-like, or label indicator array / sparse

matrix) – 真阳标签.

 y_pred (1d array-like, or label indicator array / sparse

matrix) – 分类器返回的预测标签。

 labels (array-like of shape (n_classes,), default=None) – 当average != 'binary'时的标签集合,以及均值为None时的顺序。数据中出现的标签可以排除,如计算多分类均值忽略主负分类,不在数据中的标签会得到宏均值的0元素。对于多标签任务,标签是列的索引。默认的,所有y_true和y_pred的标签按序使用。

 pos_label (str or int, default=1) – 当average='binary'以及数据为二值时报告的类。当数据为多分类或多标签时,将被忽略,设置labels=[pos_label] 以及average != 'binary'将仅为标签报告分值。

 average ({None, 'micro', 'macro', 'samples', 'weighted',

'binary'}, default='binary') – 如为None, 返回每个类的分值。否则,它确定数据均值的类型。 'binary': 仅报告pos_label 指定的分类的结果。仅当目标(y_{true,pred})为二值时适用。

'micro': 通过计算总的真阳数、假阴数、假阳数全局的计算量度。

'macro': 为每个标签计算量度,找到它们的未加权均值。这不考虑不平衡的标签。

'weighted': 为每个标签计算量度,通过支持(每个标签真例数)找到加权均值。这为不平衡标签改变‘macro’;它得到不在精确度和召回间的F-score。

'samples': 为每个实例计算量度,找到它们的均值(仅对多标签分类有意义,不同于accuracy_score()).

 sample_weight (array-like of shape (n_samples,), default=None)

– 样本权重.

 zero_division ("warn", 0 or 1, default="warn") – 当有零除数时的返回值,如设置为 “warn”, 将作为 0, 但会出现报警。

返回 分值

返回类型 浮点  (如均值不为 None)或数组, 形状 = [n_unique_labels]

另见:

accuracy_score, f_score, multilabel_confusion_matrix

注意

jaccard_score() 可能是差的量度,当某些样本或类没有阳性样本时。当没有真的或预测的标签时Jaccard无定义,我们的实施将返回0分值和报警。

示例

>>> import numpy as np

>>> from sklearn.metrics import jaccard_score

>>> y_true = np.array([[0, 1, 1],

... [1, 1, 0]])

>>> y_pred = np.array([[1, 1, 1],

... [1, 0, 0]])

In the binary case:

>>> jaccard_score(y_true[0], y_pred[0])

0.6666...

In the multilabel case:

>>> jaccard_score(y_true, y_pred, average='samples')

0.5833...

>>> jaccard_score(y_true, y_pred, average='macro')

0.6666...

>>> jaccard_score(y_true, y_pred, average=None)

array([0.5, 0.5, 1. ])

In the multiclass case:

>>> y_pred = [0, 2, 1, 2]

>>> y_true = [0, 1, 2, 2]

>>> jaccard_score(y_true, y_pred, average=None)

array([1. , 0. , 0.33...])

f1_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None,

zero_division='warn')

计算F1 分值,也称为平衡F-score或 F-measure.

F1 分可以解释为精确度和召回的加权平均,F1分达佳值为1最差值为 0。精确度和召回对于F1分的贡献均等。

F1分计算公式为:

F1 = 2 * (precision * recall) / (precision + recall)

多标签分类情况, 这是每个分类的F1分的加权均值,取决于均值参数。

参数

 y_true (1d array-like, or label indicator array / sparse

matrix) –真阳目标值。

y_pred (1d array-like, or label indicator array / sparse

matrix) –评估目标值。

 labels (array-like, default=None) – 当average != 'binary'时包括标签的集合,及它们的顺序如果均值为None时。数据中的标签可以被排除,如计算多分类均值时忽略主要的负类,数据中不出现的标签将在宏均值中为0成份.对于多分类标签,标签为列索引。默认地,y_true

和y_pred 所有标签是按序使用的。

 pos_label (str or int, default=1) – 报告的类当average='binary' 以及数据为二值时。如果数据是多分类或多标签,这将忽略; 设置labels=[pos_label]以及average != 'binary' 将仅为标签报告分值。

 average ({'micro', 'macro', 'samples','weighted', 'binary'}

or None, default='binary') – 多分类或多标签目标需要这个参数。

如为None, 返回每个分类分值。否则, 这确定对数据平均的类型。

'binary': 仅为pos_label 指定的类报告结果。仅当目标(y_{true,pred})为二值时适用。

'micro': 通过计算总的真阳数、假阴数、假阳数全局的计算量度。

'macro': 为每个标签计算量度,找到它们的未加权均值。这不考虑不平衡的标签。

'weighted': 为每个标签计算量度,通过支持(每个标签真例数)找到加权均值。这为不平衡标签改变‘macro’;它得到不在精确度和召回间的F-score。

'samples': 为每个实例计算量度,找到它们的均值(仅对多标签分类有意义,不同于accuracy_score()).

 sample_weight (array-like of shape (n_samples,), default=None)

– 样本权重.

 zero_division ("warn", 0 or 1, default="warn") – 当有零除数时的返回值,如设置为 “warn”, 将作为 0, 但会出现报警。

返回 f1_score – 二分类中阳性分类的F1值或或多分类任务的每个类的F1值的加权均值。

返回类型号浮点或浮点数组形状 = [n_unique_labels]

参见:

fbeta_score, precision_recall_fscore_support, jaccard_score,

multilabel_confusion_matrix

示例

>>> from sklearn.metrics import f1_score

>>> y_true = [0, 1, 2, 0, 1, 2]

>>> y_pred = [0, 2, 1, 0, 0, 1]

>>> f1_score(y_true, y_pred, average='macro')

0.26...

>>> f1_score(y_true, y_pred, average='micro')

0.33...

>>> f1_score(y_true, y_pred, average='weighted')

(continues on next page)

0.26...

>>> f1_score(y_true, y_pred, average=None)

array([0.8, 0. , 0. ])

>>> y_true = [0, 0, 0, 0, 0, 0]

>>> y_pred = [0, 0, 0, 0, 0, 0]

>>> f1_score(y_true, y_pred, zero_division=1)

1.0...

注意

当真阳+假阳==0时,精确度无定义。当真阳+假阴==0时,召回无定义。这种情况,默认的量度以及f-score设为0,并出现UndefinedMetricWarning。这个行为可以被zero_division修改。

roc_auc_score(y_true, y_score, *, average='macro', sample_weight=None, max_fpr=None,

multi_class='raise', labels=None)

从预测分计算ROC曲线下面积。

注意: 这个实施可以用于二分类,多任务和多标签分类,但有些限制(见参数)

参数

 y_true (array-like of shape (n_samples,) or (n_samples,

n_classes)) – 真标签或二值标签提示,二分或多分类标签期望形状为 (n_samples,) 多标签情况二值标签提示的形状为 (n_samples, n_classes).

 y_score (array-like of shape (n_saples,) or (n_samples,

n_classes)) –目标分.

– 二分情况,对应数组的形状为 (n_samples,). 可以提供概率评估和非阈值决定值。概率评估对应于大的标签的概率,如评估器。

classes_[1] 及 estimator.predict_proba(X, y)[:, 1]. 决定值对应于

to the output of estimator.decision_function(X, y)输出。

– 多分类情况,它对应于predict_proba方法提供的概率评估的数组 (n_samples, n_classes) 。 所有可能分类的概率评估之和为1。另外,分类分值的顺序必须与标签对应,如提供,或对应于y_true标签的数值或字典顺序。

– 多标签情况,对应于 (n_samples, n_classes)数组。概率评估由predict_proba 方法提供。

non-thresholded决定值由decision_function方法提供。概率评估对应于分类器每个输出的大标签类的概率。

? average ({'micro', 'macro', 'samples', 'weighted'} or None,

default='macro') – 如为None, 返回每个分类分值。否则, 这确定对数据平均的类型。注意: 多分类 ROC AUC当前只处理‘macro’ 和‘weighted’ 均值。

'micro': 通过考虑标签提示矩阵每一个元素作为标签全局地计算量度。

'macro': 为每个标签计算量度,找到未加权均值。这不考虑不平衡标签。

'weighted': 为每个标签计算量度,通过支持(每个标签真例数)找到加权均值。

'samples': 为每个实例计算量度,找到它们的均值。

当y_true为二值时忽略。

 sample_weight (array-like of shape (n_samples,), default=None)

– 样本权重。

 max_fpr (float > 0 and <= 1, default=None) – 如为 None, 返回标准的偏 AUC [2]在范围 [0, max_fpr]。对于多分类情况,max_fpr, 应等于零或 1.0 作为 AUC ROC偏计算 ,当前不支持多分类。

 multi_class ({'raise', 'ovr', 'ovo'}, default='raise') – 仅用于多分类目标。确定配置使用的类型。默认值会出现错误,所以,'ovr' 或'ovo' 必须显式传递。

'ovr':  One-vs-rest的缩写. 为每个分类对rest [3]_计算AUC。

这处理多分类情况与某些多标签情况方法相同。 对不平衡分类敏感,即使average == 'macro', 因为类不平衡影响每的rest’组的组成。

ovo':  One-vs-one的缩写。计算所有可能分类的成对组合的AUC。当average == 'macro'对类不平衡敏感。

 labels (array-like of shape (n_classes,), default=None) – 仅用于多分类目标。标签列表索引y_score分类。如为 None,使用y_true标签的数值或字典顺序。

返回 auc

返回类型 浮点

参见:

average_precision_score Area under the precision-recall curve.

roc_curve Compute Receiver operating characteristic (ROC) curve.

plot_roc_curve Plot Receiver operating characteristic (ROC) curve.

5 Hand, D.J., Till, R.J. (2001). A Simple Generalisation of the Area Under the ROC Curve for Multiple Class Classification Problems. Machine

Learning, 45(2), 171-186.

示例

Binary case:

>>> from sklearn.datasets import load_breast_cancer

>>> from sklearn.linear_model import LogisticRegression

>>> from sklearn.metrics import roc_auc_score

>>> X, y = load_breast_cancer(return_X_y=True)

>>> clf = LogisticRegression(solver="liblinear", random_state=0).fit(X, y)

>>> roc_auc_score(y, clf.predict_proba(X)[:, 1])

0.99...

>>> roc_auc_score(y, clf.decision_function(X))

0.99...

Multiclass case:

>>> from sklearn.datasets import load_iris

>>> X, y = load_iris(return_X_y=True)

>>> clf = LogisticRegression(solver="liblinear").fit(X, y)

>>> roc_auc_score(y, clf.predict_proba(X), multi_class='ovr')

0.99...

Multilabel case:

>>> from sklearn.datasets import make_multilabel_classification

>>> from sklearn.multioutput import MultiOutputClassifier

>>> X, y = make_multilabel_classification(random_state=0)

>>> clf = MultiOutputClassifier(clf).fit(X, y)

>>> # get a list of n_output containing probability arrays of shape

>>> # (n_samples, n_classes)

>>> y_pred = clf.predict_proba(X)

>>> # extract the positive columns for each output

>>> y_pred = np.transpose([pred[:, 1] for pred in y_pred])

>>> roc_auc_score(y, y_pred, average=None)

array([0.82..., 0.86..., 0.94..., 0.85... , 0.94...])

>>> from sklearn.linear_model import RidgeClassifierCV

>>> clf = RidgeClassifierCV().fit(X, y)

>>> roc_auc_score(y, clf.decision_function(X), average=None)

array([0.81..., 0.84... , 0.93..., 0.87..., 0.94...])

accuracy_score(y_true, y_pred, *, normalize=True, sample_weight=None)

准确分类分值。

多标签分类,这个函数计算子集准确度。样本预测标签的集合必须准确匹配对应的y_true标签。

参数

 y_true (1d array-like, or label indicator array / sparse

matrix) – 真阳目标值。

 y_pred (1d array-like, or label indicator array / sparse

matrix) – 分类器返回的预测标签。

 normalize (bool, default=True) – 如False, 返回准确分类样本的数目。否则返回准确分类样本比例。

 sample_weight (array-like of shape (n_samples,), default=None)

– 样本权重

返回

分值 – 如 normalize == True, 返回准确分类样本比例 (浮点),否则返回准确分类样本的数目 (int)。

最佳性能为1,当 normalize == True 及normalize == False样本数。

返回浮点

另见:

jaccard_score, hamming_loss, zero_one_loss

注意

二分或多分类时,这个函数等同于jaccard_score函数。

示例

>>> 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

In the multilabel case with binary label indicators:

>>> import numpy as np

>>> accuracy_score(np.array([[0, 1], [1, 1]]), np.ones((2, 2)))

0.5

balanced_accuracy_score(y_true, y_pred, *, sample_weight=None, adjusted=False)

计算平衡的准确度。

二分或多分类平衡的准确度问题以处理不平衡数据集。它定义为每个类的平均召回。最佳值为1最差值为0,当adjusted=False。

参数

 y_true (1d array-like) – 真阳目标值。.

 y_pred (1d array-like) – 评估目标值.

 sample_weight (array-like of shape (n_samples,), default=None)

– 样本权重

 adjusted (bool, default=False) – 当真时, 结果随机调节,所以随机的性能为0, 良好的性能为1.

返回 balanced_accuracy

返回类型 浮点

参见:

recall_score, roc_auc_score

注意

有些文献提出替代的平衡准确性定义。我们的定义等同于accuracy_score() 具有class-balanced 样本权重,二分情况共用期望的特征。

示例

>>> from sklearn.metrics import balanced_accuracy_score

>>> y_true = [0, 1, 0, 0, 1, 0]

>>> y_pred = [0, 1, 0, 0, 0, 1]

>>> balanced_accuracy_score(y_true, y_pred)

0.625

pearson_r2_score(y: numpy.ndarray, y_pred: numpy.ndarray)→ float

计算 Pearson R^2 (皮尔逊相关系数平方).

参数

 y (np.ndarray) – 真阳数组

 y_pred (np.ndarray) – 预测数组

返回 Pearson-R^2 分值.

返回类型 浮点

jaccard_index(y: numpy.ndarray, y_pred: numpy.ndarray) →float

计算Jaccard指数,是交集与并集的比量度,常用于图像分割。

未来将不再使用。而用jaccard_score。

参数

 y (np.ndarray) – 真阳数组

 y_pred (np.ndarray) – 预测数组

返回 分值 – jaccard 指数。0 到1之间的数。

返回类型 浮点

pixel_error(y: numpy.ndarray, y_pred: numpy.ndarray)→ float

错误量度,当y, y_pred为图像时。

定义为 – 像素相似度的最大F-score, 或原始标签与结果标签之间的欧拉距离平方。

参数

 y (np.ndarray) – 真阳数组

 y_pred (np.ndarray) – 预测数组

返回 分值 – 像素-误差。0到 1之间的值。

返回类型 浮点

prc_auc_score(y: numpy.ndarray, y_pred: numpy.ndarray) →float

计算precision-recall典线下面积

参数

 y (np.ndarray) – 形状为 (N, n_classes)或 (N,)的真标签数组。

 y_pred (np.ndarray) – 类概率的 (N, n_classes)数组.

返回precision-recall典线下面积。0 到1之间的值。

返回类型 浮点

rms_score(y_true: numpy.ndarray, y_pred: numpy.ndarray)→float

计算RMS 误差。

mae_score(y_true: numpy.ndarray, y_pred: numpy.ndarray)→float

计算MAE.

kappa_score(y1, y2, *, labels=None, weights=None, sample_weight=None)

Cohen’s kappa: 测量一致性量度的统计量。

这个函数计算Cohen’s kappa_, 表示两个分类标注的一致性水平的量度。定义为?? = (???? ? ????)/(1 ? ????)

其中 ???? 是分配给任何标签的经验概率一致性 (观察的一致性比),???? 是期望的一致性,当两个标注随机分配标签时。????是用类标签的经验先验评估的。

参数

 y1 (array of shape (n_samples,)) – 第一个标注分配的标签。

 y2 (array of shape (n_samples,)) – 第二个标注分配的标签。

Kappa统计量是对称的, 所以交换y1和y2不改变值。

 labels (array-like of shape (n_classes,), default=None) – 索引矩阵的标签列表。这可用于选择标签子集。如为None,使用所用在y1或 y2 中致少出现一次的标签。

 weights ({'linear', 'quadratic'}, default=None) – 计算分值的权重类型。 None意味着没有权重; “linear” 意味着线性权重; “quadratic”意味着二次权重。

 sample_weight (array-like of shape (n_samples,), default=None)

– 样本权重。

返回 kappa – kappa统计量, -1到1之间的值。最大值意味着完全一致。零或更低值意味着随机一致。

返回类型  浮点

bedroc_score(y_true: numpy.ndarray, y_pred: numpy.ndarray, alpha: float = 20.0)

计算BEDROC量度

BEDROC量度按Truchon和Bayley实施,通过允许一个早期识别因子修改ROC分。

参数

 y_true (np.ndarray) – 二分类标签。 1为阳类,否是为 0。

 y_pred (np.ndarray) – 预测的标签

 alpha (float, default 20.0) – 早期识别参数

返回值 [0, 1]提示早期识别程度。

返回类型 浮点

注意

这个函数要安装 RDKit。

concordance_index(y_true: numpy.ndarray, y_pred: numpy.ndarray)→float

计算相似指数

提示预测排序的质量的统计量度。

参数

 y_true (np.ndarray) – 连续值

 y_pred (np.ndarray) – 预测值

返回 分值[0,1]之间

返回类型 浮点

get_motif_scores(encoded_sequences: numpy.ndarray, motif_names: List[str], max_scores: Optional[

int] = None, return_positions: bool = False, GC_fraction: float = 0.4) →

numpy.ndarray

计算 脉冲宽度调制对数几率.

参数

 encoded_sequences (np.ndarray) – 形状为 (N_sequences,

N_letters, sequence_length, 1)的数组。

 motif_names (List[str]) – 模体文件名列表.

 max_scores (int, optional) – 获得高的max_scores分值.

 return_positions (bool, default False) – 是否返回位置。

 GC_fraction (float, default 0.4) – 背影序列的GC 分数。

返回 完全分值数组。默认形状为 (N_sequences, num_motifs, seq_length)。如 max_scores, 分值数组的形状为 (N_sequences, num_motifs*max_scores). 如max_scores 且 return_positions, 有最大分值和位置的分值数组的形 状为(N_sequences, 2*num_motifs*max_scores).

返回类型np.ndarray

注意

这个方法要安装simdna。

get_pssm_scores(encoded_sequences: numpy.ndarray, pssm: numpy.ndarray)→numpy.ndarray

卷积pssm和它的编码序列的逆互补,返回每个序列每个位置的最大分值。

参数

 encoded_sequences (np.ndarray) – 形状 (N_sequences,

N_letters, sequence_length, 1)数组.

 pssm (np.ndarray) –形状 (4, pssm_length)数组.

返回 分值 –形状 (N_sequences, sequence_length)数组

返回类型 np.ndarray

in_silico_mutagenesis(model: deepchem.models.models.Model, encoded_sequences:

numpy.ndarray)→ numpy.ndarray

计算模拟突变分值

参考

model (Model) – 输入和输出的形状为(N_sequences, N_tasks)的任何模型。

encoded_sequences (np.ndarray) – 形状为 (N_sequences,

N_letters, sequence_length, 1)的数组

返回ISM分值数组。形状 (num_task, N_sequences, N_letters, sequence_

length, 1).

返回类型np.ndarray

3.21.4 量度类

dc.metrics.Metric类是量度函数的打包器,与DeepChem dc.models.Model交互。

class Metric(metric: Callable[[. . . ], float], task_averager: Optional[Callable[[. . . ], Any]] = None,

name: Optional[str] = None, threshold: Optional[float] = None, mode: Optional[str]

= None, n_tasks: Optional[int] = None, classification_handling_mode: Optional[str] =

None, threshold_value: Optional[float] = None, compute_energy_metric: Optional[bool]

= None)

计算用户自定义量度打包器。

量度类为打包器提供DeepChem模型有用的不同的量度的标准API。该实施提供了一些非标准的便利,如内建的对多任务和多分类量度的支持。

这个类支持多种不同的量度。假定比较值为标量分类量度和回归量度都支持。当前,这个类不支持输出不是标量的模型的量度。例如,如果你有产生模型预测图像或分子,你要写自定义的评估和量度设置。

__init__(metric: Callable[[. . . ], float], task_averager: Optional[Callable[[. . . ], Any]] = None,

name: Optional[str] = None, threshold: Optional[float] = None, mode: Optional[str] =

None, n_tasks: Optional[int] = None, classification_handling_mode: Optional[str] = None,

threshold_value: Optional[float] = None, compute_energy_metric: Optional[bool] = None)

参数

 metric (function) – 函数输入y_true, y_pred (按序)并计算期望的分值。如果考虑样本的权重,量度可以增加关键字参数sample_weight。

 task_averager (function, default None) – 如果不是None, 应为一个函数平均不同任务的量度。

 name (str, default None) – 量度的名称。

 threshold (float, default None (DEPRECATED)) – 用以二分量度并是阳性类的阈值。

 mode (str, default None) – 通常应为“classification” or “regression.”

 n_tasks (int, default None) – 这个类要处理的任务数。

 classification_handling_mode (str, default None) – DeepChem 模型默认为分类问题预测类的概率,形状归一化后,DeepChem预测为形状(N, n_classes)的类的概率的数组。

classification_handling_mode是字串指示这个模型如何转换概率。它可以取如下值:

 - None: 默认值。直接传递y_pred到self.metric.

 - “threshold”: 用threshold_predictions来阈值化y_pred. threshold_value作为期望的阈值。

– ”threshold-one-hot”: 用Use threshold_predictions来阈值化y_pred,使用threshold_

values, 然后用to_one_hot到输出。

 threshold_value (float, default None) –如设置,且classification_handling_mode是 “threshold” 或 “threshold-one-hot” 用于阈值操作到这个值。该操作仅对二分类敏感。 如为浮点, 将作为二分类的值。

 compute_energy_metric (bool, default None (DEPRECATED)) – 不再用。

compute_metric(y_true: numpy.ndarray, y_pred: numpy.ndarray, w: Optional[numpy.ndarray] =

None, n_tasks: Optional[int] = None, n_classes: int = 2, filter_nans: bool = False,

per_task_metrics: bool = False, use_sample_weights: bool = False, **kwargs)→

numpy.ndarray

为每个任务计算性能量度。

参数

 y_true (np.ndarray) – 含有每个任务真实值的np.ndarray。形状应为 (N,)或 (N, n_tasks)或 (N, n_tasks, n_classes)如为分类量度。如形状为(N, n_tasks)值可以是类的标签或二分类问题目阳性类的概率。如为回归问题,形状应为 (N,)或 (N,n_tasks)或 (N, n_tasks, 1) 如为回归量度。

 y_pred (np.ndarray) – 包含每个任务的预测值的np.ndarray。如为分类量度必须为形状 (N, n_tasks, n_classes) ,回归量度必须为(N, n_tasks).

 w (np.ndarray, default None) –每个数据点的权重的np.ndarray。如指定,必须为形状 (N, n_tasks).

 n_tasks (int, default None) – 这个类期望处理的任务数。

 n_classes (int, default 2) – 对于分类任务,数据中的分类数。

 filter_nans (bool, default False (DEPRECATED)) – 计算量度时删除NaN值。

 per_task_metrics (bool, default False) – 如为真, 返回多任务数据集中每个任务的计算的量度。

 use_sample_weights (bool, default False) – 如设置, 使用每样本权重。

 kwargs (dict) – 传递给self.metric。

返回包含每任务量度值的数组。

返回类型np.ndarray

compute_singletask_metric(y_true: numpy.ndarray, y_pred: numpy.ndarray, w: Optional[

numpy.ndarray] = None, n_samples: Optional[int] = None,

use_sample_weights: bool = False, **kwargs)→float

计算量度值.

参数

 y_true (np.ndarray) – 真实值数组.如为分类形状应为 (N, n_classes),如为回归形状应为 (N,) 。

 y_pred (np.ndarray) – 预测数组。 如为分类这个数组必须有形状 (N, n_classes),如为回归则为 (N,)。

 w (np.ndarray, default None) – 样本权重数组。变个数组的形状必须为 (N,)。

 n_samples (int, default None (DEPRECATED)) – 数据集中的样本数。这是 N。这个参数忽略。

 use_sample_weights (bool, default False) – 如设置, 使用每样本权重。

 kwargs (dict) – 将传递给self.metric.

返回 metric_value – 量度的计算值。

返回类型 浮点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值