scikit-learn을 이용한 견고한 선형 회귀

개요



Python의 기계 학습 라이브러리 scikit-learn를 사용하여 강력한 선형 회귀를 그리는 방법을 소개합니다. 이 논문에서는 파이썬 드로잉 라이브러리 altair에서 차트 객체를 만들고 Streamlit이라는 응용 프로그램 프레임 워크를 사용하여 브라우저에 표시합니다.

견고한 선형 회귀의 특징



최소 제곱법에 의한 선형 회귀에 비해 이상치에 영향을 받기 어렵다.

견고한 선형 회귀 생성



HuberRegressor을 사용하여 강건한 회귀 직선을 만듭니다.
streamlit은 streamlit run ファイル名.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

# デモデータの生成

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
     }) 

# 散布図の生成

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()

# ロバスト回帰のパラメータを設定

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

# ロバスト回帰実行

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

# ロバスト線形回帰の係数を取得

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

# 回帰直線の定義域を指定

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

# 回帰直線の作成

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()

# グラフの表示

st.write(plot+line)

파라미터 정보



Epsilon은 1 이상의 실수로 이상치의 영향도를 나타냅니다. Default는 1.35로 설정됩니다.


Epsilon을 늘릴수록 이상치의 영향을 크게받습니다. (이미지는 epsilon=10)


최소 제곱법으로 선형 회귀 직선 생성



HuberRegressor 를 LinearRegression 으로 치환하면, 최소 제곱법에 의한 선형 회귀 직선을 작성할 수 있다.

좋은 웹페이지 즐겨찾기