def test_tweedie_score(regression_data, power, link): """Test that GLM score equals d2_tweedie_score for Tweedie losses.""" X, y = regression_data # make y positive y = np.abs(y) + 1.0 glm = TweedieRegressor(power=power, link=link).fit(X, y) assert glm.score(X, y) == pytest.approx( d2_tweedie_score(y, glm.predict(X), power=power))
def sk_tweedie_regression(X_train, X_test, y_train, y_test, set_model='linear'): if set_model == 'Poisson': reg = TweedieRegressor( alpha=0, power=1, # Poisson distribution link='log', fit_intercept=False, max_iter=300) elif set_model == 'linear': reg = TweedieRegressor( alpha=0, power=0, # Normal distribution link='identity', fit_intercept=False, max_iter=300) else: print('Set the correct name.') return reg.fit(X_train, y_train) print('score: ', reg.score(X_test, y_test)) y_hat = reg.predict(X) fig = plt.figure(figsize=(6.0, 6.0)) plt.plot(X, y, 'o') plt.plot(X, y_hat, '*', color='r') plt.xlabel('x (total_bill)') plt.ylabel('y (tips)') plt.xlim(0, 60) plt.ylim(0, 12) plt.show()
#%% from sklearn.linear_model import TweedieRegressor X = np.array(x).reshape(-1,1) Y = np.array(y) pr = TweedieRegressor(power = 1, alpha=0, fit_intercept=True) y_pred_pr = pr.fit(X, Y).predict(X) fig, axes = utils.plot_make(size_length=5) sns.scatterplot(data = sc_vs_quickness_group_fill, x = "sc_LR_mean", y= "inverse_quickness", linewidth=0, s=100) sns.lineplot(x = X.flatten(), y = y_pred_pr) pr.score(X, Y) #% X2 = sm.add_constant(X) glm = sm.GLM(Y, X2, family=sm.families.Tweedie()) glm_fit = glm.fit() print(glm_fit.summary()) Y2 = glm.predict(glm_fit.params) fig, axes = utils.plot_make(size_length=5) sns.scatterplot(data = sc_vs_quickness_group_fill, x = "sc_LR_mean", y= "inverse_quickness", linewidth=0, s=100) sns.lineplot(x = X.flatten(), y = Y2)