[PYTHON] Régression linéaire robuste avec scikit-learn

Aperçu

Présentation de la manière de dessiner une régression linéaire robuste à l'aide de la bibliothèque d'apprentissage automatique de Python sckit-learn. Dans cet article, j'ai créé un objet graphique avec la bibliothèque de dessins de python altair et [Streamlit](https://qiita.com/keisuke- ota / items / a18f158389f1585a9aa0) est utilisé pour afficher sur le navigateur.

Caractéristiques de la régression linéaire robuste

Elle est moins sensible aux écarts que la régression linéaire par la méthode des moindres carrés.

Créer une régression linéaire robuste

Utilisez HuberRegressor pour créer une ligne de régression robuste. Notez que streamlit est exécuté avec `` streamlit run file name.py ''

streamlit_robust_linear.py


import streamlit as st
import numpy as np
import pandas as pd
import altair as alt
from sklearn.linear_model import HuberRegressor
from sklearn.datasets import make_regression

#Génération de données de démonstration

rng = np.random.RandomState(0)
x, y, coef = make_regression( n_samples=200, n_features=1, noise=4.0, coef=True, random_state=0)
x[:4] = rng.uniform(10, 20, (4, 1))
y[:4] = rng.uniform(10, 20, 4)
df = pd.DataFrame({
    'x_axis': x.reshape(-1,),
    'y_axis': y
     }) 

#Définir les paramètres pour une régression robuste

epsilon = st.slider('Select epsilon', 
          min_value=1.00, max_value=10.00, step=0.01, value=1.35)

#Exécution de régression robuste

huber = HuberRegressor(epsilon=epsilon
    ).fit(
    df['x_axis'].values.reshape(-1,1), 
    df['y_axis'].values.reshape(-1,1)
    )

#Génération de diagramme de dispersion

plot = alt.Chart(df).mark_circle(size=40).encode(
    x='x_axis',
    y='y_axis',
    tooltip=['x_axis', 'y_axis']
).properties(
    width=500,
    height=500
).interactive()

#Obtenez le coefficient de régression linéaire robuste

a1 = huber.coef_[0]
b1 = huber.intercept_

#Spécifiez la zone de définition de la ligne de régression

x_min = df['x_axis'].min()
x_max = df['x_axis'].max()

#Créer une ligne de régression

points = pd.DataFrame({
    'x_axis': [x_min, x_max],
    'y_axis': [a1*x_min+b1, a1*x_max+b1],
})

line = alt.Chart(points).mark_line(color='steelblue').encode(
    x='x_axis',
    y='y_axis'
    ).properties(
    width=500,
    height=500
    ).interactive()

#Affichage du graphique

st.write(plot+line)

À propos des paramètres

Epsilon est un nombre réel supérieur ou égal à 1 et représente le degré d'influence des valeurs aberrantes. La valeur par défaut est 1,35. スクリーンショット 2020-10-17 12.14.39.png

Plus l'Epsilon est grand, plus l'effet des valeurs aberrantes est important. (L'image est `ʻepsilon = 10 '') スクリーンショット 2020-10-17 12.16.33.png

Création d'une ligne de régression linéaire par la méthode des moindres carrés

Le remplacement de HuberRegressor par LinearRegression vous permet de créer une ligne de régression linéaire à l'aide de la méthode des moindres carrés.

Recommended Posts

Régression linéaire robuste avec scikit-learn
[Python] Régression linéaire avec scicit-learn
Régression linéaire avec statsmodels
Régression avec un modèle linéaire
Régression linéaire
Régression linéaire avec distribution t de Student
Isomap avec Scikit-learn
Régression linéaire en Python (statmodels, scikit-learn, PyMC3)
Régression linéaire en ligne en Python (estimation robuste)
Clustering avec scikit-learn (1)
Clustering avec scikit-learn (2)
PCA avec Scikit-learn
kmeans ++ avec scikit-learn
Prédire l'été chaud avec un modèle de régression linéaire
Modèle de régression multivariée avec scikit-learn - J'ai essayé de comparer et de vérifier SVR
PCA avec Scikit-learn
Séparation d'arrière-plan / objet en mouvement à l'aide de la décomposition en mode dynamique
Moyenne mobile avec numpy
Régression linéaire robuste avec scikit-learn
SVM multi-classes avec scikit-learn
Clustering avec scikit-learn + DBSCAN
Régression linéaire d'apprentissage automatique
Programmation linéaire avec PuLP
DBSCAN (clustering) avec scikit-learn
Effectuer une analyse de régression avec NumPy
Essayez la régression avec TensorFlow
Installez scikit.learn avec pip
Calculer tf-idf avec scikit-learn
Python Scikit-learn Analyse de régression linéaire Analyse de régression simple non linéaire Apprentissage automatique
Introduction à l'hypothèse Tensorflow-About et au coût de la régression linéaire
Résolution du problème de l'iris avec scikit-learn ver1.0 (régression logistique)
Régression du noyau avec Numpy uniquement
Machine Learning: Supervision - Régression linéaire
Analyse de régression multiple avec Keras
Réseau de neurones avec Python (scikit-learn)
Ridge retour avec Mllib à Pyspark
Traitement parallèle avec Parallel de scikit-learn
Méthode de régression linéaire utilisant Numpy
Régression linéaire en ligne en Python
Classification / régression par empilement (scikit-learn)
Essayez d'implémenter la régression linéaire à l'aide de Pytorch avec Google Colaboratory
Implémentation de la régression logistique avec NumPy
[Apprentissage automatique] Comprendre la régression linéaire simple à partir de scikit-learn et des mathématiques
Introduction à la modélisation statistique bayésienne avec python ~ Essai de régression linéaire avec MCMC ~
[Apprentissage automatique] Comprendre la régression multiple linéaire à partir de scikit-learn et des mathématiques
Recherche en grille d'hyper paramètres avec Scikit-learn
Créer un arbre déterminé avec scikit-learn
Segmentation d'image avec scikit-image et scikit-learn
Les débutants en apprentissage automatique essaient la régression linéaire
Identifiez les valeurs aberrantes avec le classificateur de forêt aléatoire de scikit-learn
[Français] scikit-learn 0.18 Guide de l'utilisateur 1.15. Régression isotonique
Standardiser la distribution non normale avec un score Z robuste
Factorisation matricielle non négative (NMF) avec scikit-learn
Scikit-learn DecisionTreeClassifier avec des valeurs de type datetime
Analyse de régression logistique Self-made avec python
Régression linéaire (pour les débutants) -Édition de code-
Prédiction des ondes de Sin (retour) avec Pytorch
(Apprentissage automatique) J'ai essayé de comprendre attentivement la régression linéaire bayésienne avec l'implémentation