首页 > 解决方案 > “值错误:x 和 y 的大小必须相同”错误。多元线性回归

问题描述

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

dataset=pd.read_csv("Marketing_Data.csv")
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, -1].values

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 1/3, random_state = 0)

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)
lin_reg = LinearRegression()
lin_reg.fit(X,y)

y_pred = regressor.predict(X_test)
np.set_printoptions(precision = 2)
plt.scatter(X, y, color = 'red')
plt.plot(X, lin_reg.predict(X), color = 'blue')
plt.title("Sales")
plt.show()

我正在尝试编写多元线性回归。有三个自变量和一个因变量。我得到一个

Value Error: x and y must be same size

和一个空的 matplotlib 图。

追溯:

  File "||file path comes here||\untitled0.py", line 20, in <module>
    plt.scatter(X, y, color = 'red')

  File "C:\Anaconda\lib\site-packages\matplotlib\pyplot.py", line 2890, in scatter
    __ret = gca().scatter(

  File "C:\Anaconda\lib\site-packages\matplotlib\__init__.py", line 1438, in inner
    return func(ax, *map(sanitize_sequence, args), **kwargs)

  File "C:\Anaconda\lib\site-packages\matplotlib\cbook\deprecation.py", line 411, in wrapper
    return func(*inner_args, **inner_kwargs)

  File "C:\Anaconda\lib\site-packages\matplotlib\axes\_axes.py", line 4441, in scatter
    raise ValueError("x and y must be the same size")

标签: pythonmachine-learninglinear-regression

解决方案


我认为您收到错误是因为您如何将 .iloc 用于变量 X 和 Y。不知道您的 csv 数据是什么样的,如果这不是您要查找的内容,我们深表歉意......

您的 X .iloc 返回一个 NxN 数组,有点像矩阵(pandas/numpy 将其视为数组),并返回数据集中的所有行减去最后一列(您告诉它忽略最后一列:-1 )。

您的 y .iloc 返回 1xN 数组并将返回数据集的最后一列。

看起来像:

x = dataset.iloc[:, :-1].values

>>> [['Col1Row1_val', 'Col2Row1_val']
     ['Col1Row2_val', 'Col2Row2_val']]

y = dataset.iloc[:, -1].values 

>>> ['lastColRow1_val', 'lastColRow2_val']

x 和 y .iloc 应该相似或以 x 和 y 都是的方式组合,例如 1xN 数组或 NxN 数组。

或使用散点图以外的图


推荐阅读