[PYTHON] J'ai essayé l'analyse de régression multiple avec régression polypoly

Régression simple et régression multiple

--Régression simple: méthode qui tente de prédire une certaine valeur à l'aide d'une seule donnée d'entrée.

ex) Prédire le poids en utilisant les données de taille. y=w₀+w₁X

--Régression multiple: méthode qui tente de prédire une certaine valeur à l'aide de deux ou plusieurs données d'entrée.

ex) Prédire le poids en utilisant la taille, la taille, la graisse corporelle ... y=w₀+w₁x₁+w₂x₂+w₃x₃+…

Exemple par régression polypoly

――Maintenant, je souhaite renvoyer les données comme indiqué dans la figure ci-dessous. Cependant, il s'agit clairement d'une forme qui ne peut pas être exprimée par une ligne droite.

--Régression multiple ... Un type d'analyse de régression multiple. En plus des données d'entrée x, ajoutez x ^ 2, x ^ 3… comme nouvelles données d'entrée.

image.png

La méthode des moindres carrés n'est pas universelle

Problèmes de manque d'apprentissage et de surapprentissage

La technique de régularisation

--Régularisation: une méthode pour éviter le surapprentissage en sélectionnant des coefficients appropriés ou en réduisant la taille des coefficients. Trouvez un coefficient vraiment important.

--Sélection variable Méthode de sélection graduelle: ajoutez ou réduisez les coefficients un par un pour maximiser la qualité de l'ajustement.

Pratique (régression polypoly)

import numpy as np
import matplotlib.pyplot as plt

data_size=20
#0~Jusqu'à 1 est représenté par 20 pièces.
X=np.linspace(0,1,data_size)

#Nombre aléatoire uniforme entre faible et élevé
noise=np.random.uniform(low=-1.0,high=1.0,size=data_size)*0.2

y=np.sin(2.0*np.pi*X)+noise

#0~Jusqu'à 1 est représenté par 1000 pièces.
X_line=np.linspace(0,1,1000)
sin_X=np.sin(2.0*np.pi*X_line)

def plot_sin():
    plt.scatter(X,y)
    plt.plot(X_line,sin_X,"red")
plot_sin()
データ
from sklearn.linear_model import LinearRegression

#Génération de modèles de régression linéaire
lin_reg_model=LinearRegression().fit(X.reshape(-1,1),y)

#Section,Inclinaison
lin_reg_model.intercept_,lin_reg_model.coef_

plt.plot(X_line,lin_reg_model.intercept_+lin_reg_model.coef_*X_line)
plot_sin()
データ
from sklearn.preprocessing import PolynomialFeatures

#0e puissance~Génère 4 colonnes jusqu'à la 3e puissance(Génération de trames de données 20 par 4)
poly = PolynomialFeatures(degree=3)
poly.fit(X.reshape(-1,1))
X_poly_3=poly.transform(X.reshape(-1,1))

lin_reg_3_model=LinearRegression().fit(X_poly_3,y)

X_line_poly_3=poly.fit_transform(X_line.reshape(-1,1))
plt.plot(X_line,lin_reg_3_model.predict(X_line_poly_3))
plot_sin()
データ
fig,axes=plt.subplots(1,3,figsize=(16,4))

for degree,ax in zip([5,15,25],axes):
    poly=PolynomialFeatures(degree=degree)
    X_poly=poly.fit_transform(X.reshape(-1,1))
    lin_reg=LinearRegression().fit(X_poly,y)
    X_line_poly=poly.fit_transform(X_line.reshape(-1,1))
    ax.plot(X_line,lin_reg.predict(X_line_poly))
    ax.scatter(X,y)
    ax.plot(X_line,sin_X,"red")

image.png

Pratique (normalisation)

import mglearn
import pandas as pd
from sklearn.model_selection import  train_test_split

X,y=mglearn.datasets.load_extended_boston()
df_X=pd.DataFrame(X)
dy_y=pd.DataFrame(y)

X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=0)

lin_reg_model=LinearRegression().fit(X_train,y_train)

print(round(lin_reg_model.score(X_train,y_train),3))#Taux de précision des données d'entraînement
print(round(lin_reg_model.score(X_test,y_test),3))#Taux de précision des données de test

image.png

Génération de modèles de régression Ridge

from sklearn.linear_model import Ridge,Lasso

ridge_model=Ridge().fit(X_train,y_train)

def print_score(model):
    print(round(model.score(X_train,y_train),3))#Taux de précision des données d'entraînement
    print(round(model.score(X_test,y_test),3))#Taux de précision des données de test
