Si votre problème est une question d'utilisation, soumettez-le plutôt ici : - StackOverflow avec la balise scikit-learn : https://stackoverflow.com/questions/tagged/scikit-learn - Liste de diffusion : https://mail.python.org /mailman/listinfo/scikit-learn Pour plus d'informations, consultez les questions des utilisateurs : http://scikit-learn.org/stable/support.html#user-questions Instructions pour signaler un bogue : https://github.com/scikit -learn/scikit-learn/blob/master/CONTRIBUTING.md#filing-bugs
Étant donné deux matrices de vue X
et Y
, CCA devrait renvoyer les n_components
combinaisons linéaires des éléments dans X
's et Y
' s vecteurs avec la plus grande corrélation, c'est-à-dire que la première composante a la plus grande corrélation, la deuxième a la deuxième plus grande corrélation dans une direction qui n'est pas corrélée avec la première, etc. Cependant, dans le code suivant, les deuxièmes colonnes sont clairement moins corrélée que les troisièmes colonnes :
from sklearn.cross_decomposition import CCA
import numpy as np
from scipy import stats
X = [[0.006061109337620652, 0.0392466675239141, -0.04312459861840733], [-0.6652995467596429, 0.2076410843346226, -0.7817536882379651], [-1.4060868112838942, -0.055029478343267685, -1.006415484608637], [-2.170613455952169, -0.15770102997315535, -1.5223958036356375], [-2.895702070412092, -0.20498481413822175, -1.8232022285963847], [-3.687452614812402, -0.543003880524402, -2.2952030829468533], [-4.206168972149556, -0.3365693935548624, -2.841946351795423], [-5.231288268781064, -0.8024321344988571, -3.40532581256557], [-6.095805742721522, -0.9381144689340173, -3.593752186094848], [-6.297988264542059, -0.7231985020991631, -3.9435579269998406], [-7.10897027952524, -0.8639925998765747, -4.264992629284153], [-8.116238092376772, -1.0123970020855437, -4.96858178622968], [-8.969468878952105, -1.0235782019578692, -5.617282941713933], [-9.839359511108077, -1.2819621078971968, -5.8901943190245625], [-10.181936322525571, -0.9904671991812529, -6.240811384647836]]
Y = [[0.032927114749911154, 0.21320841666565743, -0.23427536580450153], [1.431742605643286, 0.23963850202268067, 0.8438745303679628], [2.908798834568648, 0.7357229001312737, 1.325345683629048], [4.438824821921929, 0.9473643810538429, 2.35038560647864], [5.887201894166226, 1.0302756424934638, 2.964806513433767], [7.409049064480012, 1.3070946380395154, 4.347473875547982], [8.51501831350366, 1.3380108570442941, 4.9533251686263275], [10.57244384646805, 2.31627294094068, 6.028949244604159], [12.22872203222364, 2.1165257564864675, 6.923464021607424], [12.664660419747504, 1.8911363532121173, 7.398432173930664], [14.29235367239137, 2.2098221962551343, 8.000538342827351], [16.327977920399373, 2.643183255720207, 9.257671785118596], [18.081288169620517, 2.968898443090926, 10.221747267811098], [19.754046559146662, 3.051682253577557, 11.244435627784393], [20.466418131910004, 2.644933083198568, 11.752014917896375]]
cca = CCA(n_components=3)
cca.fit(X, Y)
X_transformed, Y_transformed = cca.transform(X, Y)
print(X_transformed)
[[ 1.64277244 0.08237031 0.11724683]
[ 1.41457457 -0.11600721 0.07162219]
[ 1.18686358 0.00666119 0.08822118]
[ 0.94070119 -0.02504267 -0.0112954 ]
[ 0.71314666 0.02919558 0.25990473]
[ 0.46246267 0.05607036 -0.16424275]
[ 0.28625435 -0.09546609 -0.02850206]
[-0.03644528 -0.03407977 -0.55790786]
[-0.30127324 0.12266269 -0.12622283]
[-0.37581414 -0.01941656 -0.0343278 ]
[-0.62900674 0.05973748 0.13448604]
[-0.95400947 0.0082079 -0.05487306]
[-1.23214839 -0.07548718 -0.08864002]
[-1.50031366 0.05776429 0.00665019]
[-1.61776455 -0.0571703 0.38788062]]
print(Y_transformed)
[[ 1.64131294 0.01428169 0.11343087]
[ 1.41330957 -0.06169376 0.06929115]
[ 1.18580457 0.04946041 0.0853499 ]
[ 0.9398609 0.01613582 -0.01092778]
[ 0.71251056 0.06356946 0.25144578]
[ 0.46205587 -0.05371303 -0.15889725]
[ 0.28599564 -0.05298207 -0.02757442]
[-0.03641563 0.02220818 -0.53975 ]
[-0.30099795 0.01004611 -0.12211474]
[-0.37547807 -0.063071 -0.03321056]
[-0.62844374 0.02679924 0.13010901]
[-0.95315959 0.0185694 -0.05308714]
[-1.23105629 0.03726576 -0.08575511]
[-1.49897395 0.01483407 0.00643375]
[-1.61632484 -0.04171028 0.37525653]]
La corrélation entre les troisièmes colonnes de X_transfomed
et Y_transformed
est d'environ 1, tandis que la corrélation entre les deuxièmes colonnes n'est que de 0,389. Par conséquent, je m'attendais à ce que la troisième colonne apparaisse à la place de la deuxième colonne.
Lorsque je lance CCA avec n_components=2
j'obtiens les première et deuxième colonnes, alors que j'aurais dû obtenir la première et la troisième.
Linux-4.13.0-16-generic-x86_64-with-Ubuntu-17.10-artful
Python 3.6.3 (par défaut, le 3 octobre 2017, 21:45:48)
NumPy 1.14.3
SciPy 1.2.0
Scikit-Apprendre 0.19.1
Je ne veux pas être impoli, mais quel est le but de cela. Pourquoi fais-tu ça?
Je fais cela afin d'obtenir les composants partagés entre deux vues de certaines données.
comment définir une valeur seuil à l'aide de cca