0
我目前正在寫一元線性迴歸的Python的實現:單變量線性迴歸輸出的NaN
# implementation of univariate linear regression
import numpy as np
def cost_function(hypothesis, y, m):
return (1/(2 * m)) * ((hypothesis - y) ** 2).sum()
def hypothesis(X, theta):
return X.dot(theta)
def gradient_descent(X, y, theta, m, alpha):
for i in range(1500):
temp1 = theta[0][0] - alpha * (1/m) * (hypothesis(X, theta) - y).sum()
temp2 = theta[1][0] - alpha * (1/m) * ((hypothesis(X, theta) - y) * X[:, 1]).sum()
theta[0][0] = temp1
theta[1][0] = temp2
return theta
if __name__ == '__main__':
data = np.loadtxt('data.txt', delimiter=',')
y = data[:, 1]
m = y.size
X = np.ones(shape=(m, 2))
X[:, 1] = data[:, 0]
theta = np.zeros(shape=(2, 1))
alpha = 0.01
print(gradient_descent(X, y, theta, m, alpha))
此代碼將輸出爲NaN爲θ表示將無限後 - 我無法弄清楚是怎麼回事錯誤,但這肯定與我在梯度下降函數中改變theta有關。
我正在使用的數據是一個簡單的線性迴歸對數據集我上網 - 並加載正確。
任何人都可以指向正確的方向嗎?
不幸的是,這似乎並沒有解決這個問題 - 像以前相同的輸出。 – bag
您還需要重塑X [:,1]。我會編輯 –
仍然沒有運氣!與以前相同的輸出。我已經在if __name__塊中聲明瞭m之後直接插入了y = y.reshape((m,1)),並且x1 = X [:,1] .reshape((m,1))梯度下降。 – bag