常用工具模块#

通用工具#

recommenders.utils.general_utils.get_number_processors()[source]#

获取 CPU 中的处理器数量。

返回:

处理器数量。

返回类型:

int

recommenders.utils.general_utils.get_physical_memory()[source]#

获取以 GB 为单位的物理内存。

返回:

以 GB 为单位的物理内存。

返回类型:

float

recommenders.utils.general_utils.invert_dictionary(dictionary)[source]#

反转字典

注意

如果字典具有唯一的键和唯一的值,则反转是完美的。但是,如果存在重复的值,则反转可能会使用不同的键

参数:

dictionary (dict) – 一个字典

返回:

反转后的字典

返回类型:

dict

GPU 工具#

recommenders.utils.gpu_utils.clear_memory_all_gpus()[source]#

清除所有 GPU 的内存。

recommenders.utils.gpu_utils.get_cuda_version()[source]#

获取 CUDA 版本

返回:

库版本。

返回类型:

str

recommenders.utils.gpu_utils.get_cudnn_version()[source]#

获取 CuDNN 版本

返回:

库版本。

返回类型:

str

recommenders.utils.gpu_utils.get_gpu_info()[source]#

获取 GPU 信息。

返回:

GPU 信息字典列表,包含 device_nametotal_memory(以 Mb 为单位)和 free_memory(以 Mb 为单位)。如果没有可用的 cuda 设备,则返回空列表。

返回类型:

list

recommenders.utils.gpu_utils.get_number_gpus()[source]#

获取系统中的 GPU 数量。:returns: GPU 数量。:rtype: int

Kubernetes 工具#

recommenders.utils.k8s_utils.nodes_to_replicas(n_cores_per_node, n_nodes=3, cpu_cores_per_replica=0.1)[source]#

粗略估计给定数量节点(每个节点有 n_cores_per_node 核)支持的副本数量。

参数:
  • n_cores_per_node (int) – 您想使用的 AKS 集群中每个节点的总核数

  • n_nodes (int) – AKS 集群中使用的节点数量(即虚拟机数量)

  • cpu_cores_per_replica (float) – 分配给每个副本的核数。这可以是小数,对应于传递给 AksWebservice.deploy_configuration() 的 cpu_cores 参数。

返回:

配置支持的副本总数

返回类型:

int

recommenders.utils.k8s_utils.qps_to_replicas(target_qps, processing_time, max_qp_replica=1, target_utilization=0.7)[source]#

粗略估计支持给定负载(每秒查询数)所需的副本数量。

参数:
  • target_qps (int) – 您希望支持的目标每秒查询数

  • processing_time (float) – 服务调用所需的大致时间(以秒为单位)

  • max_qp_replica (int) – 每个副本的最大并发查询数

  • target_utilization (float) – 您认为理想的 CPU 利用率比例

返回:

支持目标每秒查询数所需的大致副本数量。

返回类型:

int

recommenders.utils.k8s_utils.replicas_to_qps(num_replicas, processing_time, max_qp_replica=1, target_utilization=0.7)[source]#

粗略估计一定数量副本支持的每秒查询数。

参数:
  • num_replicas (int) – 副本数量

  • processing_time (float) – 服务调用所需的大致时间(以秒为单位)

  • max_qp_replica (int) – 每个副本的最大并发查询数

  • target_utilization (float) – 您认为理想的 CPU 利用率比例

返回:

该数量副本支持的每秒查询数

返回类型:

int

Notebook 工具#

recommenders.utils.notebook_utils.execute_notebook(input_notebook, output_notebook, parameters={}, kernel_name='python3', timeout=2200)[source]#

执行 notebook 并向其传递参数。

注意

确保您的 Jupyter Notebook 已设置好可修改和读取的参数。使用 Markdown 单元格指定需要修改的参数,使用代码单元格设置需要读取的参数。

参数:
  • input_notebook (str) – 输入 notebook 的路径。

  • output_notebook (str) – 输出 notebook 的路径

  • parameters (dict) – 传递给 notebook 的参数字典。

  • kernel_name (str) – 内核名称。

  • timeout (int) – 每个单元格执行的超时时间(以秒为单位)。

recommenders.utils.notebook_utils.is_databricks()[source]#

检查模块是否在 Databricks 上运行。

返回:

如果模块在 Databricks notebook 上运行则为 True,否则为 False。

返回类型:

bool

recommenders.utils.notebook_utils.is_jupyter()[source]#

