【问题标题】:H2O parses files types differentlyH2O 以不同的方式解析文件类型
【发布时间】:2019-11-18 13:49:11
【问题描述】:

我在解析数据时看到文件类型之间的奇怪行为。我正在使用 parquet 和 CSV 格式的小型数据集(200 行,34 列)。

当我解析 CSV 文件时,我可以看到布尔值被正确识别为枚举,如下所示(男性/女性):

print(h2o_frame_csv.types)

{'C1': 'int', 'userId': 'int', 'itemId': 'int', 'rating': 'int', 'timestamp': 'int', 'movieId': 'int', 'movieTitle': 'enum', 'releaseDate': 'time', 'videoReleaseDate': 'int', 'imdbUrl': 'enum', 'unknown': 'int', 'Action': 'int', 'Adventure': 'int', 'Animation': 'int', 'Childrens': 'int', 'Comedy': 'int', 'Crime': 'int', 'Documentary': 'int', 'Drama': 'int', 'Fantasy': 'int', 'FilmNoir': 'int', 'Horror': 'int', 'Musical': 'int', 'Mystery': 'int', 'Romance': 'int', 'SciFi': 'int', 'Thriller': 'int', 'War': 'int', 'Western': 'int', 'age': 'int', 'occupation': 'enum', 'zipCode': 'int', 'male': 'enum', 'female': 'enum'}

但是,当我使用文件的 parquet 版本时,我看到相同的值被视为 int 值

print(h2o_frame_parquet.types)

{'Unnamed: 0': 'int', 'userId': 'int', 'itemId': 'int', 'rating': 'int', 'timestamp': 'int', 'movieId': 'int', 'movieTitle': 'enum', 'releaseDate': 'time', 'videoReleaseDate': 'int', 'imdbUrl': 'enum', 'unknown': 'int', 'Action': 'int', 'Adventure': 'int', 'Animation': 'int', 'Childrens': 'int', 'Comedy': 'int', 'Crime': 'int', 'Documentary': 'int', 'Drama': 'int', 'Fantasy': 'int', 'FilmNoir': 'int', 'Horror': 'int', 'Musical': 'int', 'Mystery': 'int', 'Romance': 'int', 'SciFi': 'int', 'Thriller': 'int', 'War': 'int', 'Western': 'int', 'age': 'int', 'occupation': 'enum', 'zipCode': 'int', 'male': 'int', 'female': 'int', '__index_level_0__': 'int'}

这在尝试训练分类器模型时会成为一个问题。某些指标不可用,因为 h2o 认为这是回归量而不是二项式。见下文

print(f"For {file_type} dataset the metric class is {type(xgb.model_performance(xval=True))}")

For csv dataset the metric class is <class 'h2o.model.metrics_base.H2OBinomialModelMetrics'>

For parquet dataset the metric class is <class 'h2o.model.metrics_base.H2ORegressionModelMetrics'>

解析 parquet 文件时将布尔值视为数字 (int) 的原因是什么?布尔值是否不像 CSV 文件中那样被视为分类枚举?

【问题讨论】:

    标签: python csv parquet h2o


    【解决方案1】:

    [根据下面@MichalKurka 的 cmets 和软件更新进行了修订。]

    Parquet 文件包含有关列类型的元数据。 H2O-3 尊重元数据。

    在 csv 文件中,列类型是猜测的。

    在 H2O-3 版本 3.28.0.1 及更高版本中,parquet 数据集中具有布尔类型的列被视为枚举值(又名分类)。 H2O-3 的早期版本将 parquet 布尔列视为数值。

    【讨论】:

    • 是的,我明白,但列类型是布尔值,我相信这里的这一行导致它被视为数值而不是分类-github.com/h2oai/h2o-3/blob/…,这是正确的吗?
    • @user12302914 很好的发现:我建议将其作为错误 (0xdata.atlassian.net/projects/PUBDEV/summary) 发布,也可以作为自我回答。看起来 parquet 文件需要与 int 的 csv 文件以相同的方式工作(即决定是否只有几个类别或它们是否是实数)并始终将布尔值视为枚举? (P.S. 但是请等待 Tom 的回复,以防我们都误解了该代码!)
    • @TomKraljevic 对上述内容有何想法?
    • 感谢您指出这一点。工程团队正在对此进行研究。这对我来说似乎也不一致。
    • 你是对的,我认为这确实是一个错误。我们将布尔值转换为 0/1 数字,但我们可以将其转换为 True/False 分类。我为你提交了一个问题0xdata.atlassian.net/browse/PUBDEV-7093
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2012-02-17
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多