Partage de technologie

modèle de régression linéaire

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

régression linéaire

1. Partie théorique

régression linéaire: Dans des données limitées, en ajustant les paramètres, une ligne droite est ajustée, et cette ligne droite (modèle) est utilisée pour effectuer des expériences sur des données inconnues.prédire

DroitForme générale
y = w × x + by = w fois x + bet=m×X+b
L’état de la droite entière est donné par w et pc et bmetbDécider, wwwmdéterminer la ligne droitepente(c'est-à-dire l'angle d'inclinaison), bbbDéterminer la ligne droite sur l'axe Yintercepter(Contrôlez la translation vers le haut et vers le bas d'une ligne droite, également connue sous le nom debiais ).Il suffit donc de calculer wwwmet bbbLa valeur de peut déterminer une ligne droite spécifique. Ensuite, nous étudierons comment trouver. wwwmet bbb

Insérer la description de l'image ici

L'influence de w et b sur la forme de la ligne droite

nom propre

nomDéfinition
Ensemble d'entraînementEnsemble de données utilisé pour entraîner le modèle
ensemble d'essaiEnsemble de données utilisé pour tester la qualité du modèle
Échantillon de formation/Point de formation (Échantillon de formation)Chaque élément de données de l'ensemble d'apprentissage
CaractéristiquesLes données saisies dans le modèle peuvent être des valeurs numériques, des étiquettes de catégorie, des valeurs de pixels d'image, etc.
Étiquette Le modèle doit prédire la valeur cible. Pour les problèmes de classification, l'étiquette est généralement le nom de la classe ; pour les problèmes de régression, l'étiquette est une valeur continue.

1. Régression linéaire univariée

1) Prétraitement des données

Étudions d'abord la régression linéaire univariée. La régression linéaire dite univariée fait référence à une fonction linéaire avec une seule variable indépendante, telle que : y = w ⋅ x + par = wcdot x + bet=mX+bC'estLigne droite univariée, n'a qu'une seule variable d'entrée xxX . Cette droite peut être exprimée sur un plan bidimensionnel (l'axe horizontal est X et l'axe vertical est Y).

Lorsque nous obtenons un ensemble de données non divisées, nous divisons généralement les données en un ensemble d'apprentissage et un ensemble de test. Une méthode de division simple consiste à prendre les premiers 80 % des échantillons comme ensemble d'apprentissage et les 20 % restants comme ensemble. l’ensemble de test.

2) Définir la fonction de coût

Supposons que nous ayons découvert wwwmet bbb, alors nous avons déterminé une ligne droite, et nous pouvons utiliser cette ligne droite pour faire des prédictions afin de faciliter le jugement de la valeur que nous prédisons.etavec une vraie valeuretentreerreurCombien, nous voulons définir *"une règle"*, utilisée pour mesurer la valeur prédite y ′ y'etavec une vraie valeur ouaiset erreur entre.Ici, nous utilisonserreur quadratique moyennedéfinirfonction de coût

J ( w , b ) = 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) 2 J(w,b) = frac{1}{2m}sommelimites_{i = 1}^m(f_{w,b}(x^{(i)}) - y^{(i)})^2J(m,b)=2m1je=1m(Fm,b(X(je))et(je))2
Démantèlement de la formule

fw , b ( x ( i ) ) − y ( i ) f_{w,b}(x^{(i)}) - y^{(i)}Fm,b(X(je))et(je):dans fw , b ( x ( i ) ) f_{w,b}(x^{(i)})Fm,b(X(je))représente la valeur prédite à l'aide du modèle entraîné, tandis que y ( i ) y^{(i)}et(je)représente le vrai résultat de chaque échantillon d'apprentissage, et la différence entre les deux représente l'erreur entre la valeur prédite par le modèle et la vraie valeur.

Pourquoi quadraturer l’erreur ?

Dans tous les ensembles d'échantillons, chaque erreur peut être positive ou négative, et il y aura une certaine probabilité de décalage pendant le processus de sommation. Cela conduira à ce que l'erreur de chaque élément soit très grande (par exemple : -100, + 90,). -25, +30), après addition, une petite valeur (-5) est obtenue, et finalement un mauvais jugement est obtenu.

1 2 m frac{1}{2m}2m1: Représente la moyenne de la somme de toutes les erreurs de données (cette moyenne peut représenter l'erreur de l'ensemble du modèle dans un sens) et obtient l'erreur quadratique moyenne.

