Skip to content
Home » 다중 선형 회귀 | 빅분기 필기 다중 선형 회귀분석 Multiple Linear Regression [빅공남! 통계 같이 공부해요] 답을 믿으세요

다중 선형 회귀 | 빅분기 필기 다중 선형 회귀분석 Multiple Linear Regression [빅공남! 통계 같이 공부해요] 답을 믿으세요

당신은 주제를 찾고 있습니까 “다중 선형 회귀 – 빅분기 필기 다중 선형 회귀분석 Multiple Linear Regression [빅공남! 통계 같이 공부해요]“? 다음 카테고리의 웹사이트 kk.taphoamini.com 에서 귀하의 모든 질문에 답변해 드립니다: https://kk.taphoamini.com/wiki. 바로 아래에서 답을 찾을 수 있습니다. 작성자 빅공남(빅데이터 공부하는 남자) 이(가) 작성한 기사에는 조회수 1,435회 및 좋아요 47개 개의 좋아요가 있습니다.

Table of Contents

다중 선형 회귀 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 빅분기 필기 다중 선형 회귀분석 Multiple Linear Regression [빅공남! 통계 같이 공부해요] – 다중 선형 회귀 주제에 대한 세부정보를 참조하세요

빅데이터 분석기사 빅분기 다중선형회귀분석에 관한 내용을 공부하는 영상을 준비했습니다. 수학 통계 개념을 쉽게 이해하는 영상을 만들도록 노력하고 있습니다. 시험에 조금이나마 도움이 되었으면 좋겠습니다.
빅공남 블로그 : https://blog.naver.com/seeyapangpang
빅공남 인플루언서 : https://in.naver.com/seeyapangpang

다중 선형 회귀 주제에 대한 자세한 내용은 여기를 참조하세요.

머신러닝 – 다중선형회귀(Multiple Linear Regression) – DH’s blog

다중선형회귀(Multiple Linear Regression). 이전 시간에 X와 Y가 하나씩 존재하는 선형회귀에 대해서 다루었습니다. 이번 시간에는 X의 변수가 여러 …

+ 여기에 표시

Source: kimdingko-world.tistory.com

Date Published: 5/27/2021

View: 9696

[머신러닝] 다중 선형 회귀(Multiple Linear Regression)

다중 선형 회귀(Multiple Linear Regression, MLR)는 여러 개의 독립 변수와 하나의 종속 변수의 선형 관계를 모델링하는 것이다. 독립 변수들을 xi라고 …

+ 여기에 보기

Source: rebro.kr

Date Published: 10/17/2021

View: 6134

다중선형회귀(Multiple Linear Regression) – 파이썬 코드 예제

파이썬 scikit-learn으로 다중선형회귀(Multiple Linear Regression) 분석하는 방법을 코드 예제와 함께 살펴보자.

+ 여기에 보기

Source: hleecaster.com

Date Published: 8/2/2021

View: 6746

Linear Regression – 다중선형회귀 정리, 기준모델, 다중모델 …

다중선형회귀란? 단순선형회귀와 같이 독립변수 X의 변화에 따른 종속변수 y의 변화를 선으로서 예측하는 기법인데, 독립변수 X가 여러개인 분석기법 …

+ 여기에 자세히 보기

Source: velog.io

Date Published: 3/26/2022

View: 9931

03. 다중 선형 회귀(Multivariable Linear regression)

다중 선형 회귀(Multivariable Linear regression) … 앞서 배운 단순 선형 회귀와 다른 점은 독립 변수 x 의 개수가 이제 1개가 아닌 3개라는 점입니다.

+ 자세한 내용은 여기를 클릭하십시오

Source: wikidocs.net

Date Published: 5/28/2022

View: 1419

다중 선형 회귀 – MATLAB regress – MathWorks 한국

예측 변수 행렬 X와 이에 대한 응답 변수 벡터 y가 주어졌을 때, 다중 선형 회귀에 대한 계수 추정값으로 구성된 벡터 b를 반환합니다.

+ 여기에 보기

Source: kr.mathworks.com

Date Published: 12/6/2022

View: 8628

[ML] 다중 선형 회귀 모델(Multiple Linear Regression Model)

단순 선형 회귀와 다중 선형 회귀 선형 회귀의 가장 단순한 예제는 한 개의 스칼라 독립 변수 x와 한 개의 스칼라 의존 변수 y의 관계일 것이다.

+ 여기에 자세히 보기

Source: seahahn.tistory.com

Date Published: 7/25/2022

View: 3272

주제와 관련된 이미지 다중 선형 회귀

주제와 관련된 더 많은 사진을 참조하십시오 빅분기 필기 다중 선형 회귀분석 Multiple Linear Regression [빅공남! 통계 같이 공부해요]. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

빅분기 필기 다중 선형 회귀분석 Multiple Linear Regression [빅공남! 통계 같이 공부해요]
빅분기 필기 다중 선형 회귀분석 Multiple Linear Regression [빅공남! 통계 같이 공부해요]

주제에 대한 기사 평가 다중 선형 회귀

  • Author: 빅공남(빅데이터 공부하는 남자)
  • Views: 조회수 1,435회
  • Likes: 좋아요 47개
  • Date Published: 2021. 12. 6.
  • Video Url link: https://www.youtube.com/watch?v=K5mAuw5nda0

다중선형회귀(Multiple Linear Regression)

728×90

다중선형회귀(Multiple Linear Regression)

이전 시간에 X와 Y가 하나씩 존재하는 선형회귀에 대해서 다루었습니다. 이번 시간에는 X의 변수가 여러개인 다중선형회귀에 대해서 알아보겠습니다.

다중선형회귀는 여러개의 특성을 이용해 종속변수를 예측하기 때문에 일반 선형회귀보다 더 좋은 성능을 기대할 수 있습니다.

다중선형회귀를 실습하기 위해 맨해튼 집값 데이터를 이용하겠습니다.

데이터 불러오기(맨해튼 집값 데이터)

import pandas as pd # 깃허브 데이터로드 # 깃허브의 데이터를 사용하기 위해선 raw데이터를 로드해야합니다. url = “https://raw.githubusercontent.com/Codecademy/datasets/master/streeteasy/manhattan.csv” manhattan = pd.read_csv(url) manhattan.head()

맨해튼 집값 데이터의 경우 3539개의 행과 18개의 열로 이루어져 있습니다.

데이터 살펴보기(EDA)

머신러닝 모델을 생성하기 전에 먼저 데이터가 어떻게 생겼고 어떤 상관관계를 갖는지 파악하는 것은 굉장히 좋은 습관입니다.

먼저 상관관계 매트릭스를 생성해 레이블에 해당하는 rent특성과 다른 특성들이 어떤 관계를 갖는지 알아보겠습니다.

