Множественная линейная регрессия и ошибка выбора столбцов - PullRequest
0 голосов
/ 10 октября 2018

Моя проблема в том, что, когда я пытался соответствовать модели, я получил эту ошибку.Я не знаю, что вызвало эту ошибку, но, вероятно, выбор независимых переменных не является правильным.Вот ошибка

ValueError: Found input variables with inconsistent numbers of samples: [104, 26]

Вот код, который я построил до сих пор

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

# Import Excel File
data = pd.read_excel("C:\\Users\\AchourAh\\Desktop\\Multiple_Linear_Regression\\SP Level Reasons Excels\\SP00105485_PL22_AAB_05_09_2018_Reasons.xlsx",'Sheet1') #Import Excel file

# Replace null values of the whole dataset with 0
data1 = data.fillna(0)
print(data1)

# Extraction of the independent and dependent variable
X = data1.iloc[0:len(data1),[0,1,2,3]].values.reshape(-1, 1) #Extract the column of the COPCOR SP we are going to check its impact
Y = data1.iloc[0:len(data1),4].values.reshape(-1, 1) #Extract the column of the PAUS SP
print(X)
print(Y)

# Importing
from sklearn.linear_model import LinearRegression
from sklearn import model_selection

# Fitting a Linear Model
lm = LinearRegression() #create an lm object of LinearRegression Class
lm.fit(X, Y)
plt.scatter(X, Y, color = 'red')#plots scatter graph of COP COR against PAUS for values in X_train and y_train
plt.plot(X, lm.predict(X), color = 'blue')#plots the graph of predicted PAUS against COP COR.
plt.title('SP000905974')
plt.xlabel('COP COR Quantity')
plt.ylabel('PAUS Quantity')
plt.show()#Show the graph

Первые столбцы моего файла Excel содержат независимые переменные, а четвертый столбец содержит зависимую переменную.У меня есть другой код простой линейной регрессии, который отлично работает, но когда я попытался применить многолинейную регрессию, я просто изменил эту строку, но я не понимаю, что я сделал неправильно.

  X = data1.iloc[0:len(data1),[0,1,2,3]].values.reshape(-1, 1)

, чтобы заметить, яначинающий с этим.

1 Ответ

0 голосов
/ 10 октября 2018

Ваша проблема действительно заключается в изменении формы X.

Пример:

pd.DataFrame([[1,2],[3,4],[5,6]], columns = ["a", "b"]).values

- это массив numpy, который выглядит как

array([[1, 2],
       [3, 4],
       [5, 6]], dtype=int64)

, а

pd.DataFrame([[1,2],[3,4],[5,6]], columns = ["a", "b"]).values.reshape(-1,1)

удваивает количество строк (из-за того, что два столбца преобразованы в один)

array([[1],
       [2],
       [3],
       [4],
       [5],
       [6]], dtype=int64)

Таким образом, в вашем случае после преобразования четырех столбцов в один у вас будет в четыре раза больше строк в X, чем вY, в то время как lm.fit (X, Y) требует, чтобы у вас было одинаковое количество строк в X и Y.

...