liteqz.com
⌚ Reading time: 5 minutes J'essaie de générer une régression linéaire sur un nuage de points que j'ai généré, mais mes données sont au format liste et tous les exemples que je peux trouver d'utilisation polyfit besoin d'utiliser arange. arange n'accepte pas les listes cependant. J'ai cherché haut et bas sur la façon de convertir une liste en un tableau et rien ne semble clair. Est-ce que j'ai raté quelque chose? Ensuite, comment puis-je utiliser au mieux ma liste d'entiers comme entrées du polyfit? voici l'exemple polyfit que je suis: from pylab import * x = arange(data) y = arange(data) m, b = polyfit(x, y, 1) plot(x, y, 'yo', x, m*x+b, '--k') show() DSM arange génère listes (enfin, tableaux numpy); taper help() pour les détails. Vous n'avez pas besoin de l'appeler sur des listes existantes. >>> x = [1, 2, 3, 4] >>> y = [3, 5, 7, 9] >>> >>> m, b = np. polyfit(x, y, 1) >>> m 2. 0000000000000009 >>> b 0. 99999999999999833 Je dois ajouter que j'ai tendance à utiliser poly1d ici plutôt que d'écrire "m*x+b" et les équivalents d'ordre supérieur, donc ma version de votre code ressemblerait à ceci: import numpy as np import as plt x = [1, 2, 3, 4] y = [3, 5, 7, 10] # 10, not 9, so the fit isn't perfect coef = np.
Notre droite de régression linéaire est construite. Maintenant si vous connaissez l'expérience d'un salarié vous pouvez prédire son salaire en calculant: salaire = a*experience+b Tous les codes sont disponibles sur Google Colab à cette adresse.
> Modules non standards > statsmodels > Régression linéaire Pour faire une régression linéaire: à partir d'une array X d'observations (en ligne) x paramètres (en colonne) et un vecteur y: import gression mdl = (y, X, hasconst = False) res = () mais par défaut, pas d'ajout de constante (intercept). Si on veut en rajouter une, il faut faire avant la régression: import; X = (X) fait un modèle linéaire avec ordonnée à l'origine (intercept) à partir d'un dataframe pandas (qui a ici au moins les colonnes x1, x2 et y): import pandas import numpy import df = Frame({'x1': [2, 6, 7, 8, 6, 2], 'x2': [4, 2, 9, 1, 7, 2]}) df['y'] = df['x1'] * 2 + df['x2'] * 5 + 0. 2 * (len(df)) + 3 model = ('y ~ x1 + x2', data = df) result = () ici, une constante (intercept) est aumatiquement rajoutée. si on ne veut pas de constante, il faut utiliser la formule: 'y ~ x1 + x2 - 1' on peut aussi faire (équivalent): from statsmodels import regression; model = ('y ~ x1 + x2', data = df) result est de type gressionResultsWrapper pour avoir les résultats sous forme textuelle, faire mmary().
print ( "--------") print ( "La droite ajustée a pour équation:") print ( str ( p [ 0]) + " * x + " + str ( p [ 1])) print ( "En pratique, il faudrait tronquer aux bons chiffres significatifs") ax. plot ( xi, y_adj, marker = '', label = 'Ajustement', linestyle = '-', color = 'blue') # On voit l'intérêt des options ax. legend () """ Ce sont des fausses données sans incertitude de mesure, on ne va donc pas comparer le modèle ajusté aux résultats expérimentaux. (cf. exercice)""" L'observation des points de mesure montre effectivement une tendance linéaire -------- La droite ajustée a pour équation: 2. 3536193029490615 * x + 3. 6224754244861437 En pratique, il faudrait tronquer aux bons chiffres significatifs ' Ce sont des fausses données sans incertitude de mesure, on ne va donc pas comparer le modèle ajusté aux résultats expérimentaux. exercice)'