[PYTHON] J'ai décidé de faire une analyse de régression simple manuellement-1-

introduction

Afin d'approfondir la compréhension de la théorie de l'analyse de régression, créons manuellement un modèle analytique sans utiliser la bibliothèque sklearn, qui est une arme puissante d'analyse de régression.

Qu'est-ce que l'analyse de régression?

Prédire la valeur de la variable objective (données de sortie) à l'aide de la variable explicative (données d'entrée). Cette fois, nous considérerons le cas d'une variable explicative simple pour le calcul théorique. (Régression simple)

Préparation en Python

▼ Préparer les données

import numpy as np
import pandas as pd
from pandas import DataFrame

data_age = np.array([20,20,28,38,33,34,22,37,
                     26,21,22,39,31,29,38,35,
                     32,27,30])

data_salary = np.array([410,500,480,710,630,600,430,
                        690,500,410,490,800,550,550,
                        700,700,650,540,600])

data = DataFrame({'âge':data_age,
                  'le revenu':data_salary})

Relation de données

Le graphique suivant peut être obtenu à partir de l'ensemble de données ci-dessus.

image.png

À partir de ce graphique, j'essaierai d'exprimer la relation entre l'âge et le revenu avec une équation linéaire. (Amenez-le de force à la formule linéaire, mais c'est en fait une formule plus compliquée.)

Pour le moment, considérons que l'âge prédit est x et le revenu est y, et il est exprimé comme y = ax + b. Notez que les valeurs de a et b ne peuvent pas être simplement déterminées car il y a ici plusieurs données. Pour calculer les valeurs les plus raisonnables pour a et b, nous utilisons l'idée d'erreur quadratique moyenne. Plus précisément, prenez la différence entre le revenu y qui prédit (renvoie) `` `` y = ax + b pour chaque donnée. y - 410= 20a + b - 410 y - 500= 20a + b - 500 y - 480= 28a + b - 480 ... Se transforme avec. Le carré de la différence entre les valeurs des données réelles et les données prédites est ajouté par les données préparées (N), et la valeur moyenne est l'erreur quadratique moyenne Q (a, b).

Q(a,b) = \frac{1}{N}\sum_{k=0}^{n-1}(ax_k + b - y_k)

Ce `` y_k '' est le revenu sous forme de données réelles. Nous allons essayer de linéariser la relation entre l'âge et le revenu en trouvant a et b qui minimisent l'erreur quadratique moyenne Q (a, b).

Graphique de l'erreur quadratique moyenne

Tout d'abord, afin de trouver a et b qui minimisent Q (a, b), entrez diverses valeurs dans a et b et écrivez un aperçu de l'erreur quadratique moyenne.

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d

#Tout un,préparer b
a = np.linspace(-200,200,100)
b = np.linspace(-500,500,100)

#Facile à faire une combinaison de a et b
#Étendez chacun à un tableau à deux dimensions(Nécessaire pour dessiner une surface courbe)
A,B = np.meshgrid(a,b)

#Fonction de calcul de Q
def calc_Q(x,y,a,b):
    result = (a * x + b - y)**2
    return np.mean(result)

#Array pour Q(Initialiser avec 0)
Q = np.zeros([len(a),len(b)])

#a,Calculer Q pour toutes les combinaisons de b
for j in range(100):
    for k in range(100):
        Q[j,k] = calc_Q(data_age,data_salary,a[j],b[k])

#Ecrire le contour d'un graphique 3D
fig = plt.figure(figsize=[10,10])
ax = fig.add_subplot(111,projection="3d")
ax.view_init(45,10)
ax.set_xlabel("a",size=14,color="blue")
ax.set_ylabel("b",size=14,color="blue")
ax.set_zlabel("Q",size=14,color="blue")
ax.plot_surface(A,B,Q,color="red")
plt.show()

image.png

