Nous trouverons une équation de régression simple utilisant uniquement Numpy et Pandas, qui sont nécessaires pour les calculs numériques de base.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_csv("https://raw.githubusercontent.com/karaage0703/machine-learning-study/master/data/karaage_data.csv")
print(df.head())
Le but de l'analyse de régression simple était de trouver les deux constantes contenues dans l'équation de régression: le coefficient de régression $ a $ et la section $ b $.
A ce moment-là, afin d'obtenir une équation de régression simple plus précise, les constantes $ a $ et $ b $ sont déterminées de sorte que l'erreur globale, c'est-à-dire le résidu $ y- \ hat {y} $ soit aussi petite que possible. Je dois.
Considérez cette ** définition des résidus **.
Nous allons résoudre l'équation de régression simple basée sur la méthode des moindres carrés.
mean_x = df['x'].mean()
mean_y = df['y'].mean()
L'écart est la différence entre la valeur numérique et la valeur moyenne de chaque individu. Calculez $ x_ {i} - \ bar {x} $ pour la variable $ x $ et $ y- \ bar {y} $ pour la variable $ y $. Chaque variable sera calculée pour le nombre de données.
#Écart de x
dev_x = []
for i in df['x']:
dx = i - mean_x
dev_x.append(dx)
#écart de y
dev_y = []
for j in df['y']:
dy = j - mean_y
dev_y.append(dy)
Calculez la variance en utilisant l'écart obtenu en (4). La variance est la moyenne des carrés des écarts, c'est-à-dire les carrés pour chaque écart et la somme des écarts divisée par la valeur numérique (nombre de données-1).
#Somme des carrés de déviation
ssdev_x = 0
for i in dev_x:
d = i ** 2
ssdev_x += d
#Distribué
var_x = ssdev_x / (len(df) - 1)
La covariance $ s_ {xy} $ est l'un des indices montrant la force de la relation entre deux variables et est définie par l'équation suivante.
#Somme des écarts
spdev = 0
for i,j in zip(df['x'], df['y']):
spdev += (i - mean_x) * (j - mean_y)
#Co-distribué
cov = spdev / (len(df) - 1)
Voici la formule pour trouver le coefficient de régression par la méthode des moindres carrés.
a = cov / var_x
En transformant l'équation de régression simple $ y = ax + b $ et en fixant $ b = y -ax $, la valeur moyenne $ \ bar {x}, \ bar {y} $ obtenue en (3) et le coefficient de régression obtenu en (8) Remplacez $ a $.
b = mean_y - (a * mean_x)
** Comme mentionné ci-dessus, l'équation de régression simple a été obtenue par la formule de la méthode des moindres carrés. ** ** ** Il correspond au résultat du calcul obtenu à l'aide de la bibliothèque d'apprentissage automatique scikit-learn plus tôt. Par conséquent, je vais également calculer moi-même la confirmation du coefficient de décision. ** **
Créez des données de valeur prédite à l'aide d'une équation de régression et trouvez sa variance. Quel pourcentage de la variance de la valeur mesurée $ y $, c'est-à-dire à quel point la variable originale $ y $ peut-elle être expliquée?
#Création de données de valeur prédite z
df['z'] = (a * df['x']) + b
print(df)
#Valeur de prédiction variance z
ssdev_z = 0
for i in df['z']:
j = (i - df['z'].mean())**2
ssdev_z += j
var_z = ssdev_z / (len(df) - 1)
print("Distribution de la valeur prévue:", var_z)
#Dispersion de la valeur mesurée y
ssdev_y = 0
for i in dev_y:
j = i ** 2
ssdev_y += j
var_y = ssdev_y / (len(df) - 1)
print("Dispersion de la valeur mesurée y:", var_y)
#Coefficient de décision
R = var_z / var_y
print("Facteur de décision R:", R)
Il a été confirmé que le coefficient de détermination concorde également avec le résultat du calcul par scikit-learn ci-dessus.
plt.plot(x, y, "o") #Nuage de points
plt.plot(x, z, "r") #Retour en ligne droite
plt.show()
Jusqu'à présent, vous avez appris les algorithmes pour une analyse de régression simple. Cependant, dans le monde réel, il existe peu de cas où un certain phénomène peut être expliqué par un seul facteur. Dans le contexte d'un certain phénomène, divers facteurs s'entremêlent en même temps, plus ou moins. Ensuite, vous apprendrez l'analyse de régression multiple qui traite de trois variables ou plus.