corr_matrix = manhattan.corr() # 타겟값을 기준으로 관계가 높은 다른 특성들을 정렬해서 역순으로 나열해봅시다. corr_matrix[“rent”].sort_values(ascending=False)

가장 높은 양의 상관관계를 갖는 특성은 집의 size입니다. 그 다음으로는 bathrooms, bedrooms 등의 특성이 나열되었습니다.

더 정확한 수치를 원한다면 현재처럼 각 특성간 수치의 차이가 많이 나는 경우 (rent 변수는 천에서 만대에 이르는 수치, bedrooms는 1의 단위의 수치)에는 특성 스케일링을 통해 각 변수들의 수치적 차이로 인한 왜곡을 방지할 수 있습니다.

하지만 이번시간에는 size가 크면 화장실, 침대 등의 갯수도 많을 것이므로 특성 스케일링에 대해서는 다음에 집중적으로 다루도록 하겠습니다.

위의 매트릭스를 더 직관적으로 보기위해 시각화를 진행해보았습니다.

corr_df = pd.DataFrame(corr_matrix[“rent”].sort_values(ascending=False)) import matplotlib.pyplot as plt plt.figure(figsize=(12,8)) plt.bar(corr_df.index, corr_df[“rent”]) plt.xticks(rotation=45)

위 그래프에서 양의 상관관계가 높게 측정된 변수들을 대상으로 산점도 행렬을 그려 한번 더 상관관계를 확인해보겠습니다.

from pandas.plotting import scatter_matrix attributes = [‘bedrooms’,’bathrooms’,’size_sqft’,’no_fee’,’floor’,’building_age_yrs’,’rent’] scatter_matrix(manhattan[attributes], figsize=(12, 8))

산점도 행렬의 장점은 각 변수들의 산점도를 그려 선형적인 관계를 전체적으로 한눈에 파악할 수 있다는 장점이 있습니다. 다만 데이터의 크기가 클수록 각 데이터마다 점을 찍기에 다소 시간이 걸릴 수 있습니다.

이렇게 머신러닝 모델을 생성하기 전에 데이터를 먼저 확인해 머신러닝에 도움이 될 수 있는 특성을 인풋으로 삼는것이 좋습니다. 이를 Garbage-in Garbage-out 이라고도 합니다.

데이터 준비하기

다중선형회귀 역시 수치형 변수를 다루기 때문에 인풋 변수 역시 수치형 변수를 받습니다.

기본적으로 다중선형회귀는 범주형 변수를 다를 수 없지만 원핫 인코딩 방식을 통해 범주형 범수를 받는 것 또한 가능합니다. 이에 대해서는 나중에 자세히 다루도록하고 이번 시간에는 범주형 변수를 제외한 수치형 변수만을 독립변수로 받겠습니다.

먼저 X와 Y변수를 받아 사이킷런의 train_test_split함수를 통해 7:3의 비율로 데이터를 분할합니다.

from sklearn.model_selection import train_test_split x = manhattan[[‘bedrooms’,’bathrooms’,’size_sqft’,’min_to_subway’,’floor’,’building_age_yrs’,’no_fee’,’has_roofdeck’,’has_washer_dryer’,’has_doorman’,’has_elevator’,’has_dishwasher’,’has_patio’,’has_gym’]] y = manhattan[[‘rent’]] x_train, x_test, y_train, y_test = train_test_split(x,y, train_size = 0.7, test_size = 0.3)

다중선형회귀 모델링

다중선형회귀 역시 지도학습으로 먼저 사이킷런의 선형회귀모델을 생성하고 fit메소드를 통해 인풋변수로 입력될 x_train과 레이블로 사용할 y_train변수를 학습시킵니다.

from sklearn.linear_model import LinearRegression mlr = LinearRegression() mlr.fit(x_train, y_train)

모델 테스트하기

이제 test셋의 일부 데이터를 가지고 모델의 예측결과가 얼마나 좋게 나타나는지 확인해보겠습니다.

plt.plot(mlr.predict(x_test[:50]), label=”predict”) plt.plot(y_test[:50].values.reshape(-1, 1), label=”real price”) plt.legend()

테스트셋의 x 데이터 50개를 이용해 rent 비용을 예측하고 실제 테스트셋의 y데이터를 확인한 결과 대체적으로 비슷한 결과를 보였습니다.

새로운 집의 스펙을 리스트로 입력하여 다음처럼 예측하는 방법도 가능합니다.

my_apt = [[1,1,600,16,1,8,1,0,1,0,0,1,1,0]] mlr.predict(my_apt)

array([[2954.89054955]])

이제 전체 test 데이터를 이용해 값을 예측하고 실제 값과 비교하여 산점도를 그려 선형적인 모습인지 확인해보겠습니다.

y_predict = mlr.predict(x_test) plt.scatter(y_test, y_predict, alpha = 0.4) plt.show()

한눈에 봐도 그래프가 이상적인 선형적 모습을 보입니다. 이제 score 메소드를 통해 다중선형회귀 모델의 성능을 측정합니다.

print(mlr.score(x_train, y_train))

0.7935756199928734

결정계수 R²의 최댓값은 1이며 이 수치가 클수록 실제값과 예측값이 유사함을 의미합니다.

우리가 모델링한 다중선형회귀모델은 약 0.79의 결정계수를 가지며 이는 X변수들이 y변수에 미치는 영향이 79%로 X변수들이 rent값 변동의 79%를 설명할 수 있다는 뜻입니다.

728×90

[머신러닝] 다중 선형 회귀(Multiple Linear Regression)

728×90

반응형

[목차]

1. 다중 선형 회귀

2. 다중 선형 회귀 실습

1. 다중 선형 회귀

다중 선형 회귀(Multiple Linear Regression, MLR)는 여러 개의 독립 변수와 하나의 종속 변수의 선형 관계를 모델링하는 것이다.

독립 변수들을 $x_i$라고 하고, 종속 변수를 $y$라고 하면 다중 선형 회귀 식은 다음과 같다.

$y = W_1x_1 + W_2x_2 + … + W_nx_n + b$

다중 선형 회귀를 사용할 땐 다음과 같은 가정들이 필요하다.

1. 각각의 독립 변수는 종속 변수와의 선형 관계가 존재한다. ($y = W_ix_i$ 그래프를 그렸을 때 직선의 형태)

2. 독립 변수 사이에서는 높은 수준의 상관관계가 존재하지 않아야 한다. 만약 그렇지 않다면 관계를 분석하기가 어렵다.

3. 추정된 종속 변수의 값과 실제 관찰된 종속 변수의 값과의 차이, 즉 잔차(residual)가 정규 분포를 이루어야 한다.

2. 다중 선형 회귀 실습

