H2O 以不同方式解析文件类型

H2O parses files types differently

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

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

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 文件中那样被视为分类枚举?

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

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

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

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