Si j'ai des variables indépendantes [x1, x2, x3] Si j'adapte la régression linéaire dans sklearn, cela me donnera quelque chose comme ceci:
y = a*x1 + b*x2 + c*x3 + intercept
La régression polynomiale avec poly = 2 me donnera quelque chose comme
y = a*x1^2 + b*x1*x2 ......
Je ne veux pas avoir de termes avec le deuxième degré comme x1 ^ 2.
comment puis-je avoir
y = a*x1 + b*x2 + c*x3 + d*x1*x2
si x1 et x2 ont une corrélation élevée supérieure à une valeur seuil j.
Pour générer des entités polynomiales, je suppose que vous utilisez sklearn.preprocessing.PolynomialFeatures
Il y a un argument dans la méthode pour ne considérer que les interactions. Vous pouvez donc écrire quelque chose comme:
poly = PolynomialFeatures(interaction_only=True,include_bias = False)
poly.fit_transform(X)
Maintenant, seuls vos termes d'interaction sont pris en compte et les degrés supérieurs sont omis. Votre nouvel espace de fonctionnalité devient [x1, x2, x3, x1 * x2, x1 * x3, x2 * x3]
Vous pouvez adapter votre modèle de régression en plus de cela
clf = linear_model.LinearRegression()
clf.fit(X, y)
Faire votre équation résultante y = a*x1 + b*x2 + c*x3 + d*x1*x + e*x2*x3 + f*x3*x1
Remarque: Si vous avez un espace d'entité dimensionnel élevé, cela conduirait à malédiction de dimensionnalité qui pourrait causer des problèmes comme le sur-ajustement/variance élevée
Si tu fais y = a*x1 + b*x2 + c*x3 + intercept
dans scikit-learn avec régression linéaire, je suppose que vous faites quelque chose comme ça:
# x = array with shape (n_samples, n_features)
# y = array with shape (n_samples)
from sklearn.linear_model import LinearRegression
model = LinearRegression().fit(x, y)
Les variables indépendantes x1, x2, x sont les colonnes de la matrice d'entités x
, et les coefficients a, b, c sont contenus dans model.coef_
.
Si vous voulez un terme d'interaction, ajoutez-le à la matrice d'entités:
x = np.c_[x, x[:, 0] * x[:, 1]]
Maintenant, les trois premières colonnes contiennent les variables, et la colonne suivante contient l'interaction x1 * x2. Après avoir installé le modèle, vous constaterez que model.coef_
contient quatre coefficients a, b, c, d.
Notez que cela vous donnera toujours un modèle avec interaction (il peut cependant être théoriquement 0), quelle que soit la corrélation entre x1 et x2. Bien sûr, vous pouvez mesurer la corrélation au préalable et l'utiliser pour décider du modèle à adapter.
Utilisez patsy pour construire une matrice de conception comme suit:
X, y = dmatrices('y ~ x1 + x2 + x3 + x1:x2', your_data)
Où your_data
Est par exemple un DataFrame avec la colonne de réponse y
et les colonnes d'entrée x1
, x2
et x3
.
Appelez ensuite simplement la méthode fit
de votre estimateur, par ex. LinearRegression().fit(X,y)
.