scikit-learn을 이용한 견고한 선형 회귀
10655 단어 파이썬Streamlit선형 회귀scikit-learn기계 학습
개요
Python의 기계 학습 라이브러리 scikit-learn를 사용하여 강력한 선형 회귀를 그리는 방법을 소개합니다. 이 논문에서는 파이썬 드로잉 라이브러리 altair에서 차트 객체를 만들고 Streamlit이라는 응용 프로그램 프레임 워크를 사용하여 브라우저에 표시합니다.
견고한 선형 회귀의 특징
최소 제곱법에 의한 선형 회귀에 비해 이상치에 영향을 받기 어렵다.
견고한 선형 회귀 생성
HuberRegressor을 사용하여 강건한 회귀 직선을 만듭니다.
streamlit은 streamlit run ファイル名.py
에서 실행됩니다.
streamlit_robust_linear.pyimport 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 으로 치환하면, 최소 제곱법에 의한 선형 회귀 직선을 작성할 수 있다.
Reference
이 문제에 관하여(scikit-learn을 이용한 견고한 선형 회귀), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/keisuke-ota/items/fdd9c28b648af46d1264
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
최소 제곱법에 의한 선형 회귀에 비해 이상치에 영향을 받기 어렵다.
견고한 선형 회귀 생성
HuberRegressor을 사용하여 강건한 회귀 직선을 만듭니다.
streamlit은 streamlit run ファイル名.py
에서 실행됩니다.
streamlit_robust_linear.pyimport 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 으로 치환하면, 최소 제곱법에 의한 선형 회귀 직선을 작성할 수 있다.
Reference
이 문제에 관하여(scikit-learn을 이용한 견고한 선형 회귀), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/keisuke-ota/items/fdd9c28b648af46d1264
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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 으로 치환하면, 최소 제곱법에 의한 선형 회귀 직선을 작성할 수 있다.
Reference
이 문제에 관하여(scikit-learn을 이용한 견고한 선형 회귀), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/keisuke-ota/items/fdd9c28b648af46d1264
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(scikit-learn을 이용한 견고한 선형 회귀), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/keisuke-ota/items/fdd9c28b648af46d1264텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)