-
sklearn-10 regression 1 linear regression머신러닝/sklearn 2023. 5. 10. 18:06
1. linear regression
집의 평수가 클수록 집이 비싼 것처럼 데이터는 어떠한 변수의 값에 따라서 특정 변수의 값이 영향을 받을 수 있다. 따라서 x의 값이 독립적으로 변하면 y의 값이 x의 값에 따라 종속적으로 변하는 관계를 모델링한 것을 선형회귀라고 한다.
x값이 여러개라면 다중 선형 회귀이다.
선형 회귀는 학습 속도가 빠르고 예측이 빠르지만 데이터가 선형 관계에 제한되며 특이치에 민감하다는 단점이 있다.
2. python
import numpy as np import pandas as pd import sklearn import matplotlib.pyplot as plt from sklearn.datasets import load_diabetes diabetes = load_diabetes()
필요한 모듈과 diabetes 데이터를 불러온다.
from scipy.sparse import dia data = diabetes.data label = diabetes.target columns = diabetes.feature_names data = pd.DataFrame(data, columns = columns) data.head() age sex bmi bp s1 s2 s3 s4 s5 s6 0 0.038076 0.050680 0.061696 0.021872 -0.044223 -0.034821 -0.043401 -0.002592 0.019907 -0.017646 1 -0.001882 -0.044642 -0.051474 -0.026328 -0.008449 -0.019163 0.074412 -0.039493 -0.068332 -0.092204 2 0.085299 0.050680 0.044451 -0.005670 -0.045599 -0.034194 -0.032356 -0.002592 0.002861 -0.025930 3 -0.089063 -0.044642 -0.011595 -0.036656 0.012191 0.024991 -0.036038 0.034309 0.022688 -0.009362 4 0.005383 -0.044642 -0.036385 0.021872 0.003935 0.015596 0.008142 -0.002592 -0.031988 -0.046641 data.shape (442, 10)
데이터 프레임을 만들고 head와 shape로 데이터를 확인한다.
from sklearn.linear_model import LinearRegression sim_lr = LinearRegression()
리니어 리그리션 모듈을 불러온다.
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split( data,label, test_size=0.2,random_state=2023)
데이터를 쪼갠다.
sim_lr.fit(X_train['s6'].values.reshape((-1,1)),y_train) LinearRegression LinearRegression()
s6 데이터의 밸류값을 넘파이 배열로 바꿔서 학습한다.
y_pred = sim_lr.predict(X_test['s6'].values.reshape((-1,1)))
라벨 값을 예측한다.
from sklearn.metrics import r2_score print('단순선형회귀,R2:{:.2f}'.format(r2_score(y_test,y_pred))) print('단순선형회귀 계수(w):{:}, 절편(b):{:}'.format(sim_lr.coef_[0],sim_lr.intercept_)) 단순선형회귀,R2:0.16 단순선형회귀 계수(w):586.7017195949511, 절편(b):152.598049760141
회귀모델 평가를 위한 r2_score을 불러오고 r2값을 확인한다. 그래프를 그리기 위한 기울기와 절편을 확인한다.
line_x = np.linspace(np.min(X_test['s6']),np.max(X_test['s6']), 10) line_y = sim_lr.predict(line_x.reshape((-1,1))) print(line_x) print(line_y) plt.scatter(X_test['s6'], y_test, s=10,c='k') plt.plot(line_x,line_y,c='red') plt.legend(['test data sample','regression line']) [-0.12948301 -0.10002803 -0.07057305 -0.04111806 -0.01166308 0.0177919 0.04724688 0.07670187 0.10615685 0.13561183] [ 76.63014404 93.91143293 111.19272182 128.4740107 145.75529959 163.03658848 180.31787736 197.59916625 214.88045514 232.16174402] <matplotlib.legend.Legend at 0x7f5aca3de0b0>
linspace를 사용하여 line_x와 line_y를 생성하고 scatter로 데이터를 뿌린다.
plot을 사용하여 선을 그려서 그래프를 확인한다.
mul_lr=LinearRegression() mul_lr.fit(X_train,y_train) y_pred = mul_lr.predict(X_test)
다중 선형 회귀 변수를 만들고 데이터를 학습하고 예측한다.
print('다중선형회귀, r2:{:}'.format(r2_score(y_test,y_pred))) 다중선형회귀, r2:0.5011352464069887
r2 점수를 확인한다.
'머신러닝 > sklearn' 카테고리의 다른 글
sklearn-12 regression 3 svr (0) 2023.05.10 sklearn-11 regression 2 decison tree regressor (0) 2023.05.10 sklearn-09 classification 4 ramdom forest (0) 2023.05.10 sklearn-08 classification 3 decision tree (0) 2023.05.10