Почему я получаю ошибку «матрицы не выровнены» для точечной функции фрейма данных?

#python #pandas #numpy

Вопрос:

Я пытаюсь реализовать простую линейную регрессию в Python, используя Numpy и Pandas. Но я получаю ошибку ValueError: матрицы не выровнены при вызове функции dot, которая, по сути, вычисляет умножение матрицы, как указано в документации. Ниже приведен фрагмент кода:

 import numpy as np
import pandas as pd

#initializing the matrices for X, y and theta
#dataset = pd.read_csv("data1.csv")
dataset = pd.DataFrame([[6.1101,17.592],[5.5277,9.1302],[8.5186,13.662],[7.0032,11.854],[5.8598,6.8233],[8.3829,11.886],[7.4764,4.3483],[8.5781,12]])
X = dataset.iloc[:, :-1]
y = dataset.iloc[:, -1]
X.insert(0, "x_zero", np.ones(X.size), True)
print(X)
print(f"n{y}")
theta = pd.DataFrame([[0],[1]])
temp = pd.DataFrame([[1],[1]])
print(X.shape)
print(theta.shape)
print(X.dot(theta))
 

И это результат того же самого:

    x_zero       0
0     1.0  6.1101
1     1.0  5.5277
2     1.0  8.5186
3     1.0  7.0032
4     1.0  5.8598
5     1.0  8.3829
6     1.0  7.4764
7     1.0  8.5781

0    17.5920
1     9.1302
2    13.6620
3    11.8540
4     6.8233
5    11.8860
6     4.3483
7    12.0000
Name: 1, dtype: float64
(8, 2)
(2, 1)
Traceback (most recent call last):
  File "linear.py", line 16, in <module>
    print(X.dot(theta))
  File "/home/tejas/.local/lib/python3.6/site-packages/pandas/core/frame.py", line 1063, in dot
    raise ValueError("matrices are not aligned")
ValueError: matrices are not aligned
 

Как вы можете видеть вывод атрибутов формы для них обоих, вторая ось имеет одинаковое измерение (2), и функция dot должна возвращать фрейм данных 8*1. Тогда почему произошла ошибка?

Комментарии:

1. @Parfait Моя ошибка. Я отредактировал код и поместил некоторые начальные строки базы данных для фрейма данных из csv.

Ответ №1:

Это смещение происходит не от форм, а от индексов панд. У вас есть 2 варианта решения вашей проблемы:

theta Назначение настроек:

 theta = pd.DataFrame([[0],[1]], index=X.columns)
 

Таким образом, индексы, которые вы умножаете, будут совпадать.

Удалите релевантность индексов, переместив второй df на numpy :

 X.dot(theta.to_numpy())
 

Эта функция на самом деле полезна pandas тем, что она пытается соответствовать всем индексам, ваш случай как раз вполне конкретный, когда это становится контрпродуктивным 😉

Комментарии:

1. Опереди меня в этом! В документах имена столбцов фрейма данных и индекс других должны содержать одинаковые значения