Cet article a été écrit par l'auteur https://www.udemy.com/share/1013lqB0AedFdUR34=0 Le but est de revoir ce que j'ai appris à
--Dérivation de la lumière de la méthode des moindres carrés --Convertissez de pandas DataFrame en tableau numpy et essayez de calculer
Supposons que vous receviez un ensemble de données [x, y]. x est la variable explicative et y est la variable objective. Par exemple, à mesure que la taille augmente, le poids augmente, donc dans ce cas x = taille et y = poids.
Et je veux prédire y à partir des données x données. Soit la valeur prédite à ce moment-là $ \ hat {y} $ et supposons l'expression relationnelle suivante.
\hat{y} = ax + b
Ici, le but est de rendre $ \ hat {y} $ aussi proche que possible de la valeur de réponse correcte $ y $. Donc
Error = y - \hat{y} = y - ax + b =0
Il est important de trouver a et b qui sont. Veuillez consulter les liens suivants pour les explications suivantes. http://arduinopid.web.fc2.com/P7.html
Importez d'abord le module
python
import pandas as pd
from pandas import Series, DataFrame
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('whitegrid')
%matplotlib inline
Téléchargez également le jeu de données utilisé cette fois
python
from sklearn.datasets import load_boston
boston = load_boston()
Cette fois, nous utiliserons RM (nombre moyen de pièces par logement) et cible (prix) dans cette base de données. À l'origine, nous utilisons sns.pairplot et sns.jointplot pour rechercher des variables susceptibles d'avoir une relation de régression linéaire (proportionnelle), mais cette fois nous supposerons que ces deux variables ont une relation proportionnelle à l'avance.
python
boston_df = DataFrame(boston.data)
#Donnez un nom de colonne
boston_df.columns = boston.feature_names
#Copiez une nouvelle colonne car elle est difficile à comprendre avec la cible
boston_df['Price'] = boston.target
#Affichage du diagramme de dispersion et de la ligne de régression
sns.lmplot('RM', 'Price', data=boston_df)
Calculons cette ligne de régression. Utilisez np.linalg.lstsq (X, Y). Cependant, puisque ce X nécessite un réseau avec une forme spécifique, il est moulé à cet effet.
python
X = boston_df.RM
Y = boston_df.Price
#[x,1]En forme de
X = np.array([ [value[0], 1] for value in X])
#Convertir en type à virgule flottante
X = X.astype(np.float64)
#a,Chaque valeur prédite est stockée dans b
a, b = np.linalg.lstsq(X, Y)[0]
C'est la fin du calcul. Voyons le résultat
python
plt.plot(boston_df.RM, boston_df.Price, 'o')
x = boston_df.RM
plt.plot(x, a*x+b, 'r')
Cliquez ici pour la documentation officielle https://numpy.org/doc/stable/reference/generated/numpy.linalg.lstsq.html#numpy.linalg.lstsq
numpy.linalg.lstsq(a, b, rcond='warn')
--Paramètres
np.linalg.lstsq (X, Y) [1] peut être utilisé pour extraire le total des résidus.
Recommended Posts