Pourquoi diviser par 2

Car lorsque la descente de gradient sera effectuée ultérieurement, la dérivation divisera l'indice 2 en coefficients, car pour une grande quantité de données, une constante a peu d'impact sur le modèle. Afin d'introduire la formule de dérivation, divisez-la par 2 au préalable. , pour un décalage ultérieur.

Connaissant la fonction de coût, il nous suffit de trouver des moyens de réduire le coût. Plus le coût est faible, plus notre valeur prédite est proche de la valeur réelle.

En observant la fonction de coût d'erreur, nous pouvons voir que la fonction de coût d'erreur est une fonction quadratique, c'est-à-dire unefonction convexe, une propriété de la fonction convexe est :Le point extrême est le point maximum , puisque la fonction de coût est une fonction quadratique qui s'ouvre vers le haut (la formule peut être développée et vous pouvez intuitivement sentir que le coefficient du terme carré est supérieur à 0), donc la fonction convexe n'a qu'une valeur minimale, et nous seulement besoin de trouver la valeur minimale est la valeur minimale.Pour la fonction de coût d'erreur J ( w , b ) J(w,b)J(m,b) , son développement de formule peut s'écrire :
J ( w , b ) = 1 2 m ∑ i = 1 m ( ( wx ( i ) + b ) − y ( i ) ) 2 J(w,b) = frac{1}{2m}sommelimites_{i = 1}^m((wx^{(i)}+b) - y^{(i)})^2J(m,b)=2m1je=1m((mX(je)+b)et(je))2
JJJLa taille dépend des paramètres wwwmet bbb, qui peut être résolu par descente de gradient. La forme de la fonction de coût est à peu près la suivante :

Insérer la description de l'image ici

3) Descente de gradient

L'idée de la descente de pente fonctionne principalementTrouver la dérivée partielleméthode, qui est liée à la biologievariables de contrôleLa méthode est très similaire, comme par exemple : dans le contrôle bbbMettre à jour sans changement wwwm(Visible bbbest une constante), formule : w ′ = w − α ∂ J ( w ) ∂ ww' = w - alpha frac{partiel J(w)}{partiel w}m=mαmJ(m) Indique qu'il a été mis à jour dans l'ordre wwwm,dans alpha-alphaα représentetaux d'apprentissage Utilisé pour représenter la taille du pas, qui peut également être comprise comme la vitesse de descente, ∂ J ( w ) ∂ w frac{partiel J(w)}{partiel w}mJ(m) exprime le droit wwwmEn recherchant la dérivée partielle, on obtient W − JW - JLJ(PoidsLet le prixJfonction) Une ligne tangente sur une fonction convexe, utilisée pour représenter la valeur de fonction décroissante la plus rapidedirection, le produit des deux représenteDéplacez-vous d'un pas dans la direction où la valeur de la fonction diminue le plus rapidement .Cette distance doit être ajustée en fonction de l'ensemble de données If. alpha-alphaαS'il est trop grand (la taille du pas est trop grande), cela entraînera wwwmpasse directement du point le plus bas au point le plus haut de l'autre côté, de sorte qu'il ne s'approche jamais du minimum, si alpha-alphaαS'il est trop petit (la taille du pas est trop petite), cela entraînera wwwmCela devient de plus en plus lent à mesure qu’il s’approche du minimum, consommant des coûts de calcul.


taux d'apprentissage ( alpha-alphaα) méthode de réglage

  1. Définissez d'abord un plus petit alpha-alphaα Tel que : 0,001.

  2. Ensuite, il augmente de 10 fois à chaque fois, jusqu'à un maximum de 1.

  3. Après avoir déterminé une certaine valeur, telle que : 0,01.

  4. Effectuez ensuite 3 fois le traitement, tel que : 0,01 × 3 = 0,03, 0,03 × 3 = 0,09 0,01 fois 3 = 0,03, 0,03 fois 3 = 0,090.01×3=0.03,0.03×3=0.09 (Le but est de rendre la convergence plus rapide).


