Есть ли в реализации PCA в sklearn перехват? - PullRequest
2 голосов
/ 08 июля 2020

Я использую реализацию PCA из sklearn и хотел экспортировать нагрузки из подобранной модели, чтобы я мог преобразовать где-нибудь еще, не используя python.

Однако у меня возникла проблема, когда я попытался проверить, что скалярное произведение набора данных с нагрузками не дало того же результата, что и функция преобразования. Вот пример:

df = pd.DataFrame({'col1': [5,3,1,1,2,2,3,3,3],
                   'col2': [5,3,1,2,2,3,4,5,5],
                   'col3': [3,3,1,1,1,1,1,1,1]})

Я импортирую PCA из sklearn и подгоняю модель с одним компонентом

from sklearn.decomposition import PCA
model = PCA(n_components=1)
model.fit(df)

С подобранной моделью я преобразовываю набор данных из 3 столбцов в один столбец

print(model.transform(df))
array([[ 3.13985669],
       [ 0.4068059 ],
       [-2.81207381],
       [-2.0684094 ],
       [-1.44554842],
       [-0.701884  ],
       [ 0.6646414 ],
       [ 1.40830581],
       [ 1.40830581]])

Согласно документам sklearn, я могу получить доступ к де-загрузке в атрибуте components_. Когда я трансформирую набор данных с использованием загрузок, я получаю другой результат.

print(df.dot(model.components_.T).values)
array([[7.56137036],
       [4.82831957],
       [1.60943986],
       [2.35310427],
       [2.97596525],
       [3.71962967],
       [5.08615507],
       [5.82981948],
       [5.82981948]])

Однако разница между выходными данными ботов кажется постоянной

print(model.transform(df) - df.dot(model.components_.T).values)
[[-4.42151367]
 [-4.42151367]
 [-4.42151367]
 [-4.42151367]
 [-4.42151367]
 [-4.42151367]
 [-4.42151367]
 [-4.42151367]
 [-4.42151367]]

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

Примечание: я знаю, что нормализация данных решает проблему перехвата, но я не могу использовать его в этой ситуации.

...