Python 3.x Tensorflow数据验证无法识别数值特征中的异常

Python 3.x Tensorflow数据验证无法识别数值特征中的异常,python-3.x,tensorflow-data-validation,Python 3.x,Tensorflow Data Validation,我一直在测试Tensorflow数据验证(版本0.22.0)以用于我当前的ML管道,我注意到它在数值特征方面没有任何异常。比如说, > import pandas as pd > import pyarrow > import tensorflow as tf > import apache_beam as beam > import apache_beam.io.iobase > import tensorflow_data_validation

我一直在测试Tensorflow数据验证(版本0.22.0)以用于我当前的ML管道,我注意到它在数值特征方面没有任何异常。比如说,

> import pandas as pd  
> import pyarrow 
> import tensorflow as tf 
> import apache_beam as beam 
> import apache_beam.io.iobase 
> import tensorflow_data_validation as tfdv 
> print('TFDV version: {}'.format(tfdv.version.__version__))
> 
> train_df = pd.DataFrame({
>     'FeatA' : ['A'] * 1000,
>     'FeatB' : ['B'] * 1000,
>     'FeatC' : [10] * 1000,
>     'FeatD' : [50.2] * 1000 })
> 
> eval_df = pd.DataFrame({
>     'FeatA' : ['A1'] * 1000,
>     'FeatB' : ['B1'] * 1000,
>     'FeatC' : [4] * 1000,
>     'FeatD' : [200.43] * 1000 })
> 
> train_stats  = tfdv.generate_statistics_from_dataframe(train_df)
> schema = tfdv.infer_schema(statistics = train_stats) 
> eval_stats = tfdv.generate_statistics_from_dataframe(eval_df) 
> anomalies = tfdv.validate_statistics(statistics = eval_stats, schema = schema)
> tfdv.display_anomalies(anomalies)
仅在FeatA和FeatB中检测到异常,FeatA和FeatB属于分类异常。但是在FeatC和FeatD中,TFDV没有检测到任何东西

结果如下图所示

我也尝试过设置倾斜和漂移比较器,但没有改变。我猜这与自动生成的模式有关,该模式没有为数字特征映射域


有人知道如何让TFDV用于数值特征吗?

通常,TFDV不会推断数值的域,您现在有3种可能的解决方案:

1-将数据帧列的类型更改为str,因此它将被视为字节特性

2-在功能中添加一个int_域(FeatD的float_域),并确定所需的最小值和最大值


3-仅对于int特性,您可以将int_domain.is_category设置为True,然后使用漂移/倾斜比较器。您将能够检测到顶部k值内的新值。

我们需要使用jensen_shannon_散度倾斜比较器进行数字特征,使用无穷大_范数进行分类特征

tfdv.get_特性(模式更新,'SALES')。倾斜比较器。jensen_shannon_偏差。阈值=0.001

歪斜异常=tfdv。验证统计信息(统计信息=新数据集统计信息,模式=模式,服务统计信息=旧数据集统计信息)
显示异常(倾斜异常)

这是一个很好的观察结果。我会进一步调查并让你知道。关于这个问题有什么消息吗?非常感谢。Github问题中正在跟踪它。相关评论:-由kennysong回答:-“您需要在功能中手动设置一个内联FloatDomain。它不是由推断_schema().tfdv.get_功能(schema,'FeatC')自动生成的。float_domain.name='FeatC'tfdv.get_功能(schema,'FeatC')。float_domain.min=0.0 tfdv.get_功能(schema,'FeatC')。float_domain.max=100.0在这之后,validate_statistics()应该识别出界功能。”我将
feature.int\u domain.is\u categorical=True
添加到int类型的分类特征中。然后使用
feature.drift\u comparator.infinity\u norm.threshold=0.01
来检测漂移。它显示未发现异常。但是,当我将特征转换为字符串时,它检测到一个具有高线性距离的异常。因此,解决方案3 did不行。有什么建议吗?