[PYTHON] Faire des prédictions en utilisant la régression sur des données réelles ~ part1

La dernière fois, j'ai sorti un diagramme de dispersion, donc cette fois j'utiliserai des données un peu plus spécifiques. Je voudrais faire non seulement un diagramme de dispersion, mais aussi une analyse de régression.

Cette fois, nous allons commencer par une régression lorsqu'il n'y a qu'une seule quantité de caractéristiques.

Données à utiliser

https://sites.google.com/site/datajackets/data-jackets/list2/dj0514 Https://vincentarelbundock.github.io/Rdatasets/csv/datasets/airmiles.csv sur le site Je souhaite utiliser un fichier CSV téléchargeable à partir d'ici.

Il s'agit de données sur le nombre de passagers-miles taxables des compagnies aériennes commerciales aux États-Unis pour chaque année de 1937 à 1960.

Commencez par dessiner un diagramme de dispersion.

Sortons un diagramme de dispersion en utilisant le code précédent.

from matplotlib import pyplot as plt
import numpy as np

def main():
  data = np.genfromtxt("airmiles.csv",delimiter=",", skiprows=1)
  plt.scatter(data[:,1], data[:,2])
  plt.xlabel('year')
  plt.ylabel('')
  plt.show()

if __name__ == '__main__':
    main()

Cliquez ici pour les résultats de sortie

スクリーンショット 2016-06-16 0.47.32.png

Je pense que ça ressemblera à ça. Maintenant que vous avez confirmé le diagramme de dispersion, essayez de dessiner une ligne de régression.

Trouvons une ligne de régression!

Commençons par le code.


from matplotlib import pyplot as plt
import numpy as np

def main():
  data = np.genfromtxt("airmiles.csv",delimiter=",", skiprows=1)

  x = data[:,1]
  y = data[:,2]
  A = np.array([x,np.ones(len(x))])
  A = A.T
  m,c = np.linalg.lstsq(A,y)[0]

  plt.scatter(x, y)
  plt.xlabel('year')
  plt.ylabel('airmiles')
  plt.plot(x,(m*x+c))
  plt.show()

if __name__ == '__main__':
    main()

Cliquez ici pour les résultats de sortie

スクリーンショット 2016-06-16 1.47.10.png

Je trace une ligne droite qui correspond à ces données. C'est une régression par la méthode des moindres carrés. Maintenant, vous remarquerez qu'il y a un nouveau code ici.

  A = np.array([x,np.ones(len(x))])
  A = A.T
  m,c = np.linalg.lstsq(A,y)[0]

J'aimerais que vous cherchiez sur Google cette zone en détail (je ne suis pas sûr, donc j'ajouterai une explication dès que je la comprendrai)

np.linalg.lstsq

Je vais expliquer cette fonction. Ceci est un module lié à l'algèbre linéaire (algèbre linéaire) incluse dans numpy, et quel type de fonction il a Ici http://docs.scipy.org/doc/numpy-1.10.1/reference/routines.linalg.html Il est détaillé dans.

«lstsq» est une abréviation de «moindres carrés» et est appelée «méthode du carré minimum» en japonais.

"Lors de l'approximation d'un ensemble de valeurs numériques obtenues par mesure à l'aide d'une fonction spécifique telle qu'une fonction linéaire ou une courbe logarithmique supposée à partir d'un modèle approprié, la fonction supposée doit être une bonne approximation de la valeur mesurée. Comment déterminer le coefficient qui minimise la somme des carrés des résidus "
(De Wikipedia)

Cette fois par cette méthode du carré minimum Inclinaison: 1350,28173913 Section: -2620496.13536 A été calculé.

La prochaine fois, j'aimerais traiter de l'analyse de plusieurs quantités de caractéristiques (régression multidimensionnelle).

Recommended Posts

Faire des prédictions en utilisant la régression sur des données réelles ~ part1
Essayez d'utiliser Pillow sur iPython (partie 1)
Essayez d'utiliser Pillow sur iPython (partie 2)
Essayez d'utiliser Pillow sur iPython (partie 3)
Explication du concept d'analyse de régression à l'aide de python Partie 2
Visualisez les données réseau à partir d'IPython Notebook à l'aide de Cytoscape Partie 1
Explication du concept d'analyse de régression à l'aide de Python Partie 1
Laissez Python segfo sur une ligne sans utiliser de ctypes
[Pour l'enregistrement] Système d'image Keras Partie 2: Laissez CNN juger en utilisant votre propre ensemble de données