Подтвердить что ты не робот

Обзор Sci-kit и регрессии

Как пользователь R, мне также хотелось получить скорость на scikit.

Начинал с линейного, хребта и лассо. Я прошел через примеры. Ниже приведено базовое значение OLS.

Чтобы настроить модель (ы), кажется достаточно разумным, но не может найти разумного способа получить стандартный набор регрессионного вывода.

Пример в моем коде:

# Linear Regression
import numpy as np
from sklearn import datasets
from sklearn.linear_model import LinearRegression
# load the diabetes datasets
dataset = datasets.load_diabetes()
# fit a linear regression model to the data
model = LinearRegression()
model.fit(dataset.data, dataset.target)
print(model)
# make predictions
expected = dataset.target
predicted = model.predict(dataset.data)
# summarize the fit of the model
mse = np.mean((predicted-expected)**2)
print model.intercept_, model.coef_, mse, 
print(model.score(dataset.data, dataset.target))

Кажется, что в модель встроен перехват и коффикс, и я просто печатаю печать (от второй до последней строки), чтобы увидеть их. Что касается всех других стандартных регрессионных выходов, таких как R ^ 2, скорректированных значений R ^ 2, p и т.д. Если я правильно прочитал примеры, похоже, вам нужно написать функцию/уравнение для каждого из них, а затем распечатать.

Итак, нет ли стандартного сводного вывода для моделей lin reg?

Кроме того, в моем напечатанном массиве выходов коэффициентов нет имен переменных, связанных с каждым из них? Я просто получаю числовой массив. Есть ли способ распечатать их, где я получаю вывод коэффициентов и переменных, с которыми они идут?

Мой напечатанный вывод

LinearRegression(copy_X=True, fit_intercept=True, normalize=False)
152.133484163 [ -10.01219782 -239.81908937  519.83978679  324.39042769 -792.18416163
  476.74583782  101.04457032  177.06417623  751.27932109   67.62538639] 2859.69039877
0.517749425413

Благодаря пользователям scilearn.

4b9b3361

Ответ 1

В sklearn отсутствует сводный отчет о регрессии типа R. Основная причина заключается в том, что sklearn используется для интеллектуального моделирования/машинного обучения, а критерии оценки основаны на производительности по ранее невидимым данным (например, предсказательный r ^ 2 для регрессии).

Существует сводная функция для классификации, называемая sklearn.metrics.classification_report, которая вычисляет несколько типов (прогнозных) баллов по классификации.

Для более классического статистического подхода взгляните на statsmodels.

Ответ 2

Пакет statsmodels дает тихое приличное резюме

from statsmodels.api import OLS
OLS(dataset.target,dataset.data).fit().summary()

Ответ 3

Я использую:

import sklearn.metrics as metrics
def regression_results(y_true, y_pred):

    # Regression metrics
    explained_variance=metrics.explained_variance_score(y_true, y_pred)
    mean_absolute_error=metrics.mean_absolute_error(y_true, y_pred) 
    mse=metrics.mean_squared_error(y_true, y_pred) 
    mean_squared_log_error=metrics.mean_squared_log_error(y_true, y_pred)
    median_absolute_error=metrics.median_absolute_error(y_true, y_pred)
    r2=metrics.r2_score(y_true, y_pred)

    print('explained_variance: ', round(explained_variance,4))    
    print('mean_squared_log_error: ', round(mean_squared_log_error,4))
    print('r2: ', round(r2,4))
    print('MAE: ', round(mean_absolute_error,4))
    print('MSE: ', round(mse,4))
    print('RMSE: ', round(np.sqrt(mse),4))

Ответ 4

Используйте model.summary() после прогнозирования

# Linear Regression
import numpy as np
from sklearn import datasets
from sklearn.linear_model import LinearRegression

# load the diabetes datasets
dataset = datasets.load_diabetes()

# fit a linear regression model to the data
model = LinearRegression()
model.fit(dataset.data, dataset.target)
print(model)

# make predictions
expected = dataset.target
predicted = model.predict(dataset.data)

# >>>>>>>Print out the statistics<<<<<<<<<<<<<
model.summary()

# summarize the fit of the model
mse = np.mean((predicted-expected)**2)
print model.intercept_, model.coef_, mse, 
print(model.score(dataset.data, dataset.target))