Я использую реализацию 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 включает перехват? Если да, есть ли способ получить доступ к этому перехвату без вызова разницы между функцией преобразования и точечным произведением данных с загрузками?
Примечание: я знаю, что нормализация данных решает проблему перехвата, но я не могу использовать его в этой ситуации.