首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tensorflow数据验证不能识别数值特征中的异常

Tensorflow数据验证不能识别数值特征中的异常
EN

Stack Overflow用户
提问于 2020-05-22 14:30:00
回答 3查看 845关注 0票数 1

我一直在测试Tensorflow数据验证(0.22.0版本),以便在我当前的ML管道中使用,并且我注意到它在数值特性上没有任何异常。例如,

代码语言:javascript
复制
> 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处理数值特征吗?

EN

回答 3

Stack Overflow用户

发布于 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 )

票数 1
EN

Stack Overflow用户

发布于 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值中的新值。

票数 0
EN

Stack Overflow用户

发布于 2021-09-08 21:56:18

正如@durga所解释的,TFDV增加了一个新特性,允许我们检测数字特性的倾斜。在jensen_shannon_divergence中指定一个infinity_norm阈值而不是一个infinity_norm阈值。

示例:

代码语言:javascript
复制
tfdv.get_feature(schema, 'total_actions').skew_comparator.jensen_shannon_divergence.threshold = 0.01

如果要检查最大值和最小值范围,则需要在特性中手动设置内联FloatDomain/IntDomain。它不是由infer_schema()自动生成的:

示例:

代码语言:javascript
复制
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 = 1400
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61957293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档