Matplotlib散点图报错:ValueError: x and y must be the same size 求助
解决matplotlib散点图
ValueError: x and y must be the same size问题 问题根源
你的X_test是**(6,8)的二维数组**(包含8个输入特征),而y_test是**(6,)的一维数组**。matplotlib的scatter函数会自动展平传入的x参数,导致x的元素总数变为48,和y的6个元素数量不匹配,触发x and y must be the same size错误。
另外代码存在笔误:Testing_Datatset拼写错误,后续调用的是Testing_Dataset,需要修正。
解决方案
由于你做的是多特征回归,无法在二维图中同时展示所有特征与目标值的关系,推荐两种可视化方案:
方案1:真实值vs预测值散点图(多特征回归常用)
通过对比模型预测值和真实值,直观展示拟合效果:
import numpy as np import matplotlib.pyplot as plt import pandas as pd # 修正拼写错误 Training_Dataset = pd.read_csv("https://raw.githubusercontent.com/kuroisep/Problem-1-Data-Analytic/main/A-train.csv?token=GHSAT0AAAAAABZ7O6G34ZTK4PMQGGZLRVS4Y2LAJSQ") Training_Dataset = Training_Dataset.dropna() X_train = np.array(Training_Dataset.iloc[:, :-1].values) y_train = np.array(Training_Dataset.iloc[:, 1].values) Testing_Dataset = pd.read_csv("https://raw.githubusercontent.com/kuroisep/Problem-1-Data-Analytic/main/A-test.csv?token=GHSAT0AAAAAABZ7O6G2PRKTCT6YBKLZZSRWY2LAK2Q") Testing_Dataset = Testing_Dataset.dropna() X_test = np.array(Testing_Dataset.iloc[:, :-1].values) y_test = np.array(Testing_Dataset.iloc[:, 1].values) from sklearn.linear_model import LinearRegression regressor = LinearRegression() regressor.fit(X_train, y_train) accuracy = regressor.score(X_test, y_test) print('Accuracy = '+ str(accuracy)) # 生成测试集预测值 y_pred = regressor.predict(X_test) plt.style.use('seaborn') # 绘制真实值与预测值的散点图 plt.scatter(y_test, y_pred, color = 'red', marker = 'o', s = 35, alpha = 0.5, label = 'Test data') # 添加理想拟合线(y=x) plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], color = 'blue', label='Perfect Fit') plt.title('True Values vs Predicted Values') plt.xlabel('True Values') plt.ylabel('Predicted Values') plt.legend(loc = 'upper left') plt.show()
方案2:单个特征与目标值的关系图
如果需要查看某一个特征和目标值的关联,可以单独提取该特征绘图:
# 以第一个特征为例 plt.style.use('seaborn') plt.scatter(X_test[:, 0], y_test, color='red', marker='o', s=35, alpha=0.5, label='True Values') plt.scatter(X_test[:, 0], y_pred, color='blue', marker='x', s=35, alpha=0.5, label='Predicted Values') plt.title('Feature 0 vs True/Predicted Values') plt.xlabel('Feature 0') plt.ylabel('Target Values') plt.legend(loc='upper left') plt.show()
内容的提问来源于stack exchange,提问作者kuroisepr
相关产品推荐
相关产品推荐