D'après le graphique, on peut voir que la valeur de Q [a, b] est le minimum près de a = 50 à 200, b = 0. De ce graphique, on peut voir qu'il y a probablement une valeur minimale. Par conséquent, la méthode de redescente soudaine (méthode de calcul de la valeur minimale à l'aide de la pente) est utilisée pour trouver les valeurs de a et b lorsque la valeur de Q [a, b] est minimisée.

Continuer.

référence

Introduction au calcul numérique Python https://python.atelierkobato.com/mse/

Recommended Posts

J'ai décidé de faire une analyse de régression simple manuellement-1-
J'ai essayé de créer un pointage de crédit simple avec régression logistique.
J'ai créé une bibliothèque python qui fait rouler le rang
Analyse de régression simple avec Python
[Introduction aux Data Scientists] Statistiques descriptives et analyse de régression simple ♬
J'ai créé un éditeur de texte simple en utilisant PyQt
Première analyse de régression simple en Python
Configuration MacBookPro Après tout, je veux faire une installation propre
Algorithme d'apprentissage automatique (analyse de régression unique)
Je souhaite rechercher le texte intégral avec elasticsearch + python
Je veux faire ○○ avec les Pandas
Implémentation simple de l'analyse de régression avec Keras
J'ai essayé d'effectuer une analyse de cluster de clients à l'aide des données d'achat
Je veux faire un patch monkey seulement en partie en toute sécurité avec Python
J'ai essayé de créer un linebot (implémentation)
Vous voulez résoudre un problème de classification simple?
J'ai essayé l'analyse de régression multiple avec régression polypoly
Je veux imprimer dans la notation d'inclusion
J'ai essayé de créer un linebot (préparation)
Apprentissage automatique avec python (2) Analyse de régression simple
Je veux créer un environnement Python
Un simple script IDAPython pour nommer une fonction
J'ai fait un script pour afficher des pictogrammes
J'ai créé une API Web
J'ai fait un simple blackjack avec Python
J'ai fait une application d'envoi de courrier simple avec tkinter de Python
[Analyse des brevets] J'ai essayé de créer une carte des brevets avec Python sans dépenser d'argent
J'ai essayé d'expliquer l'analyse de régression multiple aussi facilement que possible à l'aide d'exemples concrets.
Je veux faire du machine learning même sans serveur - Time Series Edition -
J'ai essayé de créer une API de reconnaissance d'image simple avec Fast API et Tensorflow
Je veux faire de matplotlib un thème sombre
J'ai essayé de créer une méthode de super résolution / ESPCN
Je veux faire le test de Dunnett en Python
Je souhaite créer facilement un modèle de bruit
Je veux INSÉRER un DataFrame dans MSSQL
[Python] Ce que j'ai fait pour faire un test unitaire
J'ai ajouté une fonction à CPython (opérateur ternaire)
Je veux créer une fenêtre avec Python
Je veux faire un jeu avec Python
Je ne veux pas passer un test de codage
J'ai fait un simple portefeuille de Bitcoin avec pycoin
J'ai créé un outil pour compiler nativement Hy
Exemple pour dessiner une horloge simple en utilisant ebiten
J'ai lu "Comment créer un laboratoire de piratage"
J'ai écrit un script pour télécharger un plug-in WordPress
Je veux faire pyenv + pipenv même sous Windows
J'ai essayé de générer une chaîne de caractères aléatoire
J'ai essayé de créer une méthode de super résolution / SRCNN ③
J'ai essayé de créer une méthode de super résolution / SRCNN ②
J'ai créé un outil pour obtenir de nouveaux articles
Je veux trouver facilement une délicieuse boutique
Je veux écrire dans un fichier avec Python
LeetCode j'ai essayé de résumer les plus simples
J'ai fait un simple lecteur RSS ~ Edition C ~
J'ai créé un jeu ○ ✕ avec TensorFlow
Je souhaite télécharger une application Django sur heroku
[Mac] Je souhaite créer un serveur HTTP simple qui exécute CGI avec Python
Un débutant a essayé de colorier un dessin au trait avec un chainer. J'ai pu le faire.