728x90
반응형
출처 : https://book.naver.com/bookdb/book_detail.nhn?bid=21488029
*해당 글은 학습을 목적으로 위의 도서 내용 중 일부 내용만을 요약하여 작성한 포스팅입니다.
상세 내용 및 전체 내용 확인을 원하신다면 도서 구매를 추천드립니다.
분석 데이터 확인
- 분석 데이터 기술통계 확인
import pandas as pd
data = pd.read_csv('/house_raw.csv', encoding='utf-8')
data.describe()
- 히스토그램을 통한 시각화로 확인
%matplotlib inline
data.hist(bins=50, figsize=(20, 15))
- 히스토그램을 통해 bedrooms, households, rooms에 이상치가 존재함을 확인할 수 있다.
- 해당 데이터를 그대로 사용하여 선형 회귀 적용 시 다음과 같은 결과가 나옴을 확인할 수 있다.
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.linear_model import LinearRegression
x = data[data.columns[0:5]]
y = data[["house_value"]]
X_train, X_test, Y_train, Y_test = train_test_split(x, y, random_state=42) # 7:3으로 분리
# 독립변수 정규화는 minmaxscalar 사용
scaler_minmax = MinMaxScaler()
scaler_minmax.fit(X_train)
X_train = scaler_minmax.transform(X_train)
X_test = scaler_minmax.transform(X_test)
# 선형 회귀 모델 구성
model = LinearRegression()
model.fit(X_train, Y_train)
model.predict(X_train)
print(model.score(X_train, Y_train))
model.predict(X_test)
print(model.score(X_test, Y_test))
- R-square (설명령)이 0.546으로 높지 않다.
- 해당 모델을 사용하여 결과를 확인해보면 -2.82라는 말도 안되는 결과가 출력된다.
- 이러한 현상의 방지를 위해서 이상치 제거 과정이 필요하다.
data_bedroom = data[data['bedrooms'] < 0.6]
data_bedroom['bedrooms'].hist(bins=100, figsize=(20, 15))
- 먼저 bedroom 변수의 분포를 확인한 결과 0.6 이상에서 큰 값들이 존재함으로 0.6 미만의 데이터의 분포만을 확인해본다.
data[data['bedrooms'] >= 0.6].value_counts().sum() #14
- 그리고 0.6 이상의 데이터는 14개로, 이 정도의 적은 데이터는 제거해도 전체 데이터에 큰 영향이 없으므로 제거한다.
data = data[data['bedrooms'] < 0.6]
- households, rooms도 같은 방식으로 갯수를 확인해보고 이상치가 많지 않다면 그냥 제거해도 무방하다.
data = data[(data['households'] < 10) &
(data['rooms'] < 20)]
- 이상치 제거를 통해 정제한 데이터를 히스토그램으로 확인해본다.
data.hist(bins=50, figsize=(20, 12))
- 모든 변수들이 정규분포와 비슷해졌다면 선형 회귀 모델을 적용하여 학습한다.
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.linear_model import LinearRegression
x = data[data.columns[0:5]]
y = data[["house_value"]]
X_train, X_test, Y_train, Y_test = train_test_split(x, y, random_state=42) # 7:3으로 분리
# 독립변수 정규화는 minmaxscalar 사용
scaler_minmax = MinMaxScaler()
scaler_minmax.fit(X_train)
X_train = scaler_minmax.transform(X_train)
X_test = scaler_minmax.transform(X_test)
# 선형 회귀 모델 구성
model = LinearRegression()
model.fit(X_train, Y_train)
# 훈련 데이터 정확도 확인
model.predict(X_train)
print('훈련 데이터 정확도 : ', model.score(X_train, Y_train))
# 테스트 데이터 정확도 확인
model.predict(X_test)
print('테슽 데이터 정확도 : ', model.score(X_test, Y_test))
- 정제한 데이터는 추후 활용을 위해 저장한다.
data.to_csv('/preprocessed_housing_price.csv', index=False)
728x90
반응형
'자격증 > 빅데이터 분석기사 (실기)' 카테고리의 다른 글
03_02. 회귀 (0) | 2022.06.04 |
---|---|
03_01. 분류 (0) | 2022.05.30 |
03_머신러닝 프로세스 (0) | 2022.05.30 |
02_데이터 탐색과 데이터 정제 (0) | 2022.05.30 |
01. 파이썬 기초 (0) | 2022.05.27 |