我注意到sklearn mutual_info_classif函数中的行为与我在互信息目标中所期望的不一致。
给定一组列'A‘、'B’、'C‘和一个因变量y,所计算的相互信息可以是所有特征与y(单个标量)或单个特征与y(标量列表)之间的相互信息。基于此,我不确定sklearn返回给我的值是什么,因为值随功能的顺序而变化,并且随输入的功能的数量而变化。
feature_scores = mutual_info_classif(X[['A', 'B', 'C']], y, random_state=0)
feature_scores
array([0. , 0.13, 0.045])feature_scores = mutual_info_classif(X[['A', 'C', 'B']], y, random_state=0)
feature_scores
array([0. , 0.017, 0.14]feature_scores = mutual_info_classif(X[['A', 'B']], y, random_state=0)
feature_scores
array([0. , 0.14])feature_scores = mutual_info_classif(X[['A', 'B', 'C']], y, random_state=0)
feature_scores
array([0. , 0.13, 0.045])有人能向我解释一下这种行为吗?为什么这是正确的?
发布于 2021-11-18 17:07:22
mutual_info_classif很可能使用单个随机数生成器,这意味着改变数据的数量和顺序来处理随机值的方式改变了应用于计算互信息的方式。
为了避免这种情况,您可以一次只计算每一列的MI。
https://stackoverflow.com/questions/66249963
复制相似问题