Как бороться с размером ошибки в множественной линейной регрессии? - PullRequest
1 голос
/ 27 мая 2020

Я пытаюсь выполнить множественную линейную регрессию с помощью sklearn.

features_2 = ['chronic_disease_binary', 'outcome']

X = df.loc[:, features_2].values
Y = df.loc[:, ['age']].values
# X = pd.get_dummies(X,drop_first=True)
#
X_train_lm, X_test_lm, y_train_lm, y_test_lm = create_dataset_test(X, Y)
X_train_lm = X_train_lm.reshape((2596, -1))
lm = linear_model.LinearRegression()
model = lm.fit(X_train_lm, y_train_lm)
y_pred_lm = lm.predict(X_test_lm)

У меня возникает эта проблема, когда я пытаюсь сделать прогноз на X_test:

ValueError: matmul: Входной операнд 1 имеет несоответствие в его основном измерении 0, с gufun c подписью (n?, K), (k, m?) -> (n?, M?) (Размер 2 отличается от 1)

  • Мой X_train имеет такую ​​форму:
[[-0.77046461  1.29791815]
 [-0.77046461 -0.77046461]
 [-0.77046461  1.29791815]
 ...
 [-0.77046461 -0.77046461]
 [-0.77046461  1.29791815]
 [-0.77046461 -0.77046461]]
  • А мой y_train выглядит так:
[[59.]
 [54.]
 [40.]
 ...
 [24.]
 [33.]
 [41.]]

  • Данные, в которых я делаю свой прогноз, имеют такую ​​форму:
[[-0.76666002]
 [ 1.30435914]
 [-0.76666002]
 ...
 [-0.76666002]
 [-0.76666002]
 [-0.76666002]]

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Поскольку значение X_test_lm.shape равно (1300, 1), это означает, что в качестве данных поезда используется только 1 столбец, а не 2. Бета-вектор, обученный на обученных данных, ожидает матрицу с 2 столбцами, что дает ошибку.

Вы должны проверить определение create_dataset_test, чтобы увидеть, как вы попали в это состояние.

1 голос
/ 27 мая 2020

Несоответствие размеров.

У вас есть несовместимые измерения, поскольку X_test_lm имеет N (количество строк) образцов , но сравнивается только 1 (количество столбцов) функция / переменная к форме X_train.


Подробности:

У вас есть X_train как:

[[-0.77046461  1.29791815]
 [-0.77046461 -0.77046461]
 [-0.77046461  1.29791815]
 ...
 [-0.77046461 -0.77046461]
 [-0.77046461  1.29791815]
 [-0.77046461 -0.77046461]]

, поэтому модель обучается на N (количество строк) выборок с 2 (количество столбцов) функциями / переменными.

Затем, когда вы просите предсказать:

[[-0.76666002]
 [ 1.30435914]
 [-0.76666002]
 ...
 [-0.76666002]
 [-0.76666002]
 [-0.76666002]]

вы имеют несовместимые размеры, поскольку X_test_lm снова имеет N (количество строк) выборок , но на этот раз только 1 (количество столбцов) функция / переменная.

Но, функция predict модели ожидает на входе массив с формой [N, 2], и вы получите:

ValueError: matmul: Входной операнд 1 имеет несоответствие в его основном измерении 0 с сигнатурой gufun c (n?, k), (k, m?) -> (n?, m?) (размер 2 отличается от 1)

Как вы сказали, X_test_lm.shape это (1300, 1) поэтому модель пытается предсказать t значения этих 1300 образцов, имеющих только одну особенность (1). Вот что вызывает ошибку. Модель обучалась с использованием X_train, имеющего форму [N, 2] , а не [N, 1].


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...