Я использую факторный анализ Scikit-Learn в приложении, которое основано на предположении, что факторы некоррелированы. Было бы здорово иметь больше интерпретируемых факторов, и ортогональное вращение, такое как варимакс, должно помочь.
Я не понимаю, почему это с помощью sklearn.decomposition.FactorAnaанализ(n_comComponents=n, Rotation="varimax") дает корреляции, которые на порядки больше, чем с Rotate=None. Для моего приложения r=1e-5 незначителен, а r=0,0015 - нет.
Этот эффект можно наблюдать (с различиями в 3/10 порядков) в приведенном ниже примере, полученном на основе примеров декомпозиции scikit-learn, и я также наблюдаю его в своем наборе данных, который примерно на порядок больше. Кажется, он не зависит (сильно) от количества компонентов и не зависит (для вращающихся факторов) от алгоритма SVD.
Я пробовал использовать код в этом ответе, который относится к пакету Factor_anlyzer, но я обнаружил большие корреляции (например, ~ 0,5, до такой степени, что я блуждаю, если неправильно понял смысл этого кода) или числовые ошибки в матричных операциях.
Использование FactorAnalyzer из пакета Factor_anlyzer дает корреляции одного и того же порядка без учета вращения. Мой текущий патч заключается в понижении версии scikit-learn и использовании Factor_anlyzer.
Есть идеи? Я что-то упускаю из значения выходных данных? Будет ли это считаться ошибкой?
Пример (посмотрите на масштаб цветовой панели!):
# sklearn's example
import numpy as np
import matplotlib.pyplot as plt
from numpy.random import RandomState
from sklearn import cluster, decomposition
from sklearn.datasets import fetch_olivetti_faces
rng = RandomState(0)
faces, _ = fetch_olivetti_faces(return_X_y=True, shuffle=True, random_state=rng)
n_samples, n_features = faces.shape
# Global centering (focus on one feature, centering all samples)
faces_centered = faces - faces.mean(axis=0)
# Local centering (focus on one sample, centering all features)
faces_centered -= faces_centered.mean(axis=1).reshape(n_samples, -1)
# My bit:
n_components = 20
for svd in ["lapack", "randomized"]:
for rotation in ["varimax", None]:
fa_estimator = decomposition.FactorAnalysis(
n_components=n_components, max_iter=20, svd_method=svd, rotation=rotation
)
factors = fa_estimator.fit_transform(faces_centered)
corr = np.corrcoef(factors, rowvar=False)
corr[np.diag_indices_from(corr)] = np.nan
plt.imshow(corr)
plt.colorbar()
plt.title("SVD method: %s, rotation: %s" % (svd, rotation))
plt.show()
Подробнее здесь: https://stackoverflow.com/questions/798 ... tion-of-fa
Sklearn Факторный анализ Ортогональное вращение varimax увеличивает корреляцию факторов ⇐ Python
Программы на Python
1768920271
Anonymous
Я использую факторный анализ Scikit-Learn в приложении, которое основано на предположении, что факторы некоррелированы. Было бы здорово иметь больше интерпретируемых факторов, и ортогональное вращение, такое как варимакс, должно помочь.
Я не понимаю, почему это с помощью sklearn.decomposition.FactorAnaанализ(n_comComponents=n, Rotation="varimax") дает корреляции, которые на порядки больше, чем с Rotate=None. Для моего приложения r=1e-5 незначителен, а r=0,0015 - нет.
Этот эффект можно наблюдать (с различиями в 3/10 порядков) в приведенном ниже примере, полученном на основе примеров декомпозиции scikit-learn, и я также наблюдаю его в своем наборе данных, который примерно на порядок больше. Кажется, он не зависит (сильно) от количества компонентов и не зависит (для вращающихся факторов) от алгоритма SVD.
Я пробовал использовать код в этом ответе, который относится к пакету Factor_anlyzer, но я обнаружил большие корреляции (например, ~ 0,5, до такой степени, что я блуждаю, если неправильно понял смысл этого кода) или числовые ошибки в матричных операциях.
Использование FactorAnalyzer из пакета Factor_anlyzer дает корреляции одного и того же порядка без учета вращения. Мой текущий патч заключается в понижении версии scikit-learn и использовании Factor_anlyzer.
Есть идеи? Я что-то упускаю из значения выходных данных? Будет ли это считаться ошибкой?
Пример (посмотрите на масштаб цветовой панели!):
# sklearn's example
import numpy as np
import matplotlib.pyplot as plt
from numpy.random import RandomState
from sklearn import cluster, decomposition
from sklearn.datasets import fetch_olivetti_faces
rng = RandomState(0)
faces, _ = fetch_olivetti_faces(return_X_y=True, shuffle=True, random_state=rng)
n_samples, n_features = faces.shape
# Global centering (focus on one feature, centering all samples)
faces_centered = faces - faces.mean(axis=0)
# Local centering (focus on one sample, centering all features)
faces_centered -= faces_centered.mean(axis=1).reshape(n_samples, -1)
# My bit:
n_components = 20
for svd in ["lapack", "randomized"]:
for rotation in ["varimax", None]:
fa_estimator = decomposition.FactorAnalysis(
n_components=n_components, max_iter=20, svd_method=svd, rotation=rotation
)
factors = fa_estimator.fit_transform(faces_centered)
corr = np.corrcoef(factors, rowvar=False)
corr[np.diag_indices_from(corr)] = np.nan
plt.imshow(corr)
plt.colorbar()
plt.title("SVD method: %s, rotation: %s" % (svd, rotation))
plt.show()
Подробнее здесь: [url]https://stackoverflow.com/questions/79872075/sklearns-factoranalysis-varimax-orthogonal-rotation-increases-correlation-of-fa[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия