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.
Elle est moins sensible aux écarts que la régression linéaire par la méthode des moindres carrés.
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)
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.
Plus l'Epsilon est grand, plus l'effet des valeurs aberrantes est important. (L'image est `ʻepsilon = 10 '')
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