我认为这可能是scikit中的一个问题. cross_val_score最终调用score函数,无论估计器传递给它.通常,得分(例如在KMeans中)为
returns a float.当KMeans估算器传递给cross_val_score时,一切都很好:
>>> clf = cluster.KMeans()
>>> score = cross_validation.cross_val_score(clf, X)
# (no error)
注意得分的返回类型:
>>> clf = cluster.KMeans()
>>> clf.fit(X)
>>> type(clf.score(X))
numpy.float64
>>> clf = mixture.GMM()
>>> clf.fit(X)
>>> type(clf.score(X))
numpy.ndarray
因为cross_val_score依赖于clf.score()返回一个浮点数,所以你看到的错误信息是有意义的.
解决方法是为您自己的得分手提供cross_val_score.例如,要获取GMM.score()返回的分数的平均值,请创建此评分函数:
>>> scorer = lambda est, data: np.mean(est.score(data))
然后你可以将这个得分手作为参数传递给cross_val_score:
>>> score = cross_validation.cross_val_score(clf, X, scoring=scorer)
这可以避免错误,我认为应该或多或少地做你正在寻找的东西.我不确定平均值是否必然是总结得分的最佳方式,尽管它似乎足够合理.但是从这里你可以定义自己的方法.