Le processus de résolution des dérivées partielles (trouver la direction de la descente du gradient) :

  • mendier ∂ J ( w ) ∂ w frac{partiel J(w)}{partiel w}mJ(m) :

    ∂ J ( w ) ∂ w frac{partiel J(w)}{partiel w}mJ(m) = ∂ ∂ w 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) 2 frac{partiel}{partiel w}frac{1}{2m}sommelimites_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})^2m2m1je=1m(Fm,b(X(je))et(je))2

    ​ = ∂ ∂ w 1 2 m ∑ i = 1 mwx ( i ) − y ( i ) ) 2 frac{partiel}{partiel w}frac{1}{2m}sommelimites_{i = 1}^{m}wx^{(i)} - y^{(i)})^2m2m1je=1mmX(je)et(je))2

    ​ = 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) ⋅ 2 x ( i ) frac{1}{2m}sommelimites_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})cdot2x^{(i)}2m1je=1m(Fm,b(X(je))et(je))2X(je)

    ​ = 1 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) x ( i ) frac{1}{m}sommelimites_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})x^{(i)}m1je=1m(Fm,b(X(je))et(je))X(je)

  • mendier ∂ J ( w ) ∂ b frac{partiel J(w)}{partiel b}bJ(m) :

    ∂ J ( w ) ∂ b frac{partiel J(w)}{partiel b}bJ(m) = ∂ ∂ b 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) 2 frac{partiel}{partiel b}frac{1}{2m}sommelimites_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})^2b2m1je=1m(Fm,b(X(je))et(je))2

    ​ = ∂ ∂ b 1 2 m ∑ i = 1 mwx ( i ) − y ( i ) ) 2 frac{partiel}{partiel b}frac{1}{2m}sommelimites_{i = 1}^{m}wx^{(i)} - y^{(i)})^2b2m1je=1mmX(je)et(je))2

    = 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) ⋅ 2 frac{1}{2m}sommelimites_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})cdot22m1je=1m(Fm,b(X(je))et(je))2

    ​ = 1 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) frac{1}{m}sommelimites_{i = 1}^{m}(f_{w,b}(x^{(i)}) - y^{(i)})m1je=1m(Fm,b(X(je))et(je))

Trouvez-en des spécifiques grâce à l'itération de boucle wwwmvaleur avec bbbvaleur:

pendant que ( ) : pendant que():mSalutlet():

w ∗ = w − α ∂ ∂ w J ( w , b ) w^* = w - alpha frac{partiel}{partiel w}J(w,b)m=mαmJ(m,b)

b ∗ = b − α ∂ ∂ b J ( w , b ) b^* = b - alpha frac{partiel}{partiel b}J(w,b)b=bαbJ(m,b)

l = l ∗ l = l^*m=m

b = b ∗ b = b^*b=b

Au début, nous valorisons w et b de manière aléatoire, puis itérons. Nous pouvons définir la descente du gradient pour qu'elle se termine lorsque l'erreur est inférieure à un certain seuil, ou personnaliser le nombre d'itérations, nous pouvons obtenir un résultat plus idéal. wwwmvaleur somme bbbvaleur.

2. Régression linéaire multivariée

La régression linéaire multivariée étend les dimensions à trois dimensions et même à des états multidimensionnels, tels que y = l 1 x 1 + l 2 x 2 + par = l_1 x_1 + l_2 x_2 + bet=m1X1+m2X2+b peut être compris commeXAxe etYLes axes sont x 1 et x 2 x_1 et x_2X1etX2 ZL'axe est ouaiset, il s'agit d'un état tridimensionnel. Chaque échantillon d'apprentissage est un point dans l'espace tridimensionnel. Il est nécessaire de trouver une ligne droite appropriée pour ajuster le point échantillon dans l'espace tridimensionnel.

Méthode : Pour chaque variable séparément ( w 1 , w 2 , … , wn , b w_1,w_2,points,w_n,bm1,m2,,mn,b) pour le traitement de descente de gradient

Points principaux: Pour la régression linéaire multivariée, les plages de valeurs des différentes valeurs de caractéristiques sont différentes, telles que : la plage de valeurs de la caractéristique d'âge : 0 0 0 ~ 100 100 100, couvrant la zone : 0 m 2 0 m^20m2 ~ 10000 m2 10000m^210000m2 , il peut aussi y avoirÉchantillon étrange, l'existence d'échantillons de données singuliers entraînera une augmentation du temps de formation et peut également entraîner un échec de convergence. Par conséquent, lorsqu'il existe des données d'échantillon singulières, il est nécessaire de prétraiter les données avant la formation.Normalisé Au contraire, lorsqu'il n'y a pas de données d'échantillon singulières, la normalisation n'a pas besoin d'être effectuée.Pour résoudre ce problème, nous devons effectuerLes fonctionnalités sont mises à l'échelle (normalisées)

