Колінеарні змінні в навчанні багатошарового LDA


16

Я готую багатокласний класифікатор LDA з 8 класами даних.

Під час виконання тренінгу я отримую попередження: " Змінні колінеарні "

Я отримую точність тренувань понад 90% .

Я використовую бібліотеку scikits-learn у Python, щоб тренувати та перевіряти дані класу Multi-Class.

Я також отримую гідну точність тестування (близько 85% -95% ).

Я не розумію, що означає помилка / попередження. Будь ласка, допоможіть мені.

Відповіді:


29

Мультиколінеарність означає, що ваші прогнози є кореляційними. Чому це погано?

Оскільки LDA, як і методи регресії, включає обчислення інверсії матриці, яка є неточною, якщо визначник близький до 0 ( тобто дві або більше змінних є майже лінійною комбінацією один одного).

Що ще важливіше, це робить неможливі інтерпретацію оцінених коефіцієнтів. Якщо збільшення , скажімо, пов'язано зі зменшенням X 2 і вони обидва збільшення змінної Y , кожна зміна в X 1 буде компенсовано зміною X 2 , і ви будете недооцінювати вплив X 1 на Y . У LDA ви б недооцінили вплив X 1 на класифікацію.X1X2YX1X2X1YX1

Якщо все, що вам цікаво, це класифікація сама по собі , а після тренування вашої моделі на половині даних та її тестування на іншій половині ви отримаєте 85-95% точності, я б сказав, що це добре.


Тож чи можу я інтерпретувати це як те, що функція X1 у векторному характеристиці не є хорошим вибором у випадку, якщо точність тестування низька?
garak

1
Я думаю, що якщо точність тестування низька, хорошого вибору немає.
gui11aume

Що цікаво, у мене є ця проблема з LDA, але не тоді, коли я використовую QDA. Цікаво, що там різного?
Гарак

1
+1 для відповіді, але "обчислення інверсії матриці" може бути неточним. Ми ніколи цього не явно комп’ютерно використовуємо, використовуються прямі методи, такі як LU, QR або ітераційні методи.
Haitao Du

@ hxd1011 Правильно! Для запису, чи можете ви дати кілька слів про те, що відбувається в LU / QR тощо, коли матриця є "майже сингулярним", або, можливо, вкажіть на документ, який це пояснює?
gui11aume

12

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

. X1=5X2+3X3X4

Припустимо, найкращий LDA має таку лінійну межу:

X1+2X2+X32X4=5

Тоді ми можемо замінити для X 1 n граничного рівняння LDA, так що: 5X2+3X3X4X1

5X2+3X3X4+2X2+X32X4=5

або

. 7X2+4X33X4=5

1,2,1,2X1X2X3X40,7,3,1

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

X20X3X4


1

Хоча відповідь, яка була позначена тут, правильна, я думаю, ви шукали інше пояснення, щоб дізнатися, що сталося у вашому коді. У мене був такий самий випуск через модель.

Ось що відбувається: ви тренуєте свою модель за допомогою передбачуваної змінної як частини вашого набору даних. Ось приклад того, що сталося зі мною, навіть не помічаючи цього:

df = pd.read_csv('file.csv')
df.columns = ['COL1','COL2','COL3','COL4']
train_Y = train['COL3']
train_X = train[train.columns[:-1]]

У цьому коді я хочу передбачити значення "COL3" ... але, якщо ви подивитесь на train_X, я кажу йому, щоб отримати кожен стовпець, крім останнього, тому його введення COL1 COL2 і COL3, а не COL4, і намагається передбачити COL3, який є частиною поїзда_X.

Я виправив це, просто перемістивши стовпці, перемістив COL3 вручну в Excel, щоб він був останнім стовпцем у моєму наборі даних (зараз це місце COL4), а потім:

df = pd.read_csv('file.csv')
df.columns = ['COL1','COL2','COL3','COL4']
train_Y = train['COL4']
train_X = train[train.columns[:-1]]

Якщо ви не хочете переміщувати його в Excel і хочете просто зробити це за кодом, виконайте вказані нижче дії.

df = pd.read_csv('file.csv')
df.columns = ['COL1','COL2','COL3','COL4']
train_Y = train['COL3']
train_X = train[train.columns['COL1','COL2','COL4']]

Зауважте, як я оголосив train_X, щоб включити всі стовпці, крім COL3, що є частиною train_Y.

Я сподіваюся, що це допомагає.

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