Je n'arrive pas à trouver de bibliothèques python qui effectuent des régressions multiples. Les seules choses que je trouve ne font qu'une simple régression. J'ai besoin de régresser ma variable dépendante (y) par rapport à plusieurs variables indépendantes (x1, x2, x3, etc.).
Par exemple, avec ces données:
print 'y x1 x2 x3 x4 x5 x6 x7'
for t in texts:
print "{:>7.1f}{:>10.2f}{:>9.2f}{:>9.2f}{:>10.2f}{:>7.2f}{:>7.2f}{:>9.2f}" /
.format(t.y,t.x1,t.x2,t.x3,t.x4,t.x5,t.x6,t.x7)
(sortie pour ci-dessus :)
y x1 x2 x3 x4 x5 x6 x7
-6.0 -4.95 -5.87 -0.76 14.73 4.02 0.20 0.45
-5.0 -4.55 -4.52 -0.71 13.74 4.47 0.16 0.50
-10.0 -10.96 -11.64 -0.98 15.49 4.18 0.19 0.53
-5.0 -1.08 -3.36 0.75 24.72 4.96 0.16 0.60
-8.0 -6.52 -7.45 -0.86 16.59 4.29 0.10 0.48
-3.0 -0.81 -2.36 -0.50 22.44 4.81 0.15 0.53
-6.0 -7.01 -7.33 -0.33 13.93 4.32 0.21 0.50
-8.0 -4.46 -7.65 -0.94 11.40 4.43 0.16 0.49
-8.0 -11.54 -10.03 -1.03 18.18 4.28 0.21 0.55
Comment pourrais-je les régresser en python, pour obtenir la formule de régression linéaire:
Y = a1x1 + a2x2 + a3x3 + a4x4 + a5x5 + a6x6 + + a7x7 + c
Y
peuvent être corrélées les unes aux autres, mais en supposant que l'indépendance ne modélise pas avec précision l'ensemble de données.Réponses:
sklearn.linear_model.LinearRegression
le fera:Ensuite
clf.coef_
aura les coefficients de régression.sklearn.linear_model
a également des interfaces similaires pour effectuer divers types de régularisations sur la régression.la source
score
méthode le fera;sklearn.metrics
a d'autres critères d'évaluation du modèle. Si vous voulez les choses comme dans la réponse d'Akavall, statsmodels a des diagnostics plus R-like.Voici un petit travail autour que j'ai créé. Je l'ai vérifié avec R et cela fonctionne correctement.
Résultat:
Production:
pandas
fournit un moyen pratique d'exécuter OLS comme indiqué dans cette réponse:Exécuter une régression OLS avec Pandas Data Frame
la source
reg_m
fonction est inutilement compliquée.x = np.array(x).T
,x = sm.add_constant(x)
etresults = sm.OLS(endog=y, exog=x).fit()
c'est assez.x = x[::-1]
dans la définition de la fonction pour être dans le bon ordrecoef +- 2 * std err
(en fait la distribution Student-t paramétrée par degrés de liberté dans les résidus). c'est-à-dire que des valeurs t absolues plus élevées impliquent des IC plus éloignés de zéro, mais elles ne doivent pas être comparées directement. la clarification est un peu tardive, mais j'espère qu'elle sera utile à quelqu'unJuste pour clarifier, l'exemple que vous avez donné est une régression linéaire multiple , pas une régression linéaire multivariée . Différence :
En bref:
(Une autre source .)
la source
Vous pouvez utiliser numpy.linalg.lstsq :
Résultat:
Vous pouvez voir la sortie estimée avec:
Résultat:
la source
Utilisez
scipy.optimize.curve_fit
. Et pas seulement pour l'ajustement linéaire.la source
Une fois que vous avez converti vos données en un dataframe pandas (
df
),Le terme d'interception est inclus par défaut.
Consultez ce cahier pour plus d'exemples.
la source
Je pense que c'est peut-être le moyen le plus simple de terminer ce travail:
la source
La régression linéaire multiple peut être gérée à l'aide de la bibliothèque sklearn comme indiqué ci-dessus. J'utilise l'installation Anaconda de Python 3.6.
Créez votre modèle comme suit:
la source
Vous pouvez utiliser numpy.linalg.lstsq
la source
Vous pouvez utiliser la fonction ci-dessous et lui passer un DataFrame:
la source
Scikit-learn est une bibliothèque d'apprentissage automatique pour Python qui peut faire ce travail pour vous. Importez simplement le module sklearn.linear_model dans votre script.
Trouvez le modèle de code pour la régression linéaire multiple à l'aide de sklearn en Python:
C'est tout. Vous pouvez utiliser ce code comme modèle pour implémenter la régression linéaire multiple dans n'importe quel ensemble de données. Pour une meilleure compréhension avec un exemple, visitez: Régression linéaire avec un exemple
la source
Voici une méthode alternative et basique:
Au lieu de
sm.OLS
vous pouvez également utilisersm.Logit
ousm.Probit
et etc.la source