단순 선형 회귀에 비해 특성이 여러 개로 늘어났기 때문에 데이터를 직접 입력하기엔 불편함이 많다. 따라서 유명한 데이터 분석 라이브러리인 판다스(Pandas)를 사용해보자.

판다스를 이용하면 데이터를 인터넷에서 바로 다운로드하여 사용할 수 있다. 그리고 판다스에는 데이터프레임(Dataframe)이라는 데이터 구조를 갖는데, 넘파이 배열과 비슷하게 다차원 배열을 다룰 수 있고 더 많은 기능을 제공한다. 데이터프레임은 넘파이 배열로 바꿀 수도 있다.

그러므로 판다스를 이용해 데이터를 내려받고, 넘파이 배열로 변환하여 모델을 훈련해보자.

import pandas as pd import numpy as np df = pd.read_csv(‘https://bit.ly/perch_csv’) perch_full = df.to_numpy() print(perch_full) #[[ 8.4 2.11 1.41] # [13.7 3.53 2. ] # [15. 3.82 2.43] # [16.2 4.59 2.63] # …]

순서대로 길이(Length), 높이(Height), 너비(Width)를 의미하는 값이다.

타깃 데이터는 이전과 동일하게 사용하고, 훈련 셋과 테스트 셋을 나눈다.

perch_weight = np.array([5.9, 32.0, 40.0, 51.5, 70.0, 100.0, 78.0, 80.0, 85.0, 85.0, 110.0, 115.0, 125.0, 130.0, 120.0, 120.0, 130.0, 135.0, 110.0, 130.0, 150.0, 145.0, 150.0, 170.0, 225.0, 145.0, 188.0, 180.0, 197.0, 218.0, 300.0, 260.0, 265.0, 250.0, 250.0, 300.0, 320.0, 514.0, 556.0, 840.0, 685.0, 700.0, 700.0, 690.0, 900.0, 650.0, 820.0, 850.0, 900.0, 1015.0, 820.0, 1100.0, 1000.0, 1100.0, 1000.0, 1000.0]) train_input, test_input, train_target, test_target = train_test_split(perch_full, perch_weight, random_state = 42)

사이킷런에서는 변환기(Transformer)라고 불리는 클래스들을 제공한다. 변환기는 데이터셋을 만들거나 변환하거나 전처리하는 역할을 수행한다. 변환기 클래스는 모두 fit(), transform() 메서드를 제공한다.

fit() 메서드는 새롭게 만들 특성 조합을 찾고 transform() 메서드는 실제로 데이터를 변환한다.

입력 데이터를 변환하는 데는 타깃 데이터가 필요하지 않으므로 fit() 메서드에 입력 데이터만 전달한다. 두 메서드를 하나로 붙인 fit_transform() 메서드도 존재한다.

우리는 PolynomialFeatures 클래스를 사용할 것이다. PolynomialFeatures 클래스는 입력 데이터 $x$를 $[1, x, x^2, x^3, …] $과 같이 여러 다항식으로 변환한다.

만약 입력 데이터가 $x, y$이면, $[1, x, y, x^2, y^2, xy, x^3, y^3, x^2y, …]$ 과 같이 변환된다. 따라서 PolynomialFeatures 클래스는 차수를 결정하는 degree와 상수항 생성 여부를 결정하는 include_bias를 매개변수로 갖는다.

from sklearn.preprocessing import PolynomialFeatures poly = PolynomialFeatures(include_bias=False) poly.fit([[2, 3]]) print(poly.transform([[2, 3]])) # [[2. 3. 4. 6. 9.]]

2개의 특성을 가진 샘플 [2, 3]이 5개의 특성을 가진 샘플 [2. 3. 4. 6. 9.]로 바뀐 것을 볼 수 있다.

원래는 [1. 2. 3. 4. 6. 9.]로 생성되지만, 사이킷런의 선형 모델은 자동으로 절편을 추가하므로 상수항이 필요 없기 때문에 include_bias=False로 절편을 위한 항인 1을 제거했다. degree는 default값이 2다.

(*사이킷런의 선형 모델은 자동으로 특성에 추가된 절편 항을 무시하기 때문에 꼭 include_bias=False로 지정하지 않아도 된다)

poly = PolynomialFeatures(include_bias=False) poly.fit(train_input) train_poly = poly.transform(train_input) test_poly = poly.transform(test_input)

print(train_poly.shape)

train_poly의 크기를 출력해보면 (42, 9)로 나온다. 이는 42개의 행과 9개의 열이 존재한다는 의미인데, 3개의 샘플(길이, 높이, 너비)이 9개로 변환된 것을 알 수 있다. 이처럼 기존의 특성을 사용해 새로운 특성을 뽑아내는 작업을 특성 공학(Feature engineering)이라고 한다.

get_feature_names_out() 메서드를 호출하면 9개의 특성이 각각 어떤 입력의 조합으로 만들어졌는지 알려준다.

print(poly.get_feature_names_out()) # [‘x0’ ‘x1’ ‘x2’ ‘x0^2’ ‘x0 x1’ ‘x0 x2’ ‘x1^2’ ‘x1 x2’ ‘x2^2’]

이제 모델을 훈련해보자.

lr = LinearRegression() lr.fit(train_poly, train_target) print(lr.score(train_poly, train_target)) # 0.9903183436982124 print(lr.score(test_poly, test_target)) # 0.97145599115942

다중 회귀 모델을 훈련한 결과 훈련 셋의 점수가 매우 높게 나온 것을 볼 수 있다. 테스트 셋의 점수는 높아지진 않았지만 과소 적합 문제는 해결되었다. 이처럼 특성이 늘어나면 선형 회귀의 능력이 강해진다는 것을 알 수 있다.

만약 특성을 더 많이 추가하면 어떨까? degree = 3, 4, … 로 차수를 늘려서 세제곱, 네제곱 항을 넣으면 점수가 더 높아질까?

poly = PolynomialFeatures(degree=5, include_bias=False) poly.fit(train_input) train_poly = poly.transform(train_input) test_poly = poly.transform(test_input) print(train_poly.shape) # (42, 55)

degree를 5로 높여보자. train_poly의 shape를 출력해보니 특성이 무려 55개로 늘어났다. 이를 이용하여 다시 선형 회귀 모델을 훈련한다.

lr = LinearRegression() lr.fit(train_poly, train_target) print(lr.score(train_poly, train_target)) # 0.9999999999997522 print(lr.score(test_poly, test_target)) # -144.40564433961768

훈련 셋에 대한 점수는 거의 완벽한 점수로 나온 반면, 테스트 셋의 점수는 아주 큰 음수인 결과가 나왔다.

즉, 특성의 개수를 크게 늘리면 선형 모델은 아주 강력해져서 훈련 셋에 대해 거의 완벽한 결과를 얻을 수 있지만, 너무 훈련 셋에 과대 적합되어 테스트 셋에서는 매우 낮은 점수를 얻게 된다.

다음엔 이러한 과대 적합을 줄이는 방법을 알아보자.

참고)

