Mlxtend apriori调用scipy稀疏矩阵时报dtypes not found错误如何解决
错误根本原因
mlxtend 的 apriori 函数不直接接收 scipy.sparse 矩阵作为输入:函数内部的输入校验逻辑会尝试读取输入对象的 dtypes 属性,该属性是 pandas DataFrame 的特有属性,scipy 稀疏矩阵不存在该属性,因此触发报错。
修复方案
方案1:直接传入布尔类型DataFrame(小数据集推荐)
如果你的数据集内存占用可接受,不需要额外做稀疏转换,直接使用你已经构造好的布尔类型 test_data 作为入参即可:
apriori(test_data, min_support = 0.3, use_colnames = True, verbose = 1)
该方案下 use_colnames=True 参数可正常生效,自动复用原数据集的列名。
方案2:使用pandas原生稀疏DataFrame(大数据集推荐)
如果数据集体积大需要用稀疏格式节约内存,不要转成 scipy 的 csr_matrix,改为构造 pandas 原生的稀疏类型 DataFrame:
# 将原布尔DataFrame转为稀疏布尔类型 sparse_test_data = test_data.astype(pd.SparseDtype(bool)) # 传入稀疏DataFrame运行apriori apriori(sparse_test_data, min_support = 0.3, use_colnames = True, verbose = 1)
该方案既可以享受稀疏存储的内存优势,也完全兼容 mlxtend 的接口要求。
内容的提问来源于stack exchange,提问作者Nicolás Rojas U
相关产品推荐
相关产品推荐