检查模块是否在 Jupyter notebook/console 上运行。

返回:

如果模块在 Jupyter notebook 或 Jupyter console 上运行则为 True,否则为 False。

返回类型:

bool

recommenders.utils.notebook_utils.read_notebook(path)[source]#

读取存储在 notebook 输出源代码中的元数据。

参数:

path (str) – notebook 的路径。

返回:

存储在 notebook 中的数据字典。

返回类型:

dict

recommenders.utils.notebook_utils.store_metadata(name, value)[source]#

将数据存储在 notebook 的输出源代码中。

参数:
  • name (str) – 数据的名称。

  • value (int,float,str) – 数据的值。

recommenders.utils.notebook_memory_management.pre_run_cell()[source]#

在执行当前命令之前捕获当前时间

recommenders.utils.notebook_memory_management.start_watching_memory()[source]#

将内存分析工具注册到 IPython 实例。

recommenders.utils.notebook_memory_management.stop_watching_memory()[source]#

从 IPython 实例注销内存分析工具。

recommenders.utils.notebook_memory_management.watch_memory()[source]#

从前一次迭代中获取全局内存使用量值

Python 工具#

recommenders.utils.python_utils.binarize(a, threshold)[source]#

将值二值化。

参数:
  • a (numpy.ndarray) – 需要二值化的输入数组。

  • threshold (float) – 阈值,低于此值的所有值设置为 0,否则设置为 1。

返回:

二值化后的数组。

返回类型:

numpy.ndarray

recommenders.utils.python_utils.cosine_similarity(cooccurrence)[source]#

计算共现矩阵的余弦相似度的辅助方法。

余弦相似度可以解释为第 i 个和第 j 个项目之间的角度。

参数:

cooccurrence (numpy.ndarray) – 项目的对称共现矩阵。

返回:

任意两个项目之间的余弦相似度矩阵。

返回类型:

numpy.ndarray

recommenders.utils.python_utils.exponential_decay(value, max_val, half_life)[source]#

根据指数衰减计算给定值的衰减因子。

大于 max_val 的值将设置为 1。

参数:
  • value (numeric) – 用于计算衰减因子的值

  • max_val (numeric) – 衰减因子为 1 时的值

  • half_life (numeric) – 衰减因子为 0.5 时的值

返回:

衰减因子

返回类型:

float

recommenders.utils.python_utils.get_top_k_scored_items(scores, top_k, sort_top_k=False)[source]#

从每个用户-项目对的得分矩阵中提取 Top K 项目,可选地按用户对结果排序。

参数:
  • scores (numpy.ndarray) – 得分矩阵(用户 x 项目)。

  • top_k (int) – 推荐的 Top 项目数量。

  • sort_top_k (bool) – 对 Top k 结果排序的标志。

返回:

  • 每个用户的 Top 项目在得分矩阵中的索引。

  • 对应 Top 项目的得分。

返回类型:

numpy.ndarray, numpy.ndarray

recommenders.utils.python_utils.inclusion_index(cooccurrence)[source]#

计算共现矩阵包含索引的辅助方法。

包含索引衡量项目之间的重叠程度。

参数:

cooccurrence (numpy.ndarray) – 项目的对称共现矩阵。

返回:

任意两个项目之间的包含索引矩阵。

返回类型:

numpy.ndarray

recommenders.utils.python_utils.jaccard(cooccurrence)[source]#

计算共现矩阵 Jaccard 相似度的辅助方法。将 Jaccard 与计数共现和提升相似度进行比较时,计数倾向于可预测性,这意味着最受欢迎的项目将大部分时间被推荐。相比之下,提升倾向于可发现性/意外性,这意味着一个总体上不太受欢迎但受到一小部分用户高度青睐的项目更有可能被推荐。Jaccard 是两者之间的折衷。

参数:

cooccurrence (numpy.ndarray) – 项目的对称共现矩阵。

返回:

任意两个项目之间的 Jaccard 相似度矩阵。

返回类型:

numpy.ndarray

recommenders.utils.python_utils.lexicographers_mutual_information(cooccurrence)[source]#

计算共现矩阵词典编纂者互信息的辅助方法。

由于互信息对低频项目存在偏差,词典编纂者互信息通过乘以共现频率来修正公式。

参数:

cooccurrence (numpy.ndarray) – 项目的对称共现矩阵。

返回:

任意两个项目之间的词典编纂者互信息矩阵。