– https://gocardless.com/en-us/guides/posts/multiple-linear-regression-mlr-definition/

– 혼자 공부하는 머신러닝+딥러닝(박해선, 한빛미디어)

PC로 보시는 것을 권장합니다.

피드백은 언제나 환영입니다. 댓글로 달아주세요 ^-^

728×90

반응형

Linear Regression – 다중선형회귀 정리, 기준모델, 다중모델 작성 및 시각화해보기

다중선형회귀란?

단순선형회귀와 같이 독립변수 X의 변화에 따른 종속변수 y의 변화를 선으로서 예측하는 기법인데, 독립변수 X가 여러개인 분석기법이다.

독립변수 X가 여러개 = 특성(feature)이 여러개라는 뜻이다.

하여 독립변수 2개를 이용해 선형회귀 모델을 만들면서 그 과정을 정리해보고, 중요한 용어나 내용들을 함께 정리해보겠다.

기준모델 작성

머신러닝 모델을 작성하기 전에 갖고있는 데이터로 작성되는 최소성능의 모델로, 기준모델의 오차를 파악함으로써 앞으로 만들 모델의 성능평가를 비교하기 위해 사용이 된다.

다룰 문제에 따라 다른데, 아래와 같이 분류할 수 있다.

회귀문제(Regression): 타겟의 평균값 (데이터와 상황에 따라 중앙값, 또는 다른 값을 사용할 수도 있다.) 분류문제(Classification): 타겟의 최빈값 시계열데이터(TimeStamp): 이전 타임스탬프 값 -> 1초전의 느낌. 다루기 어려운 데이터이긴 하지만, GPS의 경우 시간에 다라 위치정보가 다르고, 주식의 경우도 시간의 흐름에 따라 정보가 달라지기에 ‘과거의 정보로 학습해서 미래를 예측’해야하는 경우가 많다.

이 포스팅에선 numerical target을 다루는 문제를 해결하기 위해 회귀문제를 풀어보도록 할 것이다.

data set은 seaborn에서 제공하는 diamond data set을 이용한다.

price를 target으로 회귀문제로 간주하여 기준모델을 평균값으로 하여 진행해보겠다.

import seaborn as sns import numpy as np df = sns . load_dataset ( ‘diamonds’ ) sns . scatterplot ( df [ ‘carat’ ] , df [ ‘price’ ] ) ; predicted = df [ ‘price’ ] . mean ( ) sns . lineplot ( x = df [ ‘carat’ ] , y = predicted , color = ‘red’ ) ;

시각화를 위해 ‘단순선형회귀’로 표현해봤다. 빨간색 선이 처음 예측했던 기준모델이자 예측선이다.

price data들의 평균으로 이루어져 있고, 한 눈에 봐도 데이터의 분포와 거리가 있어 보인다. MAE(절대평균오차)를 통해 정확도를 체크해볼 수 있다. sklearn 라이브러리를 이용해 구해보겠다.

from sklearn . metrics import mean_absolute_error mae = mean_absolute_error ( predicted , df [ ‘price’ ] )

3031.603220851001

3031 오차는 우리가 예측한 붉은 선 과 데이터사이의 거리의 절대값의 평균이다. 최고치가 17500인 데이터에서 오차가 3000대라는건 굉장히 큰 오차로 보여질 수 있다. 이를 줄이는 과정이 모델링을 하는것이다.

다중선형회귀모델 작성

다중선형모델은 특성이 2개인것까진 3차원 plot으로 생성이 가능하지만, 3개 이상의 특성들로는 plotting 하지 못하므로 2개의 특성으로 모델링 한다.

from sklearn . linear_model import LinearRegression from sklearn . model_selection import train_test_split target = [ ‘price’ ] feature = [ ‘carat’ , ‘depth’ ] model = LinearRegression ( ) model . fit ( df [ feature ] , df [ target ] ) y_pred = model . predict ( df [ feature ] )

빈 LinearRegression model에 feature와 target data를 넣고 fit 한다. model.fit(X, y) 까지 진행하면 모델이 만들어졌다고 보면 된다. 이후 predict를 통해 다른 data set의 X(feature)를 학습해 그에 맞는 y를 예측한다.

mae_pred = mean_absolute_error ( y_pred , df [ ‘price’ ] ) print ( ‘기준모델의 오차: {0}

다중회귀모델의 오차: {1}’ . format ( mae , mae_pred ) )

기준모델의 오차: 3031.603220851001 다중회귀모델의 오차: 1005.1337893657361

작성한 model을 기준모델과 비교해본다. 평균으로 만든 기준모델에 대한 실제 타겟 데이터들의 오차보다 X_train데이터들로 회귀선을 fit한 모델의 오차가 훨씬 줄어든 것을 볼 수 있다. 평균선에 비해 특성과 타겟 간 오차 제곱합이 가장 적은 선을 그려낸 것을 알 수 있다.

그림은 단순선형회귀모델에 대한 기준모델과의 비교이지만, 그림과같이 오차가 확 줄어들게하는 선을 그려냈다고 생각하면 된다.

진행해본 데이터는 특성이 2개이므로 데이터의 분포 및 상관관계와 우리가 예측한 모델의 예측 선(면)을 볼 수 있다. 종속변수와 독립변수가 TTL 3개이기 때문에 이들이 면을 이루게 된다.

import matplotlib . pyplot as plt from matplotlib import style import plotly . express as px import plotly . graph_objs as go import itertools def surface_3d ( df , f1 , f2 , target , length = 20 , ** kwargs ) : plot = px . scatter_3d ( df , x = f1 , y = f2 , z = target , opacity = 0.5 , ** kwargs ) model = LinearRegression ( ) model . fit ( df [ [ f1 , f2 ] ] , df [ target ] ) x_axis = np . linspace ( df [ f1 ] . min ( ) , df [ f1 ] . max ( ) , length ) y_axis = np . linspace ( df [ f2 ] . min ( ) , df [ f2 ] . max ( ) , length ) coords = list ( itertools . product ( x_axis , y_axis ) ) pred = model . predict ( coords ) z_axis = pred . reshape ( length , length ) . T plot . add_trace ( go . Surface ( x = x_axis , y = y_axis , z = z_axis , colorscale = ‘Viridis’ ) ) return plot surface_3d ( df , f1 = ‘carat’ , f2 = ‘depth’ , target = ‘price’ , title = ‘diamond price’ )

시각적으로 3d scatter를 사용헤봤다. 수 많은 데이터들의 산점도들과 예측 면 3차원으로 구성된 것을 볼 수 있다.

