Різниця між статистикою OLS статистики та лінійною регресією scikit


16

У мене є питання про два різні методи з різних бібліотек, які, здається, виконують ту саму роботу. Я намагаюся зробити лінійну регресійну модель.

Ось код, за допомогою якого я використовую бібліотеку statsmodel з OLS:

X_train, X_test, y_train, y_test = cross_validation.train_test_split(x, y, test_size=0.3, random_state=1)

x_train = sm.add_constant(X_train)
model = sm.OLS(y_train, x_train)
results = model.fit()

print "GFT + Wiki / GT  R-squared", results.rsquared

Це друк GFT + Wiki / GT R-квадрата 0,981434611923

а другий - метод лінійної моделі бібліотеки scikit:

model = LinearRegression()
model.fit(X_train, y_train)

predictions = model.predict(X_test)

print 'GFT + Wiki / GT R-squared: %.4f' % model.score(X_test, y_test)

Ця роздрукована таблиця GFT + Wiki / GT R: 0,8543

Отже, моє запитання полягає в тому, що обидва способи друкують наш R ^ 2 результат, але один роздруковується 0,98, а другий - 0,85.

З мого розуміння, OLS працює з навчальним набором даних. Тож мої запитання,

  • Чи існує спосіб роботи з тестовими даними, встановленими з OLS?
  • Чи надає нам бал даних набору даних про навчання (у OLS ми не використовували тестовий набір даних)? З моїх минулих знань, ми маємо працювати з даними тестів.
  • Чим відрізняється OLS від лінійної регресії scikit. Який із них ми використовуємо для обчислення оцінки моделі?

Дякуємо за будь-яку допомогу.

Відповіді:


15

По-перше, з точки зору використання. Ви можете отримати прогноз у статистичних моделях дуже подібним чином, як у scikit-learn, за винятком того, що ми використовуємо екземпляр результатів, повернутийfit

predictions = results.predict(X_test)

З огляду на прогнози, ми можемо обчислити статистику, яка базується на помилці прогнозування

prediction_error = y_test - predictions

Існує окремий перелік функцій для обчислення корисності статистики прогнозування, але він не інтегрований у моделі, а також не включає R у квадрат. (Я ніколи не чув про R квадрата, використовуваного для вибіркових даних.) Для обчислення цих даних користувач потребує трохи більшої роботи, а статистичні моделі не мають однакового набору статистичних даних, особливо не для класифікації або моделей зі змінною бінарної відповіді.

До Ваших інших пунктів:

Лінійна регресія за своєю основною формою однакова як у статистичних моделях, так і в науці-науці. Однак реалізація відрізняється, що може призвести до різних результатів у кращих випадках, і scikit learn має загалом більшу підтримку для більш великих моделей. Наприклад, статистичні моделі в даний час використовують рідкісні матриці в дуже мало частинах.

Найважливіша відмінність полягає в навколишній інфраструктурі та випадках використання, які безпосередньо підтримуються.

Статистичні моделі значною мірою слідують традиційній моделі, де ми хочемо знати, наскільки дана модель відповідає даним, і які змінні "пояснюють" чи впливають на результат, або який розмір ефекту. Scikit-learn слідує традиції машинного навчання, де головним підтримуваним завданням є вибір "найкращої" моделі для прогнозування.

Як наслідок, акцент у допоміжних особливостях статистичних моделей робиться на аналізі навчальних даних, що включає тести гіпотези та заходи, що підходять для пристосування, тоді як акцент у підтримці інфраструктури в науковому навчанні робиться на виборі моделі для виїзних моделей вибіркове прогнозування і, отже, перехресне підтвердження "тестових даних".

Це вказує на відмінність, є ще досить багато перекриттів у використанні. statsmodels також робить прогнозування та додатково прогнозує в контексті часових рядів. Але, коли ми хочемо зробити перехресну валідацію для прогнозування в статистичних моделях, наразі все ще часто простіше повторно використовувати налаштування крос-валідації scikit-learn разом з моделями оцінки статистичних моделей.


Хм, я намагаюся використовувати модель ARMA від statsmodels.tsa, але інтерфейс передбачення там зовсім інший. Чи знаєте ви, як подати дані тесту?
ефи

1
Це вже інше питання, і вам потрібно переглянути документацію або приклади. Прогнозування в моделях часових рядів сильно відрізняється через послідовну структуру часу і прогнозування прогнозує значення в наступні періоди часу.
Йосиф

Ти маєш рацію, це ще одне питання, але дякую за пояснення. Я прочитав документацію і змусив її якось працювати. Але я досі не розумію, чому інтерфейс інший. Тим більше, чому неможливо надати функціональні вектори та отримати прогнози (прогнози).
ефеси

ARMA та SARIMAX дозволяють включати пояснювальні змінні exogв оцінку та прогнозування.
Йосиф

Це питання щодо Stackowerlow стосується різниці в інтерфейсах: stackoverflow.com/questions/41045752/…
Девід Дейл

1

У моделі OLS ви використовуєте навчальні дані для відповідності та прогнозування.

У моделі LinearRegression ви використовуєте навчальні дані для підгонки та тестування даних для прогнозування, тому різні результати в балах R2.

Якщо ви брали б тестові дані в моделі OLS, у вас повинні бути однакові результати та нижча вартість


1

Я зіткнувся з подібною проблемою, коли OLS дає різні значення Rsquared та коригування Rsquared порівняно з моделлю Sklearn LinearRegression.

Причина цього: OLS не вважає за замовчуванням коефіцієнт перехоплення і там будує модель без неї, і Sklearn вважає це при створенні моделі.

Рішення: Додайте стовпчик 1 до набору даних і підміньте модель з OLS, і ви отримаєте майже однакові Rsquared та Adj. Значення Rsquared для обох моделей.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.