1) Prétraitement des données

Traitement de normalisation des données

accomplirNormalisation des donnéesIl existe trois méthodes :

  1. Identique à diviser par la valeur maximale :

    Divisez toutes les valeurs de chaque fonctionnalité par la valeur maximale de cette fonctionnalité.

  2. Normalisation moyenne :

    Soustrayez la valeur de chaque fonctionnalité de la valeur de cette fonctionnalitésignifier, puis divisé par la différence entre les valeurs maximales et minimales de la fonctionnalité.

  3. Normalisation du score Z :

    Calculer chaque fonctionnalitéécart-typeetsignifier

    Soustrayez la valeur de chaque fonctionnalité de toutes les valeurs de cette fonctionnalitévaleur moyenne, puis divisé par la fonctionnalitésignifier

Si la normalisation n'est pas effectuée, la fonction de coût changera en raison de grandes différences dans les valeurs des différentes caractéristiques dans le vecteur de caractéristiques. "plat" .De cette façon, lors de la descente du gradient, la direction du gradient s'écartera de la direction de la valeur minimale, et cela ira beaucoupDEVIATION, ce qui rendra le temps de formation trop long.

Après normalisation, la fonction objectif affichera une comparaison "rond", de sorte que la vitesse d'entraînement soit considérablement accélérée et que de nombreux détours soient évités.

Avantages de la normalisation des données :

  1. Après normalisationAccélère la descente de pente pour trouver la solution optimale, c'est-à-dire accélérer la convergence du réseau de formation.
  2. La normalisation a le potentiel d’améliorer la précision.
2) Fonction de coût (identique à la fonction de coût de la régression linéaire univariée)

J ( w , b ) = 1 2 m ∑ i = 1 m ( fw , b ( x ( i ) ) − y ( i ) ) 2 J(w,b) = frac{1}{2m}sommelimites_{i = 1}^m(f_{w,b}(x^{(i)}) - y^{(i)})^2J(m,b)=2m1je=1m(Fm,b(X(je))et(je))2

3) Descente de gradient

Descente de gradient pour la régression linéaire multiple

w 1 = W 1 − α 1 m ∑ i = 1 m ( fw ⃗ , bx ⃗ ( i ) − y ( i ) ) x 1 ( i ) w_1 = W_1 - alpha frac{1}{m}sommelimites_{i = 1}^{m}(f_{vec{w},b}vec{x}^{(i)} - y^{(i)})x_1^{(i)}m1=L1αm1je=1m(Fm ,bX (je)et(je))X1(je)

⋮ points vidéo

wn = W n − α 1 m ∑ i = 1 m ( fw ⃗ , bx ⃗ ( i ) − y ( i ) ) xn ( i ) w_n = W_n - alpha frac{1}{m}sumlimits_{i = 1}^{m}(f_{vec{w},b}vec{x}^{(i)} - y^{(i)})x_n^{(i)}mn=Lnαm1je=1m(Fm ,bX (je)et(je))Xn(je)

b = b − α 1 m ∑ i = 1 m ( fw ⃗ , bx ⃗ ( i ) − y ( i ) ) b = b - alpha frac{1}{m}sommelimites_{i = 1}^{m}(f_{vec{w},b}vec{x}^{(i)} - y^{(i)})b=bαm1je=1m(Fm ,bX (je)et(je))

expliquer: w 1 ⋯ wn w_1cdots w_nm1mn représente le coefficient de chaque variable et b représente le terme constant de la fonction linéaire.

3.Équation normale

1) Prétraitement des données

Omettre...

2) Fonction de coût

Dérivation mathématique :

J = 1 2 m ∑ i = 1 m ( θ ⃗ ix ⃗ i − yi ) 2 J = frac{1}{2m}sommelimites_{i = 1}^{m}(vec{theta}_i vec{x}_i - y_i)^2J=2m1je=1m(θ jeX jeetje)2

​ = 1 2 m ∣ ∣ θ ⃗ x ⃗ − y ∣ ∣ 2 frac{1}{2m}||vec{thêta} vec{x} - y||^22m1∣∣θ X et2

​ = 1 2 m ( θ ⃗ x ⃗ − y ) T ( θ ⃗ x ⃗ − y ) frac{1}{2m}(vec{thêta} vec{x} - y)^T(vec{thêta} vec{x} - y)2m1(θ X et)T(θ X et)

