Реализовать R2 в Python - PullRequest
       1

Реализовать R2 в Python

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

Я пытаюсь реализовать регрессию OLS с нуля и оцениваю эту модель, используя R2, ​​построенный с нуля.

#Initialize dictionary, append 1's, compute betas. 
params = {}
ones = np.ones(shape=y.shape)[..., None]
X = np.concatenate((ones, X), 1)
betas = inv(X.transpose().dot(X)).dot(X.transpose()).dot(y)

#store betas and intercept in a dictionary
params["betas"] = betas[:-1]
params["intercept"] = betas[-1]

#remove intercept from X2 matrix, compute yhat. 
X2 = np.delete(X,0, axis=1)
y_hat = X2.dot(betas[:-1])

#Compute R2
errors = y - y_hat 
sse = (errors ** 2).sum()
tss = ((y - y.mean()) ** 2).sum()    
r2 = 1 - sse / tss
print("r2" , r2)

#output
r2 -2346.8284726742468

Выход R2 не имеет смысла.Вот как это должно выглядеть:

# Using LinearRegression() to compute the regression
reg = LinearRegression()
# Fitting training data
reg = reg.fit(X2, y)
# Calculating RMSER2 Score
r2_score = reg.score(X2, y)
print("r2_Score", r2_score)

#output 
r2_Score 0.7406077428649428

Я подозреваю, что моя ошибка может быть в умножении матриц, но я смотрел на это часами и не заметил свою ошибку.Форма выглядит следующим образом:

print("X2",X2.shape)
print("betas",betas[:-1].shape)
print("y_hat",y_hat.shape)

#output
X2 (506, 13)
betas (13,)
y_hat (506,)

Любой совет действительно ценится!

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