#Plus l'alpha est grand, plus la valeur absolue est petite(default=1)
ridge_10_model=Ridge(alpha=10).fit(X_train,y_train)
print_score(ridge_10_model)

image.png


ridge_01_model=Ridge(alpha=0.1).fit(X_train,y_train)
print_score(ridge_01_model)

image.png

coefficients=pd.DataFrame({"lin_reg":lin_reg.coef_,"ridge_10_model":ridge_10_model.coef_,"ridge_01_model":ridge_01_model.coef_})
coefficients

image.png

Génération de modèle de régression par lasso

lasso_001_model=Lasso(alpha=0.01,max_iter=10000).fit(X_train,y_train)
print_score(lasso_001_model)

image.png


coefficients_lasso=pd.DataFrame({"lin_reg":lin_reg.coef_,
                              
                                 "lasso_001_model":lasso_001_model.coef_})

image.png

Recommended Posts

J'ai essayé l'analyse de régression multiple avec régression polypoly
Analyse de régression multiple avec Keras
J'ai essayé l'analyse factorielle avec des données Titanic!
Effectuer une analyse de régression avec NumPy
J'ai essayé d'analyser les principaux composants avec les données du Titanic!
J'ai essayé fp-growth avec python
J'ai essayé de gratter avec Python
J'ai essayé Learning-to-Rank avec Elasticsearch!
J'ai fait une analyse émotionnelle d'Amazon Comprehend avec l'AWS CLI.
[OpenCV / Python] J'ai essayé l'analyse d'image de cellules avec OpenCV
J'ai essayé le clustering avec PyCaret
J'ai essayé d'expliquer l'analyse de régression multiple aussi facilement que possible à l'aide d'exemples concrets.
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
J'ai essayé de gérer plusieurs utilisateurs (octroi de droits d'accès) avec ansible
Bibliothèque GBDT: j'ai essayé la prédiction de la consommation de carburant (retour) avec CatBoost
J'ai essayé de résumer des phrases avec summpy
J'ai essayé l'apprentissage automatique avec liblinear
J'ai essayé webScraping avec python.
J'ai essayé de déplacer de la nourriture avec SinGAN
Algorithme d'apprentissage automatique (analyse de régression multiple)
J'ai essayé d'implémenter DeepPose avec PyTorch
J'ai essayé la détection de visage avec MTCNN
J'ai joué avec Mecab (analyse morphologique)!
J'ai essayé d'exécuter prolog avec python 3.8.2.
Analyse de régression logistique Self-made avec python
J'ai essayé la communication SMTP avec Python
J'ai essayé la génération de phrases avec GPT-2
J'ai essayé d'apprendre LightGBM avec Yellowbrick
J'ai essayé la reconnaissance faciale avec OpenCV
J'ai essayé d'envoyer un SMS avec Twilio
J'ai essayé d'utiliser Amazon SQS avec django-celery
J'ai essayé d'implémenter Autoencoder avec TensorFlow
J'ai essayé linebot avec flacon (anaconda) + heroku
J'ai essayé de visualiser AutoEncoder avec TensorFlow
J'ai essayé de commencer avec Hy
Apprentissage automatique avec python (2) Analyse de régression simple
J'ai essayé l'analyse de séries chronologiques! (Modèle AR)
J'ai essayé d'utiliser du sélénium avec du chrome sans tête
J'ai essayé d'apprendre avec le Titanic de Kaggle (kaggle②)
J'ai essayé le rendu non réaliste avec Python + opencv
J'ai essayé un langage fonctionnel avec Python
J'ai essayé la récurrence avec Python ② (séquence de nombres Fibonatch)
J'ai essayé d'implémenter DeepPose avec PyTorch PartⅡ
J'ai essayé d'implémenter CVAE avec PyTorch
J'ai essayé de jouer avec l'image avec Pillow
J'ai essayé de résoudre TSP avec QAOA
J'ai essayé la reconnaissance d'image simple avec Jupyter
J'ai essayé le réglage fin de CNN avec Resnet
J'ai essayé le traitement du langage naturel avec des transformateurs.
# J'ai essayé quelque chose comme Vlookup avec Python # 2
(Apprentissage automatique) J'ai essayé de comprendre attentivement la régression linéaire bayésienne avec l'implémentation
J'ai essayé l'analyse de données IRMf avec python (Introduction au décodage des informations cérébrales)
J'ai essayé la reconnaissance manuscrite des caractères des runes avec scikit-learn
J'ai essayé de prédire l'année prochaine avec l'IA
[scikit-learn, matplotlib] Analyse de régression multiple et dessin 3D