​ = 1 2 m ( θ ⃗ T x ⃗ T − y T ) ( θ ⃗ x ⃗ − y ) frac{1}{2m}(vec{thêta}^T vec{x}^T - y^T)(vec{thêta} vec{x} - y)2m1(θ TX TetT)(θ X et)

​ = 1 2 m ( θ ⃗ T x ⃗ T x ⃗ θ ⃗ − y T x ⃗ θ ⃗ − θ ⃗ T x ⃗ T y + y T y ) frac{1}{2m}(vec{thêta}^T vec{x}^Tvec{x}vec{thêta} - y^Tvec{x}vec{thêta} -vec{thêta}^Tvec{x}^Ty +y^Ty )2m1(θ TX TX θ etTX θ θ TX Tet+etTet)

3) Descente de gradient

droite θ thêtaθTrouvez la dérivée partielle : Δ = ∂ J ∂ θ = 1 2 m ( ∂ θ ⃗ T x ⃗ T x ⃗ θ ⃗ ∂ θ − ∂ y T x ⃗ θ ⃗ ∂ θ − ∂ θ ⃗ T x ⃗ T y ∂ θ + y T y ∂ θ ) Delta =frac{partiel J}{partiel thêta}= frac{1}{2m}(frac{partiel vec{thêta}^T vec{x}^Tvec{x}vec{thêta}}{partiel thêta} - frac{partiel y^Tvec{x}vec{thêta}}{partiel thêta} - frac{partiel vec{theta}^Tvec{x}^Ty}{thêta partiel} + frac{y^Ty}{thêta partiel})Δ=θJ=2m1(θθ TX TX θ θetTX θ θθ TX Tet+θetTet)

Règle de dérivation matricielle :

  1. ∂ θ TA θ ∂ θ = ( A + AT ) θ frac{thêta partiel^{T}Athêta}{thêta partiel} = (A + A^T)thêtaθθTUNθ=(UN+UNT)θ

  2. ∂ XTA ∂ X = A frac{partiel X^{T}A}{partiel X} = AXXTUN=UN

  3. ∂ AX ∂ X = AT frac{partiel AX}{partiel X} = A^TXUNX=UNT

  4. ∂ A ∂ X = 0 frac{partiel A}{partiel X} = 0XUN=0

Disponible Δ = 1 2 m ( ∂ θ ⃗ T x ⃗ T x ⃗ θ ⃗ ∂ θ − ∂ y T x ⃗ θ ⃗ ∂ θ − ∂ θ ⃗ T x ⃗ T y ∂ θ + y T y ∂ θ ) = 1 2 m ⋅ ( 2 x T x θ − 2 x T y ) = 1 m ⋅ ( x T x θ − x T y ) Delta = frac{1}{2m}(frac{partiel vec{theta}^T vec{x}^Tvec{x}vec{theta}}{partiel thêta} - frac{partiel y^Tvec{x}vec{theta}}{thêta partiel} - frac{vec{theta partiel}^Tvec{x}^Ty}{thêta partiel} + frac{y^Ty}{thêta partiel}) = frac{1}{2m}cdot (2x^Txtheta - 2x^Ty) = frac{1}{m} cdot (x^Txtheta - x^Ty)Δ=2m1(θθ TX TX θ θetTX θ θθ TX Tet+θetTet)=2m1(2XTXθ2XTet)=m1(XTXθXTet)
quand Δ = 0 Delta = 0Δ=0 heure: x T x θ = x T yx^Tx thêta = x^TyXTXθ=XTet , θ = ( x T x ) − 1 x T y thêta = (x^Tx)^{-1}x^Tyθ=(XTX)1XTet peut être calculé θ thêtaθ valeur.

Comparaison de la descente de gradient et des équations normales

  • Descente graduelle: Il est nécessaire de sélectionner le taux d'apprentissage α, qui nécessite plusieurs itérations. Il peut également être mieux appliqué lorsque le nombre de fonctionnalités n est grand et convient à différents types de modèles.

  • équation normale: Il n'est pas nécessaire de sélectionner le taux d'apprentissage α. Il est calculé une fois et doit être calculé. ( x T x ) − 1 (x^Tx)^{-1}(XTX)1 , si le nombre de fonctionnalités nnnS'il est plus grand, le coût de fonctionnement sera plus important, car la complexité du temps de calcul de l'inverse de la matrice est O ( n 3 ) O(n^3)O(n3) , généralement quand nnnIl reste acceptable quand il est inférieur à 10 000.Uniquement disponible pour les modèles linéaires, ne convient pas à d'autres modèles tels que les modèles de régression logistique.

