CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Python/Pylab] Régression linéaire

Kakulukiam
Kakulukiam
Niveau 10
08 novembre 2014 à 16:01:35

Salut !

J'ai un devoir à faire sur de la régression linéaire.
J'ai une liste de points, et je dois trouver l'approximation du polynôme qui correspond à ces points.

Problème : ça part en cacahuète !

Je vous mets un pastebin de mon code, j'espère qu'il sera assez clair :
http://pastebin.com/PjRPJGnP

En gros, tout le calcul se fait à la ligne 89 : on prend chaque coefficient et on le corrige pour coller un peu mieux au polynôme, en utilisant la dérivée partielle.

En output, j'ai ça :

Degree 0 : 105.802815937
Error for training : 21514.6556167
Error for validation : 28732.7032908

Degree 1 : -134986910.298 + -558197532.843*x^1
Error for training : 2.73769200114e+18
Error for validation : 2.93348096277e+18

Degree 2 : 1.33617152136e+37 + 5.72394413375e+37*x^1 + -2.25890120264e+39*x^2
Error for training : 1.4602163449e+81
Error for validation : 1.65646332725e+81

Degree 3 : -1.37426830468e+105 + -6.71275099619e+105*x^1 + 2.63400809692e+107*x^2 + -4.90825978843e+110*x^3
Error for training : 3.00869354773e+225
Error for validation : 3.59263054293e+225

Degree 4 : 8.98157808457e+228 + 4.5612563011e+229*x^1 + -1.77835090733e+231*x^2 + 3.31386657033e+234*x^3 + -2.82003535777e+239*x^4
Error for training : inf
Error for validation : inf

Normalement, l'erreur est censée baisser jusqu'à arriver à un truc très faible au degré 4, puisque la fonction qui me sert de test est : pow(x,4)*0.5 - pow(x,3)*2 + 1

Voilà, si vous voyez où se situe le problème, c'est cool :)
Merci :ange:

Kakulukiam
Kakulukiam
Niveau 10
08 novembre 2014 à 16:03:44

En fait, je me demande si c'est pas la méthode qui est carrément fausse :malade:

godrik
godrik
Niveau 30
09 novembre 2014 à 02:11:58

J'ai pas compris ton algo de regression.

Kakulukiam
Kakulukiam
Niveau 10
11 novembre 2014 à 20:46:40

Hop, je reviens un peu tard :o))

Le principe à la base, c'est que je pensais "redresser" les coefficients p avec les dérivées partielles.
Vu qu'un polynôme c'est p_n * x^n + ... + p_1 * x + p_0

Mais là, ça n'a pas l'air de fonctionner au delà du degré 1 :rire:

godrik
godrik
Niveau 30
12 novembre 2014 à 05:10:38

En effet, ca ne marche pas ca :)

Tu peux vouloir lire wikipedia: http://en.wikipedia.org/wiki/Polynomial_regression

Kakulukiam
Kakulukiam
Niveau 10
12 novembre 2014 à 14:48:52

Ah oui ok. Tu mets ça sous forme matricielle et t'as même pas besoin de te faire chier à calculer la dérivée. Gradient de la fonction erreur = 0, c'est équivalent à vecteur des coefficients = (Xt . X)^-1 . XtY

C'est plutôt énorme.
J'avais même pas pensé à regarder la page wikipédia, vu que j'avais mes cours sur le sujet. Un peu incomplets visiblement :rire:

Merci godrik :ok: Je teste et je reviens là si j'y arrive toujours pas :-p

Kakulukiam
Kakulukiam
Niveau 10
12 novembre 2014 à 15:48:08

C'est good !
J'ai mis presque une heure à débugger ma merde, vu que c'est codé avec les pieds, et mes formats de données sont sûrement très mal choisis, mais ça marche :rire:

Par contre y a un truc qui me surprend dans les résultats :
http://pastebin.com/GqUd8Qm0

Effectivement, l'erreur descend jusqu'à arriver au bon degré, normal.
Par contre, le fait d'avoir un training set et un validation set, de ce qu'on a vu en cours, ça sert à contrer le fait que l'erreur du training set est censée continuer à diminuer quand on augmente les degrés. Du coup, tu valides avec le validation set, dont l'erreur remonte., et tu sais à quel degré t'arrêter.
Mais là, l'erreur sur le training set remonte aussi :ouch:
Du coup, mon validation set ne sert à rien ...

Comment se fesse ? :noel:

godrik
godrik
Niveau 30
13 novembre 2014 à 02:53:43

C'est que l'algo de regression n'est pas correct, sinon il choisirait 0 comme coefficient du degree le plus eleve.

Kakulukiam
Kakulukiam
Niveau 10
14 novembre 2014 à 08:47:42

Oui et non.

Degree 4 : 0.999999999875 + 1.56390456141e-11*x^1 + 1.17772458452e-12*x^2 + -2.0*x^3 + 0.5*x^4
Error for training : 4.02621383042e-21
Error for validation : 3.85129249728e-21

Sachant que la fonction génératrice de mes data de test était 0.5x⁴ - 2x³ + 1, je trouve ça honnête. Juste que Python est trop approximatif dans ses calculs :malade:
Faudrait que je teste en C.

EventListener
EventListener
Niveau 9
14 novembre 2014 à 10:35:56

Mouais je suis pas sur qu'en C tu auras de meilleur résultat. Fait gaffe à tes types et conversions implicites/explicites

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment