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 – 量度的计算值。
返回类型 浮点。