4.Régression polynomiale

Étant donné que dans certains cas, il est difficile pour une ligne droite d'ajuster toutes les données, des courbes sont nécessaires pour ajuster les données, telles que des modèles quadratiques, des modèles cubiques, etc.

En général, la fonction de régression des données est inconnue, même si elle est connue, il est difficile de la transformer en un modèle linéaire avec une simple transformation de fonction, l'approche courante est donc la suivante.régression polynomiale(Régression polynomiale), c'est-à-dire utiliser une fonction polynomiale pour ajuster les données.

Comment choisir le degré d'un polynôme

Il existe de nombreux types de fonctions polynomiales. De manière générale, vous devez d'abord observer la forme des données, puis décider quelle forme de fonction polynomiale utiliser pour résoudre le problème. Par exemple, à partir du nuage de points des données, s'il y a un "plier ", vous pouvez envisager d'utiliser un polynôme quadratique (c'est-à-dire mettre les caractéristiques au carré) ; il y en a deux "plier ", vous pouvez envisager d'utiliser un polynôme cubique (en prenant la puissance cubique de l'entité) ; il y en a trois "plier », puis envisagez d'utiliser un polynôme du quatrième ordre (en prenant la quatrième puissance de la caractéristique), et ainsi de suite.

Bien que la fonction de régression réelle ne soit pas nécessairement un polynôme d'un certain degré, tant que l'ajustement est bon, il est possible d'utiliser un polynôme approprié pour se rapprocher de la fonction de régression réelle.

2. Partie expérimentale

L'annexe à la fin de l'article contient toutes les données originales utilisées dans l'expérience.ex1data1.txtest la relation entre la population et le profit, ex1data2.txtC'est l'impact de la taille de la maison et du nombre de chambres sur le prix de la maison.

1. Régression linéaire univariée

1) Charger les données
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
path = "ex1data1.txt"
data = pd.read_csv(path,header = None,names=['Population','Profit'])
data.head()   # 预览数据
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Insérer la description de l'image ici

2) Afficher les données
data.describe()    # 更加详细的数据描述
  • 1

Insérer la description de l'image ici

# 可视化训练数据
data.plot(kind = 'scatter',x = 'Population',y = 'Profit',figsize = (12,8))
plt.show()
  • 1
  • 2
  • 3

Insérer la description de l'image ici

3) Définir la fonction de coût
def computerCost(X,y,theta):    # 定义代价函数
    inner = np.power(((X*theta.T)-y),2)   # theta.T表示theta的转置
    return np.sum(inner)/(2*len(X))
  • 1
  • 2
  • 3
data.insert(0,"One",1)  # 表示在第0列前面插入一列数,其表头为One,其值为1
  • 1

Insérer dans la première colonne de l'ensemble de données 1 1 1La fonction est deFacilite les calculs matriciels, lorsque les matrices sont multipliées, des poids entrent en jeu wwwmet les préjugés bbb,parce que bbbn'est pas multiplié par la variable, donc un 1 1 1, utilisé avec bbbMultiplier.

4) Divisez les données
cols = data.shape[1]
X = data.iloc[:,0:cols - 1]  #“,”前只有“:”,表示所有的行,“,”后表示抽取数据中第[0列~第cols-1列)(左闭右开),去掉最后一列,最后一列为预测值

y = data.iloc[:,cols - 1:cols]  #只取最后一列的值,表示预测值

  • 1
  • 2
  • 3
  • 4
  • 5
X.head()
  • 1

Insérer la description de l'image ici

y.head()
  • 1

Insérer la description de l'image ici

X = np.matrix(X.values)
y = np.matrix(y.values)  #只将表格中的值装换为矩阵而不是包括序号与标题

#初始化theta
theta = np.matrix(np.array([0,0]))  #先是一个一维的数据,然后在转换为一个二维的矩阵
  • 1
  • 2
  • 3
  • 4
  • 5
5) Paramètres d'initialisation
theta  
# => matrix([[0, 0]])
  • 1
  • 2
X.shape,theta.shape,y.shape  # 此时theta为一行列,需要进行转置
# => ((97, 2), (1, 2), (97, 1))
  • 1
  • 2
computerCost(X,y,theta)
# => 32.072733877455676
  • 1
  • 2