모델의 평가

Train set / Validation set / Test set 이해하기

작성한 모델이 쓸모가 있는지는 어떻게 알 수 있을까?

검증 데이터(validation set)와 테스트 데이터(Test set)으로 할 수 있다.

훈련용 데이터(Train set)에 익숙하게 학습을 하고, 새로운 데이터에 대한 성능평가를 위해 검증 데이터를 사용한다.

성능을 개선해야 한다면, 다시 훈련용 데이터를 이용해 튜닝을 하고, 검증 데이터로 확인을 해본다.

검증 데이터에 대해서도 성능 평가가 적합하다고 생각되면, 마지막 점검을 위해 테스트 데이터를 사용한다.

훈련 데이터 (Train data): 모델을 학습시키기 위한 기본 데이터 자원

검증 데이터 (Validation data): 훈련 데이터에만 성능이 좋지 않도록 확인하고, 모델을 발전(튜닝)시키도록 확인하기 위한 데이터 자원 (ex: 모의고사)

테스트 데이터 (Test data): 최종적으로 학습을 마무리하고 성능을 평가하기 위해 1번만 사용해야하는 데이터, 테스트데이터로 학습할 경우 유출문제가 발생할 수 있다.

X_train = df [ feature ] y_train = df [ target ] X_test = df [ feature ] Y_train = df [ target ] X_train , X_test , y_train , y_test = train_test_split ( df [ feature ] , df [ target ] , test_size = 0.2 , random_state = 2 ) model = LinearRegression ( ) model . fit ( X_train , y_train ) y_pred = model . predict ( X_train ) y_pred1 = model . predict ( X_test )

편의상 validation set은 나누지 않았다. 보통의 경우, train과 test를 나눈 뒤 그 train set에서 한번 더 train과 val set 나눈다.

이를 hold-out 방식이라고 한다.

from sklearn . metrics import r2_score mae_train = mean_absolute_error ( y_train , y_pred ) mae_test = mean_absolute_error ( y_test , y_pred1 ) mae_train , mae_test r2_train = r2_score ( y_train , y_pred ) r2_test = r2_score ( y_test , y_pred1 ) r2_train , r2_test print ( f’Train set MAE: { mae_train : ,.0f } ‘ ) print ( f’Train set R2: { r2_train : ,.3f } ‘ ) print ( f’Test set MAE: { mae_test : ,.0f } ‘ ) print ( f’Test set R2: { r2_test : ,.3f } ‘ )

Train set MAE: 1,004 Train set R2: 0.851 Test set MAE: 1,009 Test set R2: 0.850

train set과 test set의 모델의 예측에 대한 오차를 MAE, 결정계수 R2를 표시해보았다. Train set과 Test set의 오차가 크지 않고, 결정계수가 높아 ‘분산이 적은’ 모델을 잘 만들었다고 볼 수 있다.

a = model . coef_ b = model . intercept_ print ( ‘carat 특성 회귀계수:’ , a [ 0 ] [ 0 ] ) print ( ‘depth 특성 회귀계수:’ , a [ 0 ] [ 1 ] ) print ( ‘y 절편 값:’ , b [ 0 ] )

carat 특성 회귀계수: 7765.140663767152 depth 특성 회귀계수: -102.1653221580108 y 절편 값: 4045.3331826016815

coef와 intercept를 통해 모델 특성의 회귀계수와 y절편 값을 확인해봤다.

carat 특성은 1단위당 price가 7765씩 오른다는 것을 알 수 있다.

반면, depth 특성은 1높아질때마다 price가 102씩 줄어드는 반비례 관계임을 회귀계수를 통해 알 수 있다.

y 절편의 경우는 최적의 기울기를 맞추는 과정에서 특성 X값이 0일 때 4045의 위치에 있다는 사실을 알 수 있다.

다중선형회귀모델을 직접 작성해보고, 평가하고, 이 모델에 대한 확인을 해보았다.

과적합/과소적합 정의

-과적합(overfitting): 모델이 훈련용 데이터에 너무 과하게 학습이 되어 검증데이터 또는 테스트데이터에 적용시 오차가 크게 나는 경우 과적합이 되었다고 하고, 분산이 높다라고 표현한다.

-과소적합(underfitting): 모델이 훈련 데이터에 학습이 너무 덜 되어있어 오차가 높은 경우이다. 이 경우는 편향이 높다라고 표현한다.

