Різниця між статистикою 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.