返回类型:

numpy.ndarray

recommenders.utils.python_utils.lift(cooccurrence)[source]#

计算共现矩阵提升(Lift)的辅助方法。与基本共现和 Jaccard 相似度相比,提升倾向于可发现性和意外性,而共现倾向于最受欢迎的项目,Jaccard 是两者之间的折衷。

参数:

cooccurrence (numpy.ndarray) – 项目的对称共现矩阵。

返回:

任意两个项目之间的提升(Lift)矩阵。

返回类型:

numpy.ndarray

recommenders.utils.python_utils.mutual_information(cooccurrence)[source]#

计算共现矩阵互信息的辅助方法。

互信息是衡量第 i 个第 j 个项目列向量所解释信息量的一种度量。

参数:

cooccurrence (numpy.ndarray) – 项目的对称共现矩阵。

返回:

任意两个项目之间的互信息矩阵。

返回类型:

numpy.ndarray

recommenders.utils.python_utils.rescale(data, new_min=0, new_max=1, data_min=None, data_max=None)[source]#

将数据重新缩放/归一化到 [new_min, new_max] 范围内。如果明确提供了 data_min 和 data_max,它们将用作旧的最小/最大值,而不是从数据中获取。

注意

这与 scipy.MinMaxScaler 相同,但我们可以覆盖旧比例尺的最小/最大值。

参数:
  • data (numpy.ndarray) – 一维得分向量或二维得分矩阵(用户 x 项目)。

  • new_min (int|float) – 新缩放数据的最小值。

  • new_max (int|float) – 新缩放数据的最大值。

  • data_min (None|number) – 传递数据的最小值 [如果省略,将进行推断]。

  • data_max (None|number) – 传递数据的最大值 [如果省略,将进行推断]。

返回:

新缩放/归一化后的数据。

返回类型:

numpy.ndarray

Spark 工具#

recommenders.utils.spark_utils.start_or_get_spark(app_name='Sample', url='local[*]', memory='10g', config=None, packages=None, jars=None, repositories=None)[source]#

如果 Spark 未启动,则启动它

参数:
  • app_name (str) – 设置应用程序名称

  • url (str) – Spark 主节点的 URL

  • memory (str) – Spark 驱动程序的内存大小。如果在配置中设置了 spark.driver.memory,则此项将被忽略。

  • config (dict) – 配置选项字典

  • packages (list) – 要安装的包列表

  • jars (list) – 要添加的 jar 文件列表

  • repositories (list) – Maven 仓库列表

返回:

Spark 上下文。

返回类型:

object

Tensorflow 工具#

class recommenders.utils.tf_utils.MetricsLogger[source]#

指标记录器

__init__()[source]#

初始化器

get_log()[source]#

Getter

返回:

记录指标。

返回类型:

dict

log(metric, value)[source]#

记录指标。每个指标的日志将存储在相应的列表中。

参数:
  • metric (str) – 指标名称。

  • value (float) – 值。

recommenders.utils.tf_utils.build_optimizer(name, lr=0.001, **kwargs)[source]#

获取 TensorFlow 高级 API Estimator 的优化器。

可用选项包括:adadeltaadagradadamftrlmomentumrmspropsgd

参数:
  • name (str) – 优化器名称。

  • lr (float) – 学习率

  • kwargs – 优化器参数(键值对形式)

返回:

Tensorflow 优化器。

返回类型:

tf.train.Optimizer

recommenders.utils.tf_utils.evaluation_log_hook(estimator, logger, true_df, y_col, eval_df, every_n_iter=10000, model_dir=None, batch_size=256, eval_fns=None, **eval_kwargs)[source]#

TensorFlow 高级 API Estimator 的评估日志 Hook。

注意

TensorFlow Estimator 模型使用最后一个检查点权重进行评估或预测。为了在训练期间获得最新的评估结果,请将模型的 save_checkpoints_steps 设置为等于或大于 Hook 的 every_n_iter