(이미지 출처: https://tensorflow.blog)

-일반화(Generalizaion): 규제라고도 표현하는 이 일반화는 훈련 데이터와 테스트 데이터에 대한 오차가 비슷하면서 어떤 새로운 feature 데이터가 input되어도 훈련 데이터와 비슷한 오차로 target 값을 예측하는 모델을 일반화가 되었다고 표현한다.

일반적으로 다중선형회귀를 이용하면 특성이 많아지면서 과적합이 될 가능성이 높아 이를 잘 조절해서 일반화 해야한다.

03. 다중 선형 회귀(Multivariable Linear regression)

앞서 배운 $x$가 1개인 선형 회귀를 단순 선형 회귀(Simple Linear Regression)이라고 합니다.

이번 챕터에서는 다수의 $x$로부터 $y$를 예측하는 다중 선형 회귀(Multivariable Linear Regression)에 대해서 이해합니다.

1. 데이터에 대한 이해(Data Definition)

다음과 같은 훈련 데이터가 있습니다. 앞서 배운 단순 선형 회귀와 다른 점은 독립 변수 $x$의 개수가 이제 1개가 아닌 3개라는 점입니다. 3개의 퀴즈 점수로부터 최종 점수를 예측하는 모델을 만들어보겠습니다.

독립 변수 $x$의 개수가 3개므로 이를 수식으로 표현하면 아래와 같습니다.

$H(x) = w_{1}x_{1} + w_{2}x_{2} + w_{3}x_{3} + b$

2. 파이토치로 구현하기

우선 필요한 도구들을 임포트하고 랜덤 시드를 고정합니다.

import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim

torch.manual_seed(1)

이제 훈련 데이터를 선언해보겠습니다.

$H(x) = w_{1}x_{1} + w_{2}x_{2} + w_{3}x_{3} + b$

위의 식을 보면 이번에는 단순 선형 회귀와 다르게 $x$의 개수가 3개입니다. 그러니까 $x$를 3개 선언합니다.

# 훈련 데이터 x1_train = torch.FloatTensor([[73], [93], [89], [96], [73]]) x2_train = torch.FloatTensor([[80], [88], [91], [98], [66]]) x3_train = torch.FloatTensor([[75], [93], [90], [100], [70]]) y_train = torch.FloatTensor([[152], [185], [180], [196], [142]])

이제 가중치 $w$와 편향 $b$를 선언합니다. 가중치 $w$도 3개 선언해주어야 합니다.

# 가중치 w와 편향 b 초기화 w1 = torch.zeros(1, requires_grad=True) w2 = torch.zeros(1, requires_grad=True) w3 = torch.zeros(1, requires_grad=True) b = torch.zeros(1, requires_grad=True)

이제 가설, 비용 함수, 옵티마이저를 선언한 후에 경사 하강법을 1,000회 반복합니다.

# optimizer 설정 optimizer = optim.SGD([w1, w2, w3, b], lr=1e-5) nb_epochs = 1000 for epoch in range(nb_epochs + 1): # H(x) 계산 hypothesis = x1_train * w1 + x2_train * w2 + x3_train * w3 + b # cost 계산 cost = torch.mean((hypothesis – y_train) ** 2) # cost로 H(x) 개선 optimizer.zero_grad() cost.backward() optimizer.step() # 100번마다 로그 출력 if epoch % 100 == 0: print(‘Epoch {:4d}/{} w1: {:.3f} w2: {:.3f} w3: {:.3f} b: {:.3f} Cost: {:.6f}’.format( epoch, nb_epochs, w1.item(), w2.item(), w3.item(), b.item(), cost.item() ))

위의 경우 가설을 선언하는 부분인 hypothesis = x1_train * w1 + x2_train * w2 + x3_train * w3 + b에서도 x_train의 개수만큼 w와 곱해주도록 작성해준 것을 확인할 수 있습니다.

3. 벡터와 행렬 연산으로 바꾸기

위의 코드를 개선할 수 있는 부분이 있습니다. 이번에는 $x$의 개수가 3개였으니까 x1_train, x2_train, x3_train와 w1, w2, w3를 일일히 선언해주었습니다. 그런데 $x$의 개수가 1,000개라고 가정해봅시다. 위와 같은 방식을 고수할 경우 x_train1 ~ x_train1000을 전부 선언하고, w1 ~ w1000을 전부 선언해야 합니다. 다시 말해 $x$와 $w$ 변수 선언만 총 합 2,000개를 해야합니다. 또한 가설을 선언하는 부분에서도 마찬가지로 x_train과 w의 곱셈이 이루어지는 항을 1,000개를 작성해야 합니다. 이는 굉장히 비효율적입니다.

이를 해결하기 위해 행렬 곱셈 연산(또는 벡터의 내적)을 사용합니다.

행렬의 곱셈 과정에서 이루어지는 벡터 연산을 벡터의 내적(Dot Product)이라고 합니다.

위의 그림은 행렬 곱셈 연산 과정에서 벡터의 내적으로 1 × 7 + 2 × 9 + 3 × 11 = 58이 되는 과정을 보여줍니다.

이 행렬 연산이 어떻게 현재 배우고 있는 가설과 상관이 있다는 걸까요?

바로 가설을 벡터와 행렬 연산으로 표현할 수 있기 때문입니다.

1. 벡터 연산으로 이해하기

$H(X) = w_{1}x_{1} + w_{2}x_{2} + w_{3}x_{3}$

위 식은 아래와 같이 두 벡터의 내적으로 표현할 수 있습니다.

두 벡터를 각각 $X$와 $W$로 표현한다면, 가설은 다음과 같습니다.

$H(X) = XW$

$x$의 개수가 3개였음에도 이제는 $X$와 $W$라는 두 개의 변수로 표현된 것을 볼 수 있습니다.

2. 행렬 연산으로 이해하기

훈련 데이터를 살펴보고, 벡터와 행렬 연산을 통해 가설 $H(X)$를 표현해보겠습니다.

전체 훈련 데이터의 개수를 셀 수 있는 1개의 단위를 샘플(sample)이라고 합니다. 현재 샘플의 수는 총 5개입니다.

각 샘플에서 $y$를 결정하게 하는 각각의 독립 변수 $x$를 특성(feature)이라고 합니다. 현재 특성은 3개입니다.

이는 독립 변수 $x$들의 수가 (샘플의 수 × 특성의 수) = 15개임을 의미합니다. 독립 변수 $x$들을 (샘플의 수 × 특성의 수)의 크기를 가지는 하나의 행렬로 표현해봅시다. 그리고 이 행렬을 $X$라고 하겠습니다.

$ \left( \begin{array}{c} x_{11}\ x_{12}\ x_{13}\ \\ x_{21}\ x_{22}\ x_{23}\ \\ x_{31}\ x_{32}\ x_{33}\ \\ x_{41}\ x_{42}\ x_{43}\ \\ x_{51}\ x_{52}\ x_{53}\ \\ \end{array} \right) $

그리고 여기에 가중치 $w_{1}, w_{2}, w_{3}$을 원소로 하는 벡터를 $W$라 하고 이를 곱해보겠습니다.

$ \left( \begin{array}{c} x_{11}\ x_{12}\ x_{13}\ \\ x_{21}\ x_{22}\ x_{23}\ \\ x_{31}\ x_{32}\ x_{33}\ \\ x_{41}\ x_{42}\ x_{43}\ \\ x_{51}\ x_{52}\ x_{53}\ \\ \end{array} \right) \left( \begin{array}{c} w_{1} \\ w_{2} \\ w_{3} \\ \end{array} \right) \ = \left( \begin{array}{c} x_{11}w_{1}+ x_{12}w_{2}+ x_{13}w_{3}\ \\ x_{21}w_{1}+ x_{22}w_{2}+ x_{23}w_{3}\ \\ x_{31}w_{1}+ x_{32}w_{2}+ x_{33}w_{3}\ \\ x_{41}w_{1}+ x_{42}w_{2}+ x_{43}w_{3}\ \\ x_{51}w_{1}+ x_{52}w_{2}+ x_{53}w_{3}\ \\ \end{array} \right) $

위의 식은 결과적으로 다음과 같습니다.

$H(X) = XW$

이 가설에 각 샘플에 더해지는 편향 $b$를 추가해봅시다. 샘플 수만큼의 차원을 가지는 편향 벡터 $B$를 만들어 더합니다.

$ \left( \begin{array}{c} x_{11}\ x_{12}\ x_{13}\ \\ x_{21}\ x_{22}\ x_{23}\ \\ x_{31}\ x_{32}\ x_{33}\ \\ x_{41}\ x_{42}\ x_{43}\ \\ x_{51}\ x_{52}\ x_{53}\ \\ \end{array} \right) \left( \begin{array}{c} w_{1} \\ w_{2} \\ w_{3} \\ \end{array} \right) + \left( \begin{array}{c} b \\ b \\ b \\ b \\ b \\ \end{array} \right) \ = \left( \begin{array}{c} x_{11}w_{1}+ x_{12}w_{2}+ x_{13}w_{3} + b\ \\ x_{21}w_{1}+ x_{22}w_{2}+ x_{23}w_{3} + b\ \\ x_{31}w_{1}+ x_{32}w_{2}+ x_{33}w_{3} + b\ \\ x_{41}w_{1}+ x_{42}w_{2}+ x_{43}w_{3} + b\ \\ x_{51}w_{1}+ x_{52}w_{2}+ x_{53}w_{3} + b\ \\ \end{array} \right) $

위의 식은 결과적으로 다음과 같습니다.

$H(X) = XW + B$

결과적으로 전체 훈련 데이터의 가설 연산을 3개의 변수만으로 표현하였습니다.

이와 같이 벡터와 행렬 연산은 식을 간단하게 해줄 뿐만 아니라 다수의 샘플의 병렬 연산이므로 속도의 이점을 가집니다.

이를 참고로 파이토치로 구현해봅시다.

4. 행렬 연산을 고려하여 파이토치로 구현하기

이번에는 행렬 연산을 고려하여 파이토치로 재구현해보겠습니다.

이번에는 훈련 데이터 또한 행렬로 선언해야 합니다.

x_train = torch.FloatTensor([[73, 80, 75], [93, 88, 93], [89, 91, 80], [96, 98, 100], [73, 66, 70]]) y_train = torch.FloatTensor([[152], [185], [180], [196], [142]])

이전에 x_train을 3개나 구현했던 것과 다르게 이번에는 x_train 하나에 모든 샘플을 전부 선언하였습니다. 다시 말해 (5 x 3) 행렬 $X$을 선언한 것입니다.

x_train과 y_train의 크기(shape)를 출력해보겠습니다.

print(x_train.shape) print(y_train.shape)

torch.Size([5, 3]) torch.Size([5, 1])

각각 (5 × 3) 행렬과 (5 × 1) 행렬(또는 벡터)의 크기를 가집니다.

이제 가중치 $W$와 편향 $b$를 선언합니다.

# 가중치와 편향 선언 W = torch.zeros((3, 1), requires_grad=True) b = torch.zeros(1, requires_grad=True)

여기서 주목할 점은 가중치 $W$의 크기가 (3 × 1) 벡터라는 점입니다. 행렬의 곱셈이 성립되려면 곱셈의 좌측에 있는 행렬의 열의 크기와 우측에 있는 행렬의 행의 크기가 일치해야 합니다. 현재 X_train의 행렬의 크기는 (5 × 3)이며, $W$ 벡터의 크기는 (3 × 1)이므로 두 행렬과 벡터는 행렬곱이 가능합니다. 행렬곱으로 가설을 선언하면 아래와 같습니다.

hypothesis = x_train.matmul(W) + b

가설을 행렬곱으로 간단히 정의하였습니다. 이는 앞서 x_train과 w의 곱셈이 이루어지는 각 항을 전부 기재하여 가설을 선언했던 것과 대비됩니다. 이 경우, 사용자가 독립 변수 $x$의 수를 후에 추가적으로 늘리거나 줄이더라도 위의 가설 선언 코드를 수정할 필요가 없습니다. 이제 해야할 일은 비용 함수와 옵티마이저를 정의하고, 정해진 에포크만큼 훈련을 진행하는 일입니다. 이를 반영한 전체 코드는 다음과 같습니다.

MATLAB regress

carsmall 데이터 세트를 불러옵니다. 중량과 마력을 예측 변수로 식별하고 주행 거리를 응답 변수로 식별합니다.

load carsmall x1 = Weight; x2 = Horsepower; % Contains NaN data y = MPG;

상호 작용 항이 있는 선형 모델에 대한 회귀 계수를 계산합니다.

X = [ones(size(x1)) x1 x2 x1.*x2]; b = regress(y,X) % Removes NaN data

b = 4×1 60.7104 -0.0102 -0.1882 0.0000

데이터와 모델을 플로팅합니다.

[ML] 다중 선형 회귀 모델(Multiple Linear Regression Model)

728×90

반응형

다중 선형 회귀 모델(Multiple Linear Regression)

※ 단순 선형 회귀를 모른다면? (아래 클릭 시 링크로 이동)

단순 선형 회귀 모델(Simple Linear Regression Model)

다중 선형 회귀가 뭐지?

단순 선형 회귀와 다중 선형 회귀

선형 회귀의 가장 단순한 예제는 한 개의 스칼라 독립 변수 x와 한 개의 스칼라 의존 변수 y의 관계일 것이다. 이를 단순 선형 회귀라 부른다. 여기에서 독립 변수를 여러 개로 확장한 것이 다중 선형 회귀이다. 실세계의 거의 대부분의 문제는 여러 개의 독립 변수를 포함하며, 선형 회귀라 함은 보통 다중 선형 회귀를 일컫는다. 하지만 이러한 경우에도 여전히 응답 변수 y는 한 개의 스칼라 변수이다. 다변량 선형 회귀는 응답 변수 y가 벡터인 경우를 의미한다. 이러한 경우를 일반 선형 회귀라 부른다. 다중 선형 회귀와 다변량 선형 회귀는 다른 의미이므로, 혼동하지 않도록 주의해야 한다.

– 위키백과 (선형 회귀 中)

영향을 받은 결과와 영향을 준 요인의 개수를 ‘결과 : 요인’이라고 표현하면 단순 선형 회귀는 1:1이고 다중 선형 회귀는 1:N이다.

여기서 이 결과가 종속 변수(또는 타겟)이고, 요인을 독립 변수(특성)라고 한다.

선형 회귀에서의 가정이나 최소제곱법을 이용하여 결과값을 구하는 등의 특징은 단순 선형 회귀와 공유한다.

다만 다중 선형 회귀에서는 특성의 개수가 2개 이상이므로 다중공선성(Multicollinearity)$^*$$^1$을 주의해야 한다.

다중 선형 회귀는 어떻게 하는거지?

기본적인 원리는 단순 선형 회귀와 비슷하다.

다만 차이점이라면 특성의 개수가 2개 이상이므로 회귀 방정식(단순 선형 회귀에서는 직선을 나타내는 식)에 차이가 있다.

단순 선형 회귀에서의 회귀 방정식은 $$y=β_0+β_1x$$ 이고, 다중 선형 회귀에서의 회귀 방정식은 $$y=β_0+β_1x_1+β_2x_2+ … +β_nx_n$$ 이다.

(자세한 계산 과정은 하단 참고 자료의 링크로)

scikit-learn을 활용한 다중 선형 회귀

데이터 불러오기 & 훈련/테스트 데이터 나누기

# 예시 데이터 불러오기 (House Sales in King County, USA) import pandas as pd df = pd.read_csv(‘https://ds-lecture-data.s3.ap-northeast-2.amazonaws.com/kc_house_data/kc_house_data.csv’) df.date = pd.to_datetime(df.date) # 날짜 형식으로 변환 df.head()

id date price bedrooms bathrooms sqft_living sqft_lot floors waterfront view condition grade sqft_above sqft_basement yr_built yr_renovated zipcode lat long sqft_living15 sqft_lot15 0 7129300520 2014-10-13 221900.0 3 1.00 1180 5650 1.0 0 0 3 7 1180 0 1955 0 98178 47.5112 -122.257 1340 5650 1 6414100192 2014-12-09 538000.0 3 2.25 2570 7242 2.0 0 0 3 7 2170 400 1951 1991 98125 47.7210 -122.319 1690 7639 2 5631500400 2015-02-25 180000.0 2 1.00 770 10000 1.0 0 0 3 6 770 0 1933 0 98028 47.7379 -122.233 2720 8062 3 2487200875 2014-12-09 604000.0 4 3.00 1960 5000 1.0 0 0 5 7 1050 910 1965 0 98136 47.5208 -122.393 1360 5000 4 1954400510 2015-02-18 510000.0 3 2.00 1680 8080 1.0 0 0 3 8 1680 0 1987 0 98074 47.6168 -122.045 1800 7503

# 2015-01-01을 기준으로 훈련/테스트 데이터 분리 train = df[df.date < '2015-01-01'] test = df[df.date >= ‘2015-01-01’]

타겟 및 기준 모델 설정

# 타겟 설정 target = ‘price’ y_train = train[target] y_test = test[target]

# price 평균값으로 예측(기준모델) predict = y_train.mean() predict

539181.4284152258

# 기준모델로 훈련 에러(MAE) 계산 from sklearn.metrics import mean_absolute_error y_pred = [predict] * len(y_train) mae = mean_absolute_error(y_train, y_pred) print(f’훈련 에러: {mae:.2f}’)

훈련 에러: 233570.83

# 테스트 에러(MAE) y_pred = [predict] * len(y_test) mae = mean_absolute_error(y_test, y_pred) print(f’테스트 에러: {mae:.2f}’)

테스트 에러: 233990.69

다중 선형 회귀 모델 만들기

# 다중모델 학습을 위한 특성 features = [‘bathrooms’, ‘sqft_living’] X_train = train[features] X_test = test[features]

# 모델 fit from sklearn.linear_model import LinearRegression model = LinearRegression() model.fit(X_train, y_train) y_pred = model.predict(X_train) mae = mean_absolute_error(y_train, y_pred) print(f’훈련 에러: {mae:.2f}’)

훈련 에러: 170777.34

# 테스트 데이터에 적용 y_pred = model.predict(X_test) mae = mean_absolute_error(y_test, y_pred) print(f’테스트 에러: {mae:.2f}’)

테스트 에러: 179252.53

절편과 회귀계수 확인

# 절편(intercept)과 계수들(coefficients) model.intercept_, model.coef_

(-50243.56279640319, array([-5158.92591411, 286.13753555]))

∵ 특성이 2개이기 때문에 회귀 계수도 2개

## 회귀식 b0 = model.intercept_ b1, b2 = model.coef_ print(f’y = {b0:.0f} + {b1:.0f}x\u2081 + {b2:.0f}x\u2082′)

y = -50244 + -5159$x_1$ + 286$x_2$

훈련/테스트 데이터에 대한 평가 지표 결과 확인

from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score def evaluate(features, model, train, test): y_train = train[target] y_test = test[target] X_train = train[features] X_test = test[features] y_pred_train = model.predict(X_train) y_pred_test = model.predict(X_test) mse = mean_squared_error(y_train, y_pred_train) rmse = mse ** 0.5 mae = mean_absolute_error(y_train, y_pred_train) r2 = r2_score(y_train, y_pred_train) mse_t = mean_squared_error(y_test, y_pred_test) rmse_t = mse_t ** 0.5 mae_t = mean_absolute_error(y_test, y_pred_test) r2_t = r2_score(y_test, y_pred_test) display(pd.DataFrame([[‘MSE’, mse, mse_t],[‘RMSE’, rmse, rmse_t],[‘MAE’, mae, mae_t],[‘R2’, r2, r2_t]], columns=[‘Metric’, ‘Score(Training)’, ‘Score(Test)’]))

evaluate(features, model, train, test)

Metric Score(Training) Score(Test) 0 MSE 6.709905e+10 7.108399e+10 1 RMSE 2.590348e+05 2.666158e+05 2 MAE 1.707773e+05 1.792525e+05 3 R2 5.076086e-01 4.599930e-01

∗1 다중공선성(Multicollinearity)이란?

다중공선성(多重共線性)문제(Multicollinearity)는 통계학의 회귀분석에서 독립변수들 간에 강한 상관관계가 나타나는 문제이다. 독립변수들간에 정확한 선형관계가 존재하는 완전공선성의 경우와 독립변수들간에 높은 선형관계가 존재하는 다중공선성으로 구분하기도 한다. 이는 회귀분석의 전제 가정을 위배하는 것이므로 적절한 회귀분석을 위해 해결해야 하는 문제가 된다.

– 위키백과

특성(독립 변수)들끼리 강한 상관 관계가 있는 경우를 의미한다.

만약 이를 배제하지 않고 분석에 그대로 사용하게 되면 결과가 왜곡될 위험이 크다.

<참고 자료>

[통계 이론] 선형 회귀 : 다중 회귀 분석

머신러닝 – 다중선형회귀(Multiple Linear Regression)

반응형

키워드에 대한 정보 다중 선형 회귀

다음은 Bing에서 다중 선형 회귀 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 빅분기 필기 다중 선형 회귀분석 Multiple Linear Regression [빅공남! 통계 같이 공부해요]

  • 빅분기
  • 빅데이터분석기사
  • 빅데이터분석기사 필기
  • 빅데이터 분석기사 필기
  • 빅분기 통계
  • 기초통계
  • 통계
  • 강의
  • 빅공남
  • 빅데이터수학
  • 빅데이터공부하는남자
  • 상관계수
  • 회귀분석
  • 단순회귀
  • 선형회귀
  • Linear
  • Regression
  • 선형회귀분석

빅분기 #필기 #다중 #선형 #회귀분석 #Multiple #Linear #Regression #[빅공남! #통계 #같이 #공부해요]


YouTube에서 다중 선형 회귀 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 빅분기 필기 다중 선형 회귀분석 Multiple Linear Regression [빅공남! 통계 같이 공부해요] | 다중 선형 회귀, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  계묘 일주 연예인 | 2% 넘치거나 부족한 계묘일주 유명인 특징 보기 15 개의 자세한 답변

Leave a Reply

Your email address will not be published. Required fields are marked *