6) Définir la fonction de descente de gradient
def gradientDecent(X,y,theta,alpha,iters):   #iters为迭代次数
    temp = np.matrix(np.zeros(theta.shape))   #构造一个与theta大小一样的零矩阵,用于存储更新后的theta
    parmaters = int (theta.ravel().shape[1])    #.ravel()的功能是将多维数组降至一维,用于求需要求的参数个数
    cost = np.zeros(iters)   #构建iters个0的数组,相当于对每次迭代的cost进行记录
    
    for i in range(iters):
        error = (X * theta.T - y)     #记录误差值,结果为一个数组
        for j in range(parmaters):    #对每一个参数进行更新,j用于表示每一个参数
            term = np.multiply(error,X[:,j])   #.multiply 是对矩阵当中的数对应相乘,这里表示与X矩阵的第j列相乘。
            temp[0,j] = theta[0,j] - ((alpha/len(X))*np.sum(term))  #存储更行后的theta的值,.sum()表示将矩阵中的数进行求和
        
        theta = temp      #更新theta
        cost[i] = computerCost(X,y,theta)  #计算此时的代价,并记录在cost中。
    return theta,cost
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
7) Initialiser les hyperparamètres
alpha  = 0.01		# 学习率
iters = 1000		# 迭代次数
  • 1
  • 2
8) Descente de gradient
g,cost = gradientDecent(X,y,theta,alpha,iters)
g
# => matrix([[-3.24140214,  1.1272942 ]])
  • 1
  • 2
  • 3
9) Calculez le coût
computerCost(X,y,g)
# => 4.515955503078914
  • 1
  • 2
10) Dessiner un modèle linéaire
x = np.linspace(data.Population.min(),data.Population.max(),100) #抽取100个样本  (从data数据集中的最小值到最大值之间抽取100个样本)
f = g[0,0] + (g[0,1] * x)  #f = ax + b

fig,ax = plt.subplots(figsize = (12,8))    #figsize表示图的大小
ax.plot(x,f,'r',label = "Prediction")    #绘制直线,横坐标,纵坐标,直线名称
ax.scatter(data.Population,data.Profit,label = 'Training data')   #绘制点,横坐标,纵坐标,点的名称
ax.legend(loc = 4)  #显示图例位置
ax.set_xlabel('Population')  #设置x轴的名称
ax.set_ylabel('Profit')   #设置y轴的名称
ax.set_title('Predicted Profit vs. Population Size')  #设置标题的名称
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

Insérer la description de l'image ici

11) Tracez la courbe de variation des coûts
fig,ax = plt.subplots(figsize = (12,8))
ax.plot(np.arange(iters),cost,'r')
ax.set_xlabel('Interations')
ax.set_ylabel('Cost')
ax.set_title("Error vs. Training Epoc")
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Insérer la description de l'image ici

2. Régression linéaire multivariée

1) Charger les données
path = "ex1data2.txt"
data2 = pd.read_csv(path,header = None,names=["Size","Bedroom","Price"])
data2.head()
  • 1
  • 2
  • 3

Insérer la description de l'image ici

2) Traitement de normalisation des données
data2 = (data2 - data2.mean())/data2.std()
data2.head()
  • 1
  • 2

Insérer la description de l'image ici

3) Divisez les données
data2.insert(0,'Ones',1)  #在x的第一列插入1

clos = data2.shape[1]   #存储第二维(列)的数据量
X2 = data2.iloc[:,0:clos-1]  #对X2进行赋值
y2 = data2.iloc[:,clos-1:clos]  #对y2进行赋值

X2 = np.matrix(X2.values)  #将X2转为矩阵
y2 = np.matrix(y2.values)  #将y2转为矩阵
theta2 = np.matrix(np.array([0,0,0]))  #初始化theta2为0矩阵
computerCost(X2, y2, theta2)
# => 0.48936170212765967
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
4) Descente de gradient
g2,cost2 = gradientDecent(X2,y2,theta2,alpha,iters)   #记录放回值g2(theta2)和cost2
g2
# => matrix([[-1.10868761e-16,  8.78503652e-01, -4.69166570e-02]])
  • 1
  • 2
  • 3
5) Calculez le coût
computerCost(X2,y2,g2)
# => 0.13070336960771892
  • 1
  • 2
6) Tracez la courbe de variation des coûts
fig,ax = plt.subplots(figsize = (12,8))
ax.plot(np.arange(iters),cost2,'x')
ax.set_xlabel('Iterations')
ax.set_ylabel('Cost')
ax.set_title('Error vs. Training Epoch')
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Veuillez ajouter une description de l'image