参数:
  • estimator (tf.estimator.Estimator) – 要评估的模型。

  • logger (Logger) – 用于记录结果的自定义日志记录器。例如,为 AzureML 日志记录定义 Logger 的子类。

  • true_df (pd.DataFrame) – 真实数据。

  • y_col (str) – true_df 中的标签列名

  • eval_df (pd.DataFrame) – 没有标签列的评估数据。

  • every_n_iter (int) – 评估频率(步)。

  • model_dir (str) – 保存摘要的模型目录。如果为 None,则不记录。

  • batch_size (int) – 每次馈送到模型的样本数量。注意,批处理大小不影响评估结果。

  • eval_fns (iterable of functions) – 评估函数列表,其签名格式为 (true_df, prediction_df, **eval_kwargs)->`float`。如果为 None,则在 true_df 上计算损失。

  • eval_kwargs – 评估函数的关键字参数。注意,预测列名应为 'prediction'。

返回:

在训练期间评估模型的 Session run Hook。

返回类型:

tf.train.SessionRunHook

recommenders.utils.tf_utils.export_model(model, train_input_fn, eval_input_fn, tf_feat_cols, base_dir)[source]#

导出 TensorFlow Estimator(模型)。

参数:
  • model (tf.estimator.Estimator) – 要导出的模型。

  • train_input_fn (function) – 用于创建数据接收器规范的训练输入函数。

  • eval_input_fn (function) – 用于创建数据接收器规范的评估输入函数。

  • tf_feat_cols (list(tf.feature_column)) – 特征列。

  • base_dir (str) – 导出模型的基本目录。

返回:

导出的模型路径

返回类型:

str

recommenders.utils.tf_utils.pandas_input_fn(df, y_col=None, batch_size=128, num_epochs=1, shuffle=False, seed=None)[source]#

TensorFlow 高级 API Estimator 的 Pandas 输入函数。此函数返回一个 tf.data.Dataset 函数。

注意

tf.estimator.inputs.pandas_input_fn 无法正确处理数组/列表列。更多信息请参阅 https://tensorflowcn.cn/api_docs/python/tf/estimator/inputs/numpy_input_fn

参数:
  • df (pandas.DataFrame) – 包含特征的数据。

  • y_col (str) – 如果 df 中存在,则为标签列名。

  • batch_size (int) – 输入函数的批处理大小。

  • num_epochs (int) – 迭代数据的 epoch 数量。如果为 None,则无限期运行。

  • shuffle (bool) – 如果为 True,则打乱数据队列。

  • seed (int) – 用于打乱的随机种子。

返回:

函数。

返回类型:

tf.data.Dataset

recommenders.utils.tf_utils.pandas_input_fn_for_saved_model(df, feat_name_type)[source]#

TensorFlow SavedModel 的 Pandas 输入函数。

参数:
  • df (pandas.DataFrame) – 包含特征的数据。

  • feat_name_type (dict) – 特征名称和类型规范。例如 {‘userID’: int, ‘itemID’: int, ‘rating’: float}

返回:

输入函数

返回类型:

func

Timer#

class recommenders.utils.timer.Timer[source]#

计时器类。

原始代码.

示例

>>> import time
>>> t = Timer()
>>> t.start()
>>> time.sleep(1)
>>> t.stop()
>>> t.interval < 1
True
>>> with Timer() as t:
...   time.sleep(1)
>>> t.interval < 1
True
>>> "Time elapsed {}".format(t) 
'Time elapsed 1...'
__init__()[source]#
property interval#

获取时间间隔(以秒为单位)。

返回:

秒。

返回类型:

float

start()[source]#

启动计时器。

stop()[source]#

停止计时器。计算时间间隔(以秒为单位)。

绘图工具#

recommenders.utils.plot.line_graph(values, labels, x_guides=None, x_name=None, y_name=None, x_min_max=None, y_min_max=None, legend_loc=None, subplot=None, plot_size=(5, 5))[source]#

绘制折线图。

参数:
  • values (list(list(float or tuple)) or list(float or tuple) – 要绘制的图形列表或单个图形。例如,一个图形 = list(y) 或 list((y,x))

  • labels (list(str) or str) – 图形标签列表或单个图形标签。如果 labels 是字符串,此函数假定 values 为单个图形。

  • x_guides (list(int)) – 参考线列表(垂直虚线)

  • x_name (str) – x 轴标签

  • y_name (str) – y 轴标签

  • x_min_max (list or tuple) – x 轴的最小值和最大值

  • y_min_max (list or tuple) – y 轴的最小值和最大值

  • legend_loc (str) – 图例位置

  • subplot (list or tuple) – matplotlib.pyplot.subplot 格式。例如,绘制 1x2 子图时,第一个子图传递 (1,2,1),第二个子图传递 (1,2,2)

  • plot_size (list or tuple) – 绘图尺寸(宽度,高度)