使用PyOD生成数据绘图时遇ValueError:'c'参数与x/y维度不一致
PyOD生成数据时散点图维度不匹配错误解决方法
错误原因:你使用的PyOD版本中,generate_data函数默认return_X_y=True,即便指定了n_train和n_test参数,返回的结果也不是预期的X_train, y_train, X_test, y_test,而是合并了训练集和测试集的X(共1000条)与对应的标签y(共1000个)。你把这个合并后的标签当成训练集标签y_train来用,但X_train_pd是仅包含500条训练数据的DataFrame,两者维度不匹配,因此触发了c参数元素数与x/y尺寸不一致的报错。
解决办法:在调用generate_data时添加return_X_y=False参数,就能正确获取拆分好的训练集、测试集数据及对应标签。
修正后的完整代码:
import numpy as np import pandas as pd import matplotlib.pyplot as plt from pyod.utils.data import generate_data contamination = 0.1 # 异常值占比10% n_train = 500 # 训练集样本数 n_test = 500 # 测试集样本数 n_features = 2 # 特征数 # 添加return_X_y=False参数,获取拆分后的数据集 X_train, y_train, X_test, y_test = generate_data( n_train=n_train, n_test=n_test, n_features=n_features, contamination=contamination, return_X_y=False ) # 转换为DataFrame方便操作 X_train_pd = pd.DataFrame(X_train) # 绘制散点图 plt.scatter(X_train_pd[0], X_train_pd[1], c=y_train, alpha=0.8) plt.title('训练集数据散点图') plt.xlabel('特征1') plt.ylabel('特征2') plt.show()
你可以打印X_train.shape和y_train.shape验证,此时两者应该分别为(500, 2)和(500,),维度匹配后散点图就能正常显示了。
内容的提问来源于stack exchange,提问作者Hailey
相关产品推荐
相关产品推荐