3. Équation normale

#正规方程
def normalEqn(X,y):
    theta = np.linalg.inv(X.T@X)@X.T@y   #.linalg中包含线性代数中的函数,求矩阵的逆(inv)、特征值等。@表示矩阵相乘
    return theta
  • 1
  • 2
  • 3
  • 4
final_theta2 = normalEqn(X,y)
final_theta2
# => matrix([[-3.89578088], [ 1.19303364]])
  • 1
  • 2
  • 3

3. Résumé

Étapes générales pour entraîner un modèle

  1. Prétraitement des données.
  2. Choisissez un modèle en fonction de votre problème spécifique.
  3. Définissez la fonction de coût.
  4. Utilisez l'algorithme de descente de gradient pour trouver les paramètres optimaux.
  5. Évaluez le modèle et ajustez les hyperparamètres.
  6. Utilisez des modèles pour faire des prédictions.

4. Annexe

1. ex1data1.txt

6.1101,17.592
5.5277,9.1302
8.5186,13.662
7.0032,11.854
5.8598,6.8233
8.3829,11.886
7.4764,4.3483
8.5781,12
6.4862,6.5987
5.0546,3.8166
5.7107,3.2522
14.164,15.505
5.734,3.1551
8.4084,7.2258
5.6407,0.71618
5.3794,3.5129
6.3654,5.3048
5.1301,0.56077
6.4296,3.6518
7.0708,5.3893
6.1891,3.1386
20.27,21.767
5.4901,4.263
6.3261,5.1875
5.5649,3.0825
18.945,22.638
12.828,13.501
10.957,7.0467
13.176,14.692
22.203,24.147
5.2524,-1.22
6.5894,5.9966
9.2482,12.134
5.8918,1.8495
8.2111,6.5426
7.9334,4.5623
8.0959,4.1164
5.6063,3.3928
12.836,10.117
6.3534,5.4974
5.4069,0.55657
6.8825,3.9115
11.708,5.3854
5.7737,2.4406
7.8247,6.7318
7.0931,1.0463
5.0702,5.1337
5.8014,1.844
11.7,8.0043
5.5416,1.0179
7.5402,6.7504
5.3077,1.8396
7.4239,4.2885
7.6031,4.9981
6.3328,1.4233
6.3589,-1.4211
6.2742,2.4756
5.6397,4.6042
9.3102,3.9624
9.4536,5.4141
8.8254,5.1694
5.1793,-0.74279
21.279,17.929
14.908,12.054
18.959,17.054
7.2182,4.8852
8.2951,5.7442
10.236,7.7754
5.4994,1.0173
20.341,20.992
10.136,6.6799
7.3345,4.0259
6.0062,1.2784
7.2259,3.3411
5.0269,-2.6807
6.5479,0.29678
7.5386,3.8845
5.0365,5.7014
10.274,6.7526
5.1077,2.0576
5.7292,0.47953
5.1884,0.20421
6.3557,0.67861
9.7687,7.5435
6.5159,5.3436
8.5172,4.2415
9.1802,6.7981
6.002,0.92695
5.5204,0.152
5.0594,2.8214
5.7077,1.8451
7.6366,4.2959
5.8707,7.2029
5.3054,1.9869
8.2934,0.14454
13.394,9.0551
5.4369,0.61705
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97

2. ex1data2.txt

2104,3,399900
1600,3,329900
2400,3,369000
1416,2,232000
3000,4,539900
1985,4,299900
1534,3,314900
1427,3,198999
1380,3,212000
1494,3,242500
1940,4,239999
2000,3,347000
1890,3,329999
4478,5,699900
1268,3,259900
2300,4,449900
1320,2,299900
1236,3,199900
2609,4,499998
3031,4,599000
1767,3,252900
1888,2,255000
1604,3,242900
1962,4,259900
3890,3,573900
1100,3,249900
1458,3,464500
2526,3,469000
2200,3,475000
2637,3,299900
1839,2,349900
1000,1,169900
2040,4,314900
3137,3,579900
1811,4,285900
1437,3,249900
1239,3,229900
2132,4,345000
4215,4,549000
2162,4,287000
1664,2,368500
2238,3,329900
2567,4,314000
1200,3,299000
852,2,179900
1852,4,299900
1203,3,239500
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47