Я немного новичок в машинном обучении и пытаюсь выполнить линейную регрессию без использования linear_model.LinearRegression () через sklearn. Я думаю, что приближаюсь к концу моего кодирования и готовлюсь к построению линии, но получаю сообщение об ошибке «ValueError: формы (20,1) и (2,1) не выровнены: 1 (dim 1)! = 2 ( тусклый 0) ". Я распечатал свои матрицы 20 на 1 для подтверждения, и ни у одной из них нет дополнительных измерений или чего-то еще, поэтому я не уверен, почему он дает мне (2,1)
в сообщении об ошибке или почему размеры не совпадают. Есть ли у кого-нибудь рекомендации, как "выровнять" эти матрицы? Я использую Python 3.5.1.
Изменить: я просмотрел множество других тем о ValueError в stackoverflow, но у меня возникли проблемы с пониманием рекомендаций. Если возможно, условия непрофессионала будут приняты с благодарностью.
По словам Георгия, я сократил код до строк, необходимых для появления сообщения об ошибке. alpha
, iters
и theta
остались одни, чтобы показать все переменные, необходимые для передачи в функции.
Изменить 2: попробуйте 2, чтобы уменьшить пример кода. Спасибо, что работали со мной над этим. Я помещаю команду try-except вокруг этой строки кода:
theta = theta -(alpha/len(X)) * np.sum((X @ theta.T - y) * X, axis=0)
Указанная строка помещается в цикл for с использованием i
в качестве переменной. Указанная строка дает мне следующую ошибку:
Traceback (most recent call last):
File "C:\Users\YungL\Desktop\linearRegression.py", line 30, in <module>
slope_and_intercept, cost = gradDescent(X_test, Y_test, theta, alpha, iters)
File "C:\Users\YungL\Desktop\linearRegression.py", line 26, in gradDescent
theta = theta -(alpha/len(X)) * np.sum((X @ theta.T - y) * X, axis=0)
ValueError: shapes (20,1) and (2,1) not aligned: 1 (dim 1) != 2 (dim 0)
Печать X[i]
, y[i]
и theta
при возникновении исключения дает мне это соответственно:
[[ 0.07786339] [[233.] [[1. 1.]]
Столбец 1 - X
, столбец 2 - y
, а столбец 3 - theta
. Ссылаясь на матрицы, это первые значения в каждой матрице. Хотя для theta
это единственное значение.
Вот полная матрица X
и y
на момент исключения:
[[ 0.07786339] [[233.]
[-0.03961813] [ 91.]
[ 0.01103904] [111.]
[-0.04069594] [152.]
[-0.03422907] [120.]
[ 0.00564998] [ 67.]
[ 0.08864151] [310.]
[-0.03315126] [ 94.]
[-0.05686312] [183.]
[-0.03099563] [ 66.]
[ 0.05522933] [173.]
[-0.06009656] [ 72.]
[ 0.00133873] [ 49.]
[-0.02345095] [ 64.]
[-0.07410811] [ 48.]
[ 0.01966154] [178.]
[-0.01590626] [104.]
[-0.01590626] [132.]
[ 0.03906215] [220.]
[-0.0730303 ]] [ 57.]]
X
,theta
иy
следующий код:np.sum((X @ theta.T - y) * X, axis=0)
дает эту ошибку: ... - person Georgy   schedule 16.10.2018diabetes_data
иdiabetes
. Но на самом деле они нам не нужны, так как вы все равно можете уменьшить свой пример. Вы можете использоватьtry-except
, чтобы поймать момент, когда у вас появится ошибка и распечатайте значенияX
иy
. Затем добавьте их сюда. - person Georgy   schedule 16.10.2018X
иy
, потому что вы используете в этой формуле полные массивы, а не отдельные их элементы. Но мы приближаемся! - person Georgy   schedule 16.10.2018X @ theta
, а неX @ theta.T
. - person Blckknght   schedule 16.10.2018X
и формаtheta
не равны ((20,)
и(2,)
). Точечный продукт не будет работать здесь. Вероятно, у них есть ошибка в формуле или в определенииtheta
. - person Georgy   schedule 16.10.2018(20, 1)
и(1, 2)
соответственно, которые могут правильно размножаться. Перемещение второго дает форму(2, 1)
, что вызывает исключение. Печатные значения подтверждают эти выводы (X
выглядит длинным столбцом, аtheta
имеет два элемента в одной строке). - person Blckknght   schedule 16.10.2018.T
, чтобы проверить это, мне также пришлось удалить.T
из этой строки кода:inner = np.power(((X @ theta.T) - y), 2)
, потому что это вызвало ту же ошибку. Программа теперь работает, но я получаю ровную линию за пределами точек данных. - person Spigot   schedule 16.10.2018