我一直在测试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中检出,这两种异常均属于分类异常。但在FeatC和FeatD中,TFDV没有检测到任何东西。
结果显示在这个图像中。
我也尝试过设置倾斜和漂移比较器,但没有改变。我想这与自动生成的模式有关,该模式没有为数值特征映射域。
有人知道如何让TFDV处理数值特征吗?
发布于 2021-03-10 05:52:39
我们需要对数值特征使用jensen_shannon_divergence斜比较器,对分类特征使用infinity_norm。
'SALES').skew_comparator.jensen_shannon_divergence.threshold = 0.001,tfdv.get_feature(schema_updated )
tfdv.validate_statistics(statistics=new_dataset_stats,schema=schema,serving_statistics=old_dataset_stats) display_anomalies( skew_anomalies )
发布于 2020-10-08 13:47:10
通常,tfdv不为数值推断域,现在有3种可能的解决方案:
1-将dataframe列的类型更改为str,因此它将被视为Bytes特性。
2-在您的特性中添加一个int_domain (float_domain for FeatD),并确定所需的min和max。
3-仅对于int特性,您可以将int_domain.is_categorical设置为True,然后使用漂移/倾斜比较器。您将能够检测到顶部k值中的新值。
发布于 2021-09-08 21:56:18
正如@durga所解释的,TFDV增加了一个新特性,允许我们检测数字特性的倾斜。在jensen_shannon_divergence中指定一个infinity_norm阈值而不是一个infinity_norm阈值。
示例:
tfdv.get_feature(schema, 'total_actions').skew_comparator.jensen_shannon_divergence.threshold = 0.01如果要检查最大值和最小值范围,则需要在特性中手动设置内联FloatDomain/IntDomain。它不是由infer_schema()自动生成的:
示例:
tfdv.get_feature(schema, 'total_actions').int_domain.name = 'total_actions'
tfdv.get_feature(schema, 'total_actions').int_domain.min = 0
tfdv.get_feature(schema, 'total_actions').int_domain.max = 1400https://stackoverflow.com/questions/61957293
复制相似问题