自定义metric触发ValueError: setting an array element with a sequence问题求助
错误原因分析:"setting an array element with a sequence"
核心原因
你的自定义距离函数dum_cusmet不符合Scikit-learn的要求:
- Scikit-learn的
NearestNeighbors类要求自定义距离函数返回单个数值型的距离值(比如float或int),但你的函数返回的是一个元组(x, x2)。 - 当计算样本间距离时,程序试图把这个元组赋值给距离矩阵的单个元素,而数组元素只能存储单一数值,无法容纳序列(元组属于序列类型),因此触发
ValueError: setting an array element with a sequence。 - 错误栈里的
TypeError: float() argument must be a string or a real number, not 'tuple'是前置问题:程序尝试将你的函数返回的元组转换为float类型(用于构建距离矩阵),但转换失败,进而引发了最终的ValueError。
修正示例
如果需要自定义距离函数,需修改为返回单一数值,比如计算欧氏距离:
def dum_cusmet(x, x2): return np.linalg.norm(x - x2) # 返回两个样本间的欧氏距离数值
替换后,radius_neighbors方法就能正常生成距离矩阵,不会再触发序列赋值错误。
内容的提问来源于stack exchange,提问作者Fia Shofia Zahra
相关产品推荐
相关产品推荐

