You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Scikit-Learn遇AttributeError:已验证输入为numpy array仍报list无shape属性

问题排查与解决

核心问题定位

你已经确认print(data.shape[0])能正常执行,说明这一行的data确实是numpy数组,错误必然出在后续的分支代码中,大概率是Isolation Forest分支的用法错误。

具体解决步骤

1. 修复Isolation Forest分支的silhouette_score用法

silhouette_score要求第二个参数是整数类型的簇标签,但IsolationForest.score_samples()返回的是连续型的异常分数(范围约-0.5到0.5),直接传入会导致函数内部处理异常,引发list相关错误。需要先将分数转换为二分类标签:

elif self.cluster_method == 'isolation_forest':
    predicted_scores = self.cluster_model.score_samples(data)
    # 以0为阈值,把分数小于0的标记为异常簇(1),正常样本标记为0
    predicted_labels = (predicted_scores < 0).astype(int)
    score = silhouette_score(data, predicted_labels)
    print(f"Silhouette score: {score}")

2. 额外排查验证

  • 在每个分支的silhouette_score调用前,打印参数的类型和形状,确认都是numpy数组且维度匹配:
    # KMeans分支
    print("KMeans: data类型", type(data), "形状", data.shape)
    print("KMeans: 预测标签类型", type(predicted_labels), "形状", predicted_labels.shape)
    
    # Isolation Forest分支
    print("IF: data类型", type(data), "形状", data.shape)
    print("IF: 预测标签类型", type(predicted_labels), "形状", predicted_labels.shape)
    
  • 确认调用evaluate_performance时,传入的原始数据没有被意外转为list:直接传递df.to_numpy()(推荐替代df.values),避免手动转成list。

3. 验证模型状态

确保self.cluster_model对应的Isolation Forest模型已经完成训练,未训练的模型调用score_samples可能返回异常结果。

内容的提问来源于stack exchange,提问作者AbhishekRaoC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 15:45:10