You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 보스턴 주택 가격 예측 on Google, you do not find the information you need! Here are the best content compiled and compiled by the https://chewathai27.com/to team, along with other related topics such as: 보스턴 주택 가격 예측 딥러닝 보스턴 주택 가격 예측, 보스턴 주택 가격 예측 데이터, 파이썬 보스턴 주택 가격 예측, 보스턴 주택 가격 예측 선형 회귀, Kaggle 보스턴 주택 가격 예측, 캐글 주택 가격 예측, 파이썬 주택가격 예측, 머신러닝 보스턴 주택 가격 예측
[머신러닝 입문]-5 회귀(Regression)-보스턴 주택가격예측
- Article author: liz09045.tistory.com
- Reviews from users: 38804 Ratings
- Top rated: 4.4
- Lowest rated: 1
- Summary of article content: Articles about [머신러닝 입문]-5 회귀(Regression)-보스턴 주택가격예측 보스턴 지역의 주택가격을 예측하는 모델을 만들어보자! 1. 데이터 로딩. 보스턴 주색 데이터셋은 14개의 변수(열)로 구성된다. 각 열은 주택의 속성 … …
- Most searched keywords: Whether you are looking for [머신러닝 입문]-5 회귀(Regression)-보스턴 주택가격예측 보스턴 지역의 주택가격을 예측하는 모델을 만들어보자! 1. 데이터 로딩. 보스턴 주색 데이터셋은 14개의 변수(열)로 구성된다. 각 열은 주택의 속성 … 회귀는 지도학습의 또다른 유형 중 하나이다. 보스턴 지역의 주택가격을 예측하는 모델을 만들어보자! 1. 데이터 로딩 보스턴 주색 데이터셋은 14개의 변수(열)로 구성된다. 각 열은 주택의 속성을 나타내는 피처..
- Table of Contents:
관련글
댓글1
공지사항
최근글
인기글
최근댓글
태그
전체 방문자
[Keras 기초 3탄] 회귀 모델 : 보스톤 주택 가격 예측 – DACON
- Article author: dacon.io
- Reviews from users: 27735 Ratings
- Top rated: 4.8
- Lowest rated: 1
- Summary of article content: Articles about [Keras 기초 3탄] 회귀 모델 : 보스톤 주택 가격 예측 – DACON 회귀 문제 : 보스톤 주택 가격 예측 · 1. 데이터셋 불러오기. 보스턴 주택 가격 데이터셋. 1970년 중반 보스턴 외곽 지역의 범죄율, 지방세율 등의 데이터 … …
- Most searched keywords: Whether you are looking for [Keras 기초 3탄] 회귀 모델 : 보스톤 주택 가격 예측 – DACON 회귀 문제 : 보스톤 주택 가격 예측 · 1. 데이터셋 불러오기. 보스턴 주택 가격 데이터셋. 1970년 중반 보스턴 외곽 지역의 범죄율, 지방세율 등의 데이터 … 5만 AI팀이 협업하는 인공지능 플랫폼Data Science Competition, datavisualization, DataScience, DataAnalyst, DataEngineer, DataScientist, MachineLearning, deeplearning, 데이터분석, 인공지능, 머신러닝, 딥러닝, 파이썬, 코드, 공유, AI, python, 통계, 수학, 경진대회
- Table of Contents:
5-2. 보스턴 주택 가격 예측 || LinearRegression :: My_Flow
- Article author: check-this.tistory.com
- Reviews from users: 43766 Ratings
- Top rated: 3.4
- Lowest rated: 1
- Summary of article content: Articles about 5-2. 보스턴 주택 가격 예측 || LinearRegression :: My_Flow 보스턴 주택 가격 예측 || LinearRegression. 우하이후 2021. … columns = boston.feature_names) # boston dataset의 target array는 주택 가격임. …
- Most searched keywords: Whether you are looking for 5-2. 보스턴 주택 가격 예측 || LinearRegression :: My_Flow 보스턴 주택 가격 예측 || LinearRegression. 우하이후 2021. … columns = boston.feature_names) # boston dataset의 target array는 주택 가격임. import numpy as np import matplotlib.pyplot as plt import pandas as pd import seaborn as sns from scipy import stats from sklearn.datasets import load_boston %matplotlib inline # boston 데이타셋 로..Pioneers always live their own life.
- Table of Contents:
5-2 보스턴 주택 가격 예측 LinearRegression
티스토리툴바
[머신러닝 완벽가이드] LinearRegression을 이용한 보스턴 주택가격 예측
- Article author: kimdingko-world.tistory.com
- Reviews from users: 28524 Ratings
- Top rated: 3.6
- Lowest rated: 1
- Summary of article content: Articles about [머신러닝 완벽가이드] LinearRegression을 이용한 보스턴 주택가격 예측 이번 포스팅에서는 sklearn에서 제공하는 LinearRegression 모델을 이용해 보스턴 주택 가격을 예측하는 예제를 진행합니다. …
- Most searched keywords: Whether you are looking for [머신러닝 완벽가이드] LinearRegression을 이용한 보스턴 주택가격 예측 이번 포스팅에서는 sklearn에서 제공하는 LinearRegression 모델을 이용해 보스턴 주택 가격을 예측하는 예제를 진행합니다. LinearRegression을 이용한 보스턴 주택 가격 예측¶ 이번 포스팅에서는 sklearn에서 제공하는 LinearRegression 모델을 이용해 보스턴 주택 가격을 예측하는 예제를 진행합니다. In [1]: # 라이브러리 임포트 im..AI/RPA Developer
- Table of Contents:
[Kaggle] House Prices Prediction : 보스턴 주택가격 예측 – 1. EDA & Feature Engineering
- Article author: minding-deep-learning.tistory.com
- Reviews from users: 9994 Ratings
- Top rated: 3.4
- Lowest rated: 1
- Summary of article content: Articles about [Kaggle] House Prices Prediction : 보스턴 주택가격 예측 – 1. EDA & Feature Engineering [Kaggle] House Prices Prediction : 보스턴 주택가격 예측 – 1. EDA & Feature Engineering. Minding 2021. 4. 14. 18:08. 320×100. …
- Most searched keywords: Whether you are looking for [Kaggle] House Prices Prediction : 보스턴 주택가격 예측 – 1. EDA & Feature Engineering [Kaggle] House Prices Prediction : 보스턴 주택가격 예측 – 1. EDA & Feature Engineering. Minding 2021. 4. 14. 18:08. 320×100. [파이썬 라이브러리를 활용한 머신러닝] 책을 공부하던 때 처음 접해보았던 머신러닝 회귀 문제의 대표문제, Kaggle의 House Prices 예측 데이터셋을 다시 한번 살펴보는 시간을 가졌다. 데이터셋은 Kaggle에서..
- Table of Contents:
태그
관련글
댓글4
공지사항
최근글
인기글
최근댓글
태그
전체 방문자
티스토리툴바
강의 01 보스턴 주택 가격 데이터셋 소개 – 토닥토닥 파이썬 – 머신 러닝 추가문제
- Article author: wikidocs.net
- Reviews from users: 46446 Ratings
- Top rated: 3.4
- Lowest rated: 1
- Summary of article content: Articles about 강의 01 보스턴 주택 가격 데이터셋 소개 – 토닥토닥 파이썬 – 머신 러닝 추가문제 보스턴 주택 가격 : 1978년에 발표된 데이터로 미국 보스턴 지역의 주택 가격에 영향을 미치는 요소들을 정리함 …
- Most searched keywords: Whether you are looking for 강의 01 보스턴 주택 가격 데이터셋 소개 – 토닥토닥 파이썬 – 머신 러닝 추가문제 보스턴 주택 가격 : 1978년에 발표된 데이터로 미국 보스턴 지역의 주택 가격에 영향을 미치는 요소들을 정리함 온라인 책을 제작 공유하는 플랫폼 서비스
- Table of Contents:
[회귀분석]단순선형회귀분석(Simple Linear Regression) 예제-보스턴 주택 가격 예측 in python
- Article author: topo314.tistory.com
- Reviews from users: 15576 Ratings
- Top rated: 4.5
- Lowest rated: 1
- Summary of article content: Articles about [회귀분석]단순선형회귀분석(Simple Linear Regression) 예제-보스턴 주택 가격 예측 in python 보스턴 주택 가격 데이터로 주택 가격을 예측하는 단순선형회귀분석을 한 뒤 결과를 해석해보겠습니다. 이 데이터는 1978년 데이터로 506개 타운의 … …
- Most searched keywords: Whether you are looking for [회귀분석]단순선형회귀분석(Simple Linear Regression) 예제-보스턴 주택 가격 예측 in python 보스턴 주택 가격 데이터로 주택 가격을 예측하는 단순선형회귀분석을 한 뒤 결과를 해석해보겠습니다. 이 데이터는 1978년 데이터로 506개 타운의 … 보스턴 주택 가격 데이터로 주택 가격을 예측하는 단순선형회귀분석을 한 뒤 결과를 해석해보겠습니다. 이 데이터는 1978년 데이터로 506개 타운의 주택 가격의 중앙값(단위 1,000 달러)이고, 예측변수(Y)는 Targe..
- Table of Contents:
태그
‘데이터분석Python’ Related Articles
티스토리툴바
3.6 주택 가격 예측: 회귀 문제 | 텐서 플로우 블로그 (Tensor ≈ Blog)
- Article author: tensorflow.blog
- Reviews from users: 49949 Ratings
- Top rated: 4.3
- Lowest rated: 1
- Summary of article content: Articles about 3.6 주택 가격 예측: 회귀 문제 | 텐서 플로우 블로그 (Tensor ≈ Blog) 로지스틱 회귀는 회귀 알고리즘이 아니라 분류 알고리즘입니다.37. 3.6.1 보스턴 주택 가격 데이터셋. 1970 … …
- Most searched keywords: Whether you are looking for 3.6 주택 가격 예측: 회귀 문제 | 텐서 플로우 블로그 (Tensor ≈ Blog) 로지스틱 회귀는 회귀 알고리즘이 아니라 분류 알고리즘입니다.37. 3.6.1 보스턴 주택 가격 데이터셋. 1970 … 3.5 뉴스 기사 분류: 다중 분류 문제 | 목차 | 3.7 요약 앞의 두 예제는 분류 문제입니다. 입력 데이터 포인트의 개별적인 레이블 하나를 예측하는 것이 목적입니다. 또 다른 종류의 머신 러닝 문제는 개별적인 레이블 대신에 연속적인 값을 예측하는 회귀regression입니다. 예를 들어 기상 데이터가 주어졌을 때 내일 기온을 예측하거나, 소프트웨어 명세가 주어졌을 때 소프트웨어 프로젝트가 완료될 시간을 예측하는…
- Table of Contents:
머신러닝(Machine Learning) 딥러닝(Deep Learning) 그리고 텐서(Tensor) 또 파이썬(Python)
361 보스턴 주택 가격 데이터셋
362 데이터 준비
363 모델 구성
364 K-겹 검증을 사용한 훈련 검증
365 정리
“36 주택 가격 예측 회귀 문제”에 대한 9개의 생각
See more articles in the same category here: Top 721 tips update new.
[머신러닝 입문]-5 회귀(Regression)-보스턴 주택가격예측
회귀는 지도학습의 또다른 유형 중 하나이다. 보스턴 지역의 주택가격을 예측하는 모델을 만들어보자!
1. 데이터 로딩
보스턴 주색 데이터셋은 14개의 변수(열)로 구성된다. 각 열은 주택의 속성을 나타내는 피처를 말하고, 각 행은 개별 주택에 대한 데이터의 집합(레코드)를 나타낸다. 하나의 행이 하나의 샘플(주택)을 나타내고, 각 열에 맞춰 해당하는 데이터가 입력되어 있다.
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns #보스턴 주택 데이터셋 from sklearn import datasets housing = datasets.load_boston() #key 값 확인mport pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns #보스턴 주택 데이터셋 from sklearn import datasets housing = datasets.load_boston() #key 값 확인 housing.keys()
key값 확인
보스턴 주택 데이터셋도 붓꽃처럼 사이킷런이 제공하는 데이터셋에 포함되어 있다. load_boston()을 이용해 보스턴 데이터셋을 불러왔고, key값도 확인해보았다.
데이터프레임으로 변환
이전과 동일하게 DataFrame()을 이용해 데이터프레임으로 변환해주었다. 13가지 피처 데이터가 들어있는 2차원구조(506행, 13열)이 됐으며, 목표변수 데이터를 데이터프레임으로 변환하고 열 이름을 ‘Target’으로 설정했다.
데이터프레임 결합
data 데이터프레임과 target 데이터프레임을 결합한다. concat()에 axis=1 옵션을 사용해 좌우 방향으로 연결하듯 붙여줬다.
2. 데이터 탐색
2-1. 기본 정보
info
info()를 사용해 데이터프레임의 기본정보를 확인해봤다. 모든 열이 506개의 유효값을 갖고 있으면, 자료형은 64비트 실수형임을 알 수 있다. 모든 데이터값이 숫자로만 이루어져 있기 때문에, 머신러닝 알고리즘에 바로 입력해 계산이 가능하다.
2-2. 결측값 확인
결측값
결측값 없음!
2-3. 상관 관계 분석
#상관 관계 행렬 df_corr=df.corr() #히트맵 plt.figure(figsize=(10,10)) sns.set(font_scale=0.8) sns.heatmap(df_corr, annot=True, cbar=False) plt.show()
결과창
corr()을 이용해 숫자 데이터를 갖는 변수 간의 상관 계수를 계산했다. heatmap()을 사용해 시각화하였으며, 이미지 크기는 (10,10), 폰트스케일은 0.8로 설정했다.
상관관계 높은 순으로 출력
목표변수 Target과 상관 계수가 높은 순서대로 출력을 했다. abs()로 상관 계수의 값을 모두 양수로 변경해주었고, sort_values()에 ascending=False 옵션을 적용해 상관 계수 값을 기준으로 내림차순 정렬을 했다.
피처 선택 추출
이젠 데이터분포를 살펴보자! 가장 좋은 방법은 그래프를 그려 시각화 하는 것이 좋다. Target 변수와 함께, 상관 계수 top4 LSTAT, RM, PTRATIO, INDUS를 추출했다.
※loc 인덱서 짚고 넘어가기※
데이터프레임의 특정 부분을 추출할 때에 loc 인덱서를 사용한다.
형식: loc[행 인덱스, 열 이름]
#regplot으로 선형회귀선 표시 plt.figure(figsize=(10,10)) for idx, col in enumerate(plot_cols[1:]): ax1=plt.subplot(2, 2, idx+1) sns.regplot(x=col, y=plot_cols[0], data=plot_df, ax=ax1) plt.show()
결과 창
사본 regplot 함수로 선형 회귀선을 산점도에 표시할 수 있다. x변수에는 target을 제외한 4개 피처를, y변수에는 target을 입력한다. subplot()으로 2×2 격자 프레임을 만들어주었다. LSTAT와 RM의 선형관계가 뚜렷하게 나타난다.
2-4. 목표 변수(Target 열) – 주택 가격
Target 데이터분포
Target 열의 주택가격 데이터분포를 displot()으로 그렸다. Target 열은 20을 중신으로 정규분포 형태를 보이며, 최대값에 해당하는 50에 많은 데이터가 분포되어 있는 특이점을 보인다.
3. 데이터 전처리
3-1. 피처 스케일링
각 피처(열)의 데이터 크기에 따른 상대적 영향력의 차이를 제거하기 위해, 피처의 크기를 비슷한 수준으로 맞춰주는 작업이 필요하다. 이 과정을 피처 스케일링(Feature Scaling)이라고 한다.
from sklearn.preprocessing import MinMaxScaler scaler=MinMaxScaler() df_scaled=df.iloc[:, :-1] #마지막열임을 나타내는 -1은 포함하지 않음 scaler.fit(df_scaled) df_scaled=scaler.transform(df_scaled) #스케일링 변환된 값을 데이터프레임에 반영 df.iloc[:, :-1]=df_scaled[:, :] df.head()
결과창
위는 사이킷런의 MinMaxScaler를 활용한 정규화방법이다. 목표변수 Target을 제외한 나머지 13개 열의 데이터를 iloc 인덱서로 추출한다. 이 데이터를 MinMaxScaler 인스턴스 객체에 fit()으로 각 열의 데이터를 최소값 0, 최대값 1 사이로 변환하는 식을 학습한다. transform()을 사용하면 학습한 변환식을 실제로 적용해 데이터를 정규화 변환한다.
※iloc 인덱서 짚고 넘어가기※
loc인덱서는 인덱스 이름을 사용하지만, iloc 인덱서는 원소의 순서를 나타내는 정수 인덱스(0, 1, 2, …)를 사용한다. 즉, iloc 인덱서는 행과 열의 위치 순서만 골한다. loc 인덱서는 범위의 끝을 포함하지만, iloc 인덱서는 포함하지 않는다.
3-2. 학습 데이터와 테스트 데이터 분할
#학습데이터와 테스트데이터 분할 from sklearn.model_selection import train_test_split x_data=df.loc[:, [‘LSTAT’, ‘RM’]] y_data=df.loc[:, ‘Target’] x_train, x_test, y_train, y_test=train_test_split(x_data, y_data, test_size=0.2, shuffle=True, random_state=12) print(x_train.shape, y_train.shape) print(x_test.shape, y_test.shape)
결과창
Target과 상관 계수가 가장 큰 LSTAT와 RM을 학습데이터 x_data로 선택한다. 그리고 506개의 주택 샘플 중 20%를 모델 평가에 사용한다. train_test_split()의 test_size 옵션에 0.2(20%)를 입력하면, 404개의 학습데이터 x_train, y_train과 102개의 테스트 데이터 x_test, y_test로 분할된다.
4. 베이스라인 모델-선형 회귀
#선형 회귀 모형 from sklearn.linear_model import LinearRegression lr=LinearRegression() lr.fit(x_train, y_train) print(“회귀계수(기울기):”, np.round(lr.coef_, 1)) #np: numpy, coef_: 피처에 대한 회귀 계수 값 print(“상수항(절편):”, np.round(lr.intercept_, 1)) #intercept_: 상수항(절편) 값
결과창
선형 회귀 모델의 예측력은 꽤 좋다. LinearRegression 클래스 객체를 생성하고, fit 메소드에 학습데이터인 x_train. y_train을 입력하면 선형 회귀식을 찾는다.
선형 회귀 모델의 coef_ 속성으로부터 각 피처에 대한 회귀 계수 값을 얻고 intercept_ 속성에서 상수항(절편)값을 얻는다. 이를 통해 LSTAT에 대한 회귀 계수는 -23.2이고, RM에 대한 회귀 계수는 25.4 임을 알 수 있다.
#예측값 저장 y_test_pred=lr.predict(x_test) #예측값과 실제값의 분포 plt.figure(figsize=(10, 5)) #표 크기 지정 plt.scatter(x_test[‘LSTAT’], y_test, label=’y_test’) #파란점, 실제값 plt.scatter(x_test[‘LSTAT’], y_test_pred, c=’r’, label=’y_pred’) #빨간점, 예측값 plt.legend(loc=’best’) #범례(오른쪽 상단 박스)가 표시되는 위치 지정 plt.show()
결과창
예측값(y_test_pred)와 실제값(y_test)의 분포를 확인해보았다.
y_test_pred: 목표변수인 Target에 대한 예측값 (predict 함수에 테스트 데이터 x_test 입력)
맷플롯립의 scatter 함수를 이용해보았다. x축 값과 y축 값을 순서대로 입력한 뒤, 범례에 표시할 값을 lable 옵션에 지정했다. (-c : 색상 지정 옵션)
legend(): 범례를 표시하는 명령 (loc 옵션: 범례가 표시되는 위치를 지정, best/right/left 등)
5. 모델 성능 평가
예측값과 실제값의 오차는 꽤 있는 편이다.
잔차(residuals): 실제값(정답)과 예측값의 차이로, 값이 작을 수록 모델의 성능이 좋다.
모델 성능을 평가할 때에는 수치화된 성능 지표를 사용한다. 회귀모델의 성능을 평가하는 지표는 MAE, MSE, RMSE 등이 있다. 사이킷런의 metrics 모듈에는 다양한 성능 평가 지표가 정의 되어 있다.
구분 설명 MAE(Mean Absolute Error) 실제값과 예측값의 차이
잔차의 절대값을 평균한 값 MSE(Mean Squared Error) 실제값과 예측값의 차이
잔차의 제곱을 평균한 값 RMSE(Root Mean Squared Error) MSE의 제곱근
#성능 평가 from sklearn.metrics import mean_squared_error y_train_pred=lr.predict(x_train) train_mse=mean_squared_error(y_train, y_train_pred) #훈련 데이터의 평가 점수 print(“Train MSE:%.4f” % train_mse) test_mse=mean_squared_error(y_test, y_test_pred) print(“Test MSE:%.4f” % test_mse)
결과창
mean_squared_error(): 테스트오차(Test MSE)를 계산하는 함수
평가 지표 함수에 테스트 데이터의 실제값(y_test)와 예측값(y_test_pred)를 입력한다. 비교를 위해 훈련 데이터의 평가 점수인 Train MSE도 계산했다.
결과를 보면 Train MSE는 30.8, Test MSE는 29.5의 결과가 나왔다.
5-2. 보스턴 주택 가격 예측 || LinearRegression
728×90
반응형
import numpy as np import matplotlib.pyplot as plt import pandas as pd import seaborn as sns from scipy import stats from sklearn.datasets import load_boston %matplotlib inline # boston 데이타셋 로드 boston = load_boston() # boston 데이타셋 DataFrame 변환 bostonDF = pd.DataFrame(boston.data , columns = boston.feature_names) # boston dataset의 target array는 주택 가격임. 이를 PRICE 컬럼으로 DataFrame에 추가함. bostonDF[‘PRICE’] = boston.target print(‘Boston 데이타셋 크기 :’,bostonDF.shape) bostonDF.head() # Boston 데이타셋 크기 : (506, 14) CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX PTRATIO B LSTAT PRICE 0 0.00632 18.0 2.31 0.0 0.538 6.575 65.2 4.0900 1.0 296.0 15.3 396.90 4.98 24.0 1 0.02731 0.0 7.07 0.0 0.469 6.421 78.9 4.9671 2.0 242.0 17.8 396.90 9.14 21.6 2 0.02729 0.0 7.07 0.0 0.469 7.185 61.1 4.9671 2.0 242.0 17.8 392.83 4.03 34.7 3 0.03237 0.0 2.18 0.0 0.458 6.998 45.8 6.0622 3.0 222.0 18.7 394.63 2.94 33.4 4 0.06905 0.0 2.18 0.0 0.458 7.147 54.2 6.0622 3.0 222.0 18.7 396.90 5.33 36.2
CRIM: 지역별 범죄 발생률
ZN: 25,000평방피트를 초과하는 거주 지역의 비율
NDUS: 비상업 지역 넓이 비율
CHAS: 찰스강에 대한 더미 변수(강의 경계에 위치한 경우는 1, 아니면 0)
NOX: 일산화질소 농도
RM: 거주할 수 있는 방 개수
AGE: 1940년 이전에 건축된 소유 주택의 비율
DIS: 5개 주요 고용센터까지의 가중 거리
RAD: 고속도로 접근 용이도
TAX: 10,000달러당 재산세율
PTRATIO: 지역의 교사와 학생 수 비율
B: 지역의 흑인 거주 비율
LSTAT: 하위 계층의 비율
MEDV: 본인 소유의 주택 가격(중앙값)
각 컬럼별로 주택가격에 미치는 영향도를 조사
# 2개의 행과 4개의 열을 가진 subplots를 이용. axs는 4×2개의 ax를 가짐. fig, axs = plt.subplots(figsize=(16,8) , ncols=4 , nrows=2) lm_features = [‘RM’,’ZN’,’INDUS’,’NOX’,’AGE’,’PTRATIO’,’LSTAT’,’RAD’] for i , feature in enumerate(lm_features): row = int(i/4) col = i%4 # 시본의 regplot을 이용해 산점도와 선형 회귀 직선을 함께 표현 sns.regplot(x=feature , y=’PRICE’,data=bostonDF , ax=axs[row][col])
학습과 테스트 데이터 세트로 분리하고 학습/예측/평가 수행
from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error , r2_score y_target = bostonDF[‘PRICE’] X_data = bostonDF.drop([‘PRICE’],axis=1,inplace=False) X_train , X_test , y_train , y_test = train_test_split(X_data , y_target ,test_size=0.3, random_state=156) # Linear Regression OLS로 학습/예측/평가 수행. lr = LinearRegression() lr.fit(X_train ,y_train ) y_preds = lr.predict(X_test) mse = mean_squared_error(y_test, y_preds) rmse = np.sqrt(mse) print(‘MSE : {0:.3f} , RMSE : {1:.3F}’.format(mse , rmse)) print(‘Variance score : {0:.3f}’.format(r2_score(y_test, y_preds))) # MSE : 17.297 , RMSE : 4.159 # Variance score : 0.757
print(‘절편 값:’,lr.intercept_) print(‘회귀 계수값:’, np.round(lr.coef_, 1)) # 절편 값: 40.995595172164315 # 회귀 계수값: [ -0.1 0.1 0. 3. -19.8 3.4 0. -1.7 0.4 -0. -0.9 0. -0.6]
# 회귀 계수를 큰 값 순으로 정렬하기 위해 Series로 생성. index가 컬럼명에 유의 coeff = pd.Series(data=np.round(lr.coef_, 1), index=X_data.columns ) coeff.sort_values(ascending=False) RM 3.4 CHAS 3.0 RAD 0.4 ZN 0.1 B 0.0 TAX -0.0 AGE 0.0 INDUS 0.0 CRIM -0.1 LSTAT -0.6 PTRATIO -0.9 DIS -1.7 NOX -19.8 dtype: float64
from sklearn.model_selection import cross_val_score y_target = bostonDF[‘PRICE’] X_data = bostonDF.drop([‘PRICE’],axis=1,inplace=False) lr = LinearRegression() # cross_val_score( )로 5 Fold 셋으로 MSE 를 구한 뒤 이를 기반으로 다시 RMSE 구함. // 회귀는 오차 값이 작을수록 좋은 것 neg_mse_scores = cross_val_score(lr, X_data, y_target, scoring=”neg_mean_squared_error”, cv = 5) rmse_scores = np.sqrt(-1 * neg_mse_scores) avg_rmse = np.mean(rmse_scores) # cross_val_score(scoring=”neg_mean_squared_error”)로 반환된 값은 모두 음수 print(‘ 5 folds 의 개별 Negative MSE scores: ‘, np.round(neg_mse_scores, 2)) print(‘ 5 folds 의 개별 RMSE scores : ‘, np.round(rmse_scores, 2)) print(‘ 5 folds 의 평균 RMSE : {0:.3f} ‘.format(avg_rmse)) # 5 folds 의 개별 Negative MSE scores: [-12.46 -26.05 -33.07 -80.76 -33.31] # 5 folds 의 개별 RMSE scores : [3.53 5.1 5.75 8.99 5.77] # 5 folds 의 평균 RMSE : 5.829
반응형
[Kaggle] House Prices Prediction : 보스턴 주택가격 예측 – 1. EDA & Feature Engineering
728×90
반응형
[파이썬 라이브러리를 활용한 머신러닝] 책을 공부하던 때 처음 접해보았던머신러닝 회귀 문제의 대표문제, Kaggle의 House Prices 예측 데이터셋을 다시 한번 살펴보는 시간을 가졌다.
파이썬 라이브러리를 활용한 머신러닝
데이터셋은 Kaggle에서 다운로드 가능하다.
www.kaggle.com/c/house-prices-advanced-regression-techniques
처음 공부 할 당시에는 tensorflow를 활용한 선형회귀만을 다루었는데, 이번에는 앙상블 기법을 통해 접근해보았다.
앙상블 기법을 활용한 모델링 및 예측 모델은 Kaggle의 munmun2004님의 커널을 참고했다.
www.kaggle.com/munmun2004/house-prices-for-begginers
1. 데이터 확인
데이터는 주택가격을 설명하는 총 49개의 변수를 가지고 있으며 1460개의 훈련데이터, 1459개의 테스트 데이터가 제공된다.
각 변수에 대한 설명은 Dataset에 함께 있는 data_description.txt를 보면 알 수 있다.
주요 변수를 몇 개만 설명하자면,
변수이름 내용 MSSubClass 주거유형 LotFrontage 주택에 연결된 거리의 직선 피트 Neighborhood 미국 물리적 주소위치 OverallQual 집의 전체적인 재료 및 마감재 평가 OveallCond 집의 전반적인 상태평가 ExterQual 외부 소재 품질 평가 BsmtQual 지하실 높이 평가 Heating 난방의 종류 1stFlrSF 1층의 평방 피트 SalePrice 주택 가격
1-1. 데이터 불러오기
데이터를 불러오기 전 필요한 라이브러리들을 import하고, pandas를 통해 데이터를 불러온다.
import numpy as np import pandas as pd import tensorflow as tf # 선형회귀 때 사용 import matplotlib from matplotlib import pyplot as plt import seaborn as sns sns.set() %matplotlib inline # 데이터 불러오기 train = pd.read_csv(‘train.csv’) test = pd.read_csv(‘test.csv’)
1-2. 데이터 확인
데이터를 불러왔다면, 데이터가 어떻게 생겼는지 알아본다.
train.head()
train.shape >>> (1460, 81) test.shape >>> (1459, 80) train.columns >>> Index([‘Id’, ‘MSSubClass’, ‘MSZoning’, ‘LotFrontage’, ‘LotArea’, ‘Street’, ‘Alley’, ‘LotShape’, ‘LandContour’, ‘Utilities’, ‘LotConfig’, ‘LandSlope’, ‘Neighborhood’, ‘Condition1’, ‘Condition2’, ‘BldgType’, ‘HouseStyle’, ‘OverallQual’, ‘OverallCond’, ‘YearBuilt’, ‘YearRemodAdd’, ‘RoofStyle’, ‘RoofMatl’, ‘Exterior1st’, ‘Exterior2nd’, ‘MasVnrType’, ‘MasVnrArea’, ‘ExterQual’, ‘ExterCond’, ‘Foundation’, ‘BsmtQual’, ‘BsmtCond’, ‘BsmtExposure’, ‘BsmtFinType1’, ‘BsmtFinSF1’, ‘BsmtFinType2’, ‘BsmtFinSF2’, ‘BsmtUnfSF’, ‘TotalBsmtSF’, ‘Heating’, ‘HeatingQC’, ‘CentralAir’, ‘Electrical’, ‘1stFlrSF’, ‘2ndFlrSF’, ‘LowQualFinSF’, ‘GrLivArea’, ‘BsmtFullBath’, ‘BsmtHalfBath’, ‘FullBath’, ‘HalfBath’, ‘BedroomAbvGr’, ‘KitchenAbvGr’, ‘KitchenQual’, ‘TotRmsAbvGrd’, ‘Functional’, ‘Fireplaces’, ‘FireplaceQu’, ‘GarageType’, ‘GarageYrBlt’, ‘GarageFinish’, ‘GarageCars’, ‘GarageArea’, ‘GarageQual’, ‘GarageCond’, ‘PavedDrive’, ‘WoodDeckSF’, ‘OpenPorchSF’, ‘EnclosedPorch’, ‘3SsnPorch’, ‘ScreenPorch’, ‘PoolArea’, ‘PoolQC’, ‘Fence’, ‘MiscFeature’, ‘MiscVal’, ‘MoSold’, ‘YrSold’, ‘SaleType’, ‘SaleCondition’, ‘SalePrice’], dtype=’object’)
데이터가 전체적으로 어떻게 이루어져 있는지를 먼저 파악해야, EDA와 Feature handling을 할 때 어떻게 해야 할 지 알 수 있다.
2. EDA & Feature Engineering
EDA (Exploratory Data Analysis)는 데이터를 다양한 각도에서 관찰하고 이해하는 과정으로,
데이터의 문제점이나 패턴을 발견할 수 있다.
문제점과 패턴을 발견하는 것은 머신러닝 모델학습에 큰 영향을 미치므로,
머신러닝 학습에 있어 가장 중요한 부분이라고 할 수 있다.
2-1. 이상치 제거 (Outlier remove)
fig, ax = plt.subplots() ax.scatter(x = train[‘GrLivArea’], y = train[‘SalePrice’]) plt.ylabel(‘SalePrice’) plt.xlabel(‘GrLivArea’) plt.show()
matplotlib을 통해 데이터를 시각화하였다.
데이터의 범위에서 벗어난 것들이 보이는데, 이를 제거해 주어야 한다.
이상치를 제거해줄 때는 학습대상인 train data에만 적용해 주어야 한다!
train = train[train[‘GrLivArea’]<4000] train = train[train['GarageArea']<1200] train = train[train['1stFlrSF']<2700] train = train[train['2ndFlrSF']<1700] train = train[train['TotalBsmtSF']<3000] 이상치의 기준은 사람마다 다를 수 있다. 너무 많이 제거해도 좋지않고, 너무 제거하지 않아도 좋지 않으므로 적절하게 지워주는 것이 좋다. 2-2. 상관관계 분석 (히트맵) target값인 SalePrice와 각 특징들 간 상관계수를 뽑아내어 히트맵을 그린다. 이를 통해 각 특징들이 주택가격과 얼마나 강한 관련이 있는지 알아낼 수 있다. 또한, SalePrice가 아닌 각 변수들 간의 상관관계가 높으면, 다중공산성 문제가 발생할 수 있기에 유심히 봐준다. # 상관계수 corrmat = train.corr() corr_columns = corrmat.index[abs(corrmat["SalePrice"])>=0.4] # 상관계수 0.4 이상만 포함 corr_columns >>> Index([‘OverallQual’, ‘YearBuilt’, ‘YearRemodAdd’, ‘MasVnrArea’, ‘TotalBsmtSF’, ‘1stFlrSF’, ‘GrLivArea’, ‘FullBath’, ‘TotRmsAbvGrd’, ‘Fireplaces’, ‘GarageYrBlt’, ‘GarageCars’, ‘GarageArea’, ‘SalePrice’], dtype=’object’) # 히트맵 plt.figure(figsize=(13,10)) heatmap = sns.heatmap(train[corr_columns].corr(),annot=True,cmap=”RdYlGn”)
2-3. 데이터 합쳐주기 (concat)
이상치 제거를 제외한 분포 정규화나 결측치 처리는 한번에 해주어야 하기 때문에
train data와 test data를 concat을 통해 합쳐준다.
train data에는 test data에 없는 SalePrice 칼럼이 있기 때문에 이를 지워주고 concat 시켜준다.
df_train = train.drop([‘SalePrice’]) df = pd.concat((df_train,test))
2-4. target의 쏠림 현상 파악
target값인 SalePrice의 데이터 분포를 살펴보자
sns.distplot(train[‘SalePrice’])
한 쪽으로 쏠린모양이 보인다. 이런 경우 학습에 영향을 줄 수 있기 때문에
로그 변환을 통해 정규성을 띄게 바꾸어준다.
train[‘SalePrice’] = np.log1p(train[“SalePrice”]) sns.distplot(train[‘SalePrice’])
또한, 이렇게 변환한 값을 price라는 변수에 저장해준다.
price = train[‘SalePrice’]
2-5. 결측치(null) 확인 및 처리
결측치는 함수적용도 안될 뿐더러 분석결과를 왜곡시키는 값이므로 새로운 값으로 대체해주어야 한다.
null = (df.isna().sum() / len(df) * 100) #백분율로 계산 null = null.drop(null[null == 0].index).sort_values(ascending=False) null >> PoolQC 99.724613 MiscFeature 96.419966 Alley 93.184165 Fence 80.378657 FireplaceQu 48.846816 LotFrontage 16.626506 GarageFinish 5.473322 GarageYrBlt 5.473322 GarageQual 5.473322 GarageCond 5.473322 GarageType 5.404475 BsmtExposure 2.822719 BsmtCond 2.822719 BsmtQual 2.788296 BsmtFinType1 2.719449 BsmtFinType2 2.719449 MasVnrType 0.826162 MasVnrArea 0.791738 MSZoning 0.137694 BsmtFullBath 0.068847 BsmtHalfBath 0.068847 Utilities 0.068847 Functional 0.068847 Exterior2nd 0.034423 Exterior1st 0.034423 SaleType 0.034423 BsmtFinSF1 0.034423 BsmtFinSF2 0.034423 BsmtUnfSF 0.034423 Electrical 0.034423 KitchenQual 0.034423 GarageCars 0.034423 GarageArea 0.034423 TotalBsmtSF 0.034423 dtype: float64
총 34개의 컬럼에 결측치가 발견되었다.
결측치 처리 또한 데이터를 다루는 사람의 마음대로이다.
결측치 전체를 0으로 만들어 줄 수 있으나, 세세하게 다루어주는 것이 학습에는 더 좋다.
– 수치형데이터의 경우에는 0, 범주형데이터의 경우에는 ‘None’으로 대체했다.
– 유형을 말해주는 특징 (ex. 지붕 재료, 사용가능한 자원의 종류 등)의 경우에는 제일 빈번한 값으로 대체했다.
개수가 많으므로 시각화는 생략했다.
# PoolQC : 수영장 품질, nan = 존재X (99%) df[‘PoolQC’] = df[‘PoolQC’].fillna(‘None’) # MiscFeature : 기타기능, nan = 존재X (96%) df[‘MiscFeature’] = df[‘MiscFeature’].fillna(‘None’) # Alley : 골목 접근 유형, nan = 골목 접근 금지 df[‘Alley’] = df[‘Alley’].fillna(‘None’) # Fence : 울타리 여부, nan = 울타리 없음 df[‘Fence’] = df[‘Fence’].fillna(‘None’) # FireplaceQu : 벽난로 품질, nan = 벽난로 없음 df[‘FireplaceQu’] = df[‘FireplaceQu’].fillna(‘None’) # LotFrontage : 부동산과 연결된 거리의 직선 피트, nan = 연결된 거리 없음 df[‘LotFrontage’] = df[‘LotFrontage’].fillna(0) # GarageFinish : 차고 마감재 품질, nan = 차고 없음 df[‘GarageFinish’] = df[‘GarageFinish’].fillna(‘None’) # GarageYrBlt : 차고 제작연도, nan = 차고 없음 df[‘GarageYrBlt’] = df[‘GarageYrBlt’].fillna(0) # GarageQual : 차고 품질, nan = 차고 없음 df[‘GarageQual’] = df[‘GarageQual’].fillna(‘None’) # GarageCond : 차고 상태, nan = 차고 없음 df[‘GarageCond’] = df[‘GarageCond’].fillna(‘None’) # GarageType : 차고 유형, nan = 차고 없음 df[‘GarageType’] = df[‘GarageType’].fillna(‘None’) # 지하실 관련 카테고리형 데이터, nan = 지하실 없음 # BsmtExposure, BsmtCond, BsmtQual, BsmtFinType1, BsmtFinType2 for data in [‘BsmtExposure’, ‘BsmtCond’, ‘BsmtQual’, ‘BsmtFinType1’, ‘BsmtFinType2’]: df[data] = df[data].fillna(‘None’) # 지하실 관련 수치형 데이터, nan = 지하실 없음 # BsmtFullBath, BsmtHalfBath, BsmtFinSF1, BsmtFinSF2, BsmtUnfSF, TotalBsmtSF for data in [‘BsmtFullBath’, ‘BsmtHalfBath’, ‘BsmtFinSF1’, ‘BsmtFinSF2’, ‘BsmtUnfSF’, ‘TotalBsmtSF’]: df[data] = df[data].fillna(0) # MasVnrType : 석조베니어 형태, nan = 베니어 없음 df[‘MasVnrType’] = df[‘MasVnrType’].fillna(‘None’) # MasVnrArea : 석조베니어 공간, nan = 베니어 없음 df[‘MasVnrArea’] = df[‘MasVnrArea’].fillna(0) # MSZoning : RL이 제일 흔한 값이므로 결측치 RL로 변경 df[‘MSZoning’] = df[‘MSZoning’].fillna(‘RL’) # Utilities : AllPub이 가장 흔한 값이므로 결측치 AllPub으로 변경 df[‘Utilities’] = df[‘Utilities’].fillna(‘AllPub’) # Functional : 홈 기능, 가장 일반적인 Typ로 변경 df[“Functional”] = df[“Functional”].fillna(“Typ”) # Exterior2nd :집 외부 덮개 (소재가 2개 이상인 경우), nan = 소재 1개만 사용 df[‘Exterior2nd’] = df[‘Exterior2nd’].fillna(‘None’) df[‘Exterior1st’] = df[‘Exterior1st’].fillna(‘VinylSd’) # Electrical : 전기시스템, ‘SBrkr’이 제일 흔한 값이므로 변경 df[‘Electrical’] = df[‘Electrical’].fillna(‘SBrkr’) # KitchenQual : 주방 품질, ‘TA’가 가장 흔한 값이므로 변경 df[‘KitchenQual’] = df[‘KitchenQual’].fillna(‘TA’) # GarageCars, GarageArea : 차고의 차 개수와 차고넓이, nan = 차고없음 df[‘GarageCars’] = df[‘GarageCars’].fillna(0) df[‘GarageArea’] = df[‘GarageArea’].fillna(0) # SaleType : 판매 유형, 가장 흔한 값인 ‘WD’로 변경 df[‘SaleType’] = df[‘SaleType’].fillna(‘WD’)
34개 칼럼의 모든 결측치를 제거했다.
2-6. 수치형데이터와 범주형데이터 분리하여 처리
기본적으로 컴퓨터는 숫자만 인식할 수 있기때문에, 범주형의 수치화가 필요하다.
또한, 수치형데이터도 한쪽으로 쏠려있는 경우가 있을 수 있기 때문에, 조정이 필요하다.
이를 위해 수치형데이터와 범주형데이터를 나누어 따로 처리해준다.
그에 앞서 수치형 특징이 아닌데 수치형으로 표시되어 있거나, 범주형 특징이 아닌데 범주형데이터로 표시되어 있는 칼럼들을
astype()을 통해 형 변환 시켜준다.
# 판매월과 판매연도가 수치형으로 되어있어 카테고리형(str)로 타입 변경 df[‘YrSold’] = df[‘YrSold’].astype(str) df[‘MoSold’] = df[‘MoSold’].astype(str) # 주거유형이 수치형으로 되어있어 카테고리형으로 타입변경 df[‘MSSubClass’] = df[‘MSSubClass’].astype(str)
# 수치형데이터와 범주형데이터 분리 obj_df = df.select_dtypes(include=’object’) num_df = df.select_dtypes(exclude=’object’)
– 범주형 데이터 처리 (라벨인코딩)
범주형데이터를 수치화시켜주는 인코딩 기법에는 크게 두 가지가 있다.
1. LabelEncoding
2. One-hot Encoding
라벨인코딩의 경우, 해당 특징을 나타내는 데이터에 등급 또는 순서가 없을 경우에는 모델에 잘못 반영될 수 있다.
그렇기 때문에 라벨인코딩에는 등급, 시설의 유무 여부를 나타내는 칼럼에만 적용시켜주었다.
# 등급이 나누어지거나, 순서가 없는 경우 모델에 잘못 반영될 수 있기 때문에 등급, 여부 칼럼만 포함 label_obj_list = [‘Street’, ‘Alley’,’ExterQual’, ‘ExterCond’,’BsmtCond’,’HeatingQC’, ‘CentralAir’, ‘KitchenQual’, ‘FireplaceQu’,’GarageFinish’, ‘GarageQual’, ‘GarageCond’, ‘PavedDrive’, ‘PoolQC’, ‘Fence’, ‘MoSold’, ‘YrSold’,’SaleCondition’] # 카테고리형 칼럼을 라벨인코딩 (수치화, 문자를 0부터 시작하는 정수형 숫자로 바꾸어줌) from sklearn.preprocessing import LabelEncoder # encoder = LabelEncoder() for obj in label_obj_list: encoder = LabelEncoder() encoder.fit(list(df[obj].values)) df[obj] = encoder.transform(list(df[obj].values))
– 수치형 데이터 처리 (왜도)
위에서 처리해주었던 SalePrice와 같이 한쪽으로 쏠림이 있는 경우 왜도(비대칭도)값이 높게 나타난다.
이를 통해 한쪽으로 쏠려있는 데이터들을 로그변환을 취하여 준다.
왜도(skewness)값이 크면 클수록 데이터가 한 쪽에 많이 쏠려 있으며,
왼 쪽에 많이 쏠려있을 경우 양수값을, 오른쪽으로 많이 쏠려있으면 음수값을 가진다.
num_features = df.dtypes[df.dtypes != “object”].index from scipy.stats import skew skewness = df[num_features].apply(lambda x: skew(x.dropna())).sort_values(ascending=False) high_skewness = skewness[abs(skewness) > 1] # 왜도 값이 1 이상인 칼럼만 채택 skew_feats = high_skewness.index print(high_skewness) >>> MiscVal 21.904223 PoolArea 18.669449 LotArea 13.245250 LowQualFinSF 12.059175 3SsnPorch 11.348142 KitchenAbvGr 4.290310 BsmtFinSF2 4.166631 EnclosedPorch 4.017907 ScreenPorch 3.946659 BsmtHalfBath 3.934869 MasVnrArea 2.551011 OpenPorchSF 2.528255 WoodDeckSF 1.856938 1stFlrSF 1.212917 KitchenQual -1.454760 ExterQual -1.802948 Fence -1.988541 ExterCond -2.499174 SaleCondition -2.797852 BsmtCond -2.853376 PavedDrive -2.969670 GarageQual -3.064592 CentralAir -3.448736 GarageCond -3.585278 GarageYrBlt -3.895128 Street -16.158425 PoolQC -22.944518 dtype: float64
# 로그 변환 df[skew_feats] = np.log1p(df[skew_feats])
2-7. 파생 변수
위의 칼럼들의 내용과 특징들을 이용하여 주택가격에 대한 설명을 보충해줄 수 있는 변수들을 추가로 생성해준다.
df[‘TotalFlrSF’] = (df[‘1stFlrSF’] + df[‘2ndFlrSF’] + df[‘TotalBsmtSF’]) # 부동산의 총 제곱피트 df[‘TotalBath’] = (df[‘FullBath’] + df[‘HalfBath’] + df[‘BsmtFullBath’] + df[‘BsmtHalfBath’]) # 화장실 df[‘RemodorNot’] = np.where(df[‘YearBuilt’] == df[‘YearRemodAdd’], 0, 1) # 리모델링 여부 df[‘PoolorNot’] = np.where(df[‘PoolArea’] > 0, 1, 0) # 수영장 여부 df[‘GarageorNot’] = np.where(df[‘GarageArea’] > 0, 1, 0) # 차고 여부 df[‘BsmtorNot’] = np.where(df[‘TotalBsmtSF’] > 0, 1, 0) # 지하실 여부 df[‘FireplaceorNot’] = np.where(df[‘Fireplaces’] > 0, 1, 0) # 벽난로 여부
2-8. One-hot Encoding
위에서 인코딩 처리를 해주지 않은 칼럼들에 대해 변수 더미처리를 해준다.
# 원 – 핫 인코딩 (라벨인코딩 하지 않은 칼럼들) df = pd.get_dummies(df) df.shape >>> (2905, 271)
원핫인코딩을 통해 칼럼개수가 늘어난 것을 볼 수 있다.
728×90
반응형
So you have finished reading the 보스턴 주택 가격 예측 topic article, if you find this article useful, please share it. Thank you very much. See more: 딥러닝 보스턴 주택 가격 예측, 보스턴 주택 가격 예측 데이터, 파이썬 보스턴 주택 가격 예측, 보스턴 주택 가격 예측 선형 회귀, Kaggle 보스턴 주택 가격 예측, 캐글 주택 가격 예측, 파이썬 주택가격 예측, 머신러닝 보스턴 주택 가격 예측