아래 단계별 가이드를 보면서 하나씩 따라해 보세요. 각 단계마다 필요한 명령어나 코드를 복사해서 Jupyter Notebook 또는 터미널에 입력하면 됩니다.
python3 --version
ml 폴더)export ML_PATH="$HOME/ml" # 원하는 경로로 변경 가능
mkdir -p $ML_PATH
set ML_PATH=%USERPROFILE%\ml
mkdir %ML_PATH%
$env:ML_PATH = "$env:USERPROFILE\ml"
New-Item -ItemType Directory -Force -Path $env:ML_PATH
pip3 install --upgrade pip
pip3 install --user --upgrade virtualenv
cd $ML_PATH
virtualenv env
source env/bin/activate
cd $ML_PATH
python -m venv env
.\my_env\Scripts\activate
pip3 install --upgrade jupyter matplotlib numpy pandas scipy scikit-learn
jupyter notebook


웹 브라우저가 자동으로 열리면서 Notebook 대시보드가 나타납니다.
New 버튼을 클릭하고 Python 버전을 선택해 새 Notebook을 생성하세요.
새 Notebook의 이름을 상단의 “Untitled”를 클릭해서 Housing으로 변경하세요.
import os
import tarfile
from six.moves import urllib
DOWNLOAD_ROOT = "https://raw.githubusercontent.com/ageron/handson-ml/master/"
HOUSING_PATH = os.path.join("datasets", "housing")
HOUSING_URL = DOWNLOAD_ROOT + "datasets/housing/housing.tgz"
def fetch_housing_data(housing_url=HOUSING_URL, housing_path=HOUSING_PATH):
if not os.path.isdir(housing_path):
os.makedirs(housing_path)
tgz_path = os.path.join(housing_path, "housing.tgz")
urllib.request.urlretrieve(housing_url, tgz_path)
housing_tgz = tarfile.open(tgz_path)
housing_tgz.extractall(path=housing_path, filter=lambda tarinfo: tarinfo)
housing_tgz.close()
fetch_housing_data()
datasets/housing 디렉터리가 생성되고, 그 안에 housing.tgz 파일을 다운로드한 후 압축을 풀어 housing.csv 파일이 생성됩니다.
import pandas as pd
import os
def load_housing_data(housing_path=HOUSING_PATH):
csv_path = os.path.join(housing_path, "housing.csv")
return pd.read_csv(csv_path)
housing = load_housing_data()
housing.head()
longitude, latitude, housing_median_age, total_rooms, median_income 등이 있습니다.
housing.info()

housing.describe()

%matplotlib inline
import matplotlib.pyplot as plt
housing.hist(bins=50, figsize=(20,15))
plt.show()
이 코드를 실행하면 각 수치형 특성에 대한 히스토그램이 표시되어 데이터 분포를 한눈에 볼 수 있습니다.
%matplotlib inline:
아래 코드를 사용하면 전체 데이터의 20%를 테스트 셋으로 분리할 수 있습니다.
훈련셋은 모델이 패턴을 학습하는 데 사용되고,
테스트셋은 학습된 모델의 성능을 평가하기 위해 사용됩니다.
import numpy as np
def split_train_test(data, test_ratio):
# 전체 데이터 개수만큼의 인덱스를 무작위 순서로 섞습니다.
shuffled_indices = np.random.permutation(len(data))
# 테스트 셋의 크기를 계산합니다.
test_set_size = int(len(data) * test_ratio)
# 섞인 인덱스 중 앞부분은 테스트 셋, 뒷부분은 훈련 셋의 인덱스로 사용합니다.
test_indices = shuffled_indices[:test_set_size]
train_indices = shuffled_indices[test_set_size:]
return data.iloc[train_indices], data.iloc[test_indices]
train_set, test_set = split_train_test(housing, 0.2)
print(len(train_set), "train +", len(test_set), "test")

median_income)을 바탕으로 카테고리(income_cat)를 만들어 계층 샘플링을 할 수 있습니다.# 중간 소득을 1.5로 나누고 올림한 후, 5보다 큰 값은 5로 변경합니다.
housing["income_cat"] = np.ceil(housing["median_income"] / 1.5)
housing["income_cat"].where(housing["income_cat"] < 5, 5.0, inplace=True)
from sklearn.model_selection import StratifiedShuffleSplit
split = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
for train_index, test_index in split.split(housing, housing["income_cat"]):
strat_train_set = housing.loc[train_index]
strat_test_set = housing.loc[test_index]
# 계층 샘플링 후에는 임시로 생성한 income_cat 특성을 삭제합니다.
for set_ in (strat_train_set, strat_test_set):
set_.drop("income_cat", axis=1, inplace=True)

이 경고는 DataFrame의 일부 값을 직접 수정할 때 원본에 제대로 반영되지 않을 수 있어 발생합니다. 해결 방법은 수정 결과를 재할당하는 것입니다.
inplace=True로 설정하면 수정된 결과를 새 객체로 반환하지 않고, 기존의 객체 자체를 변경합니다.
housing["income_cat"] = housing["income_cat"].where(housing["income_cat"] < 5, 5.0)
이 후 단계에서는 데이터를 분석하고, 전처리하며, 머신러닝 모델을 적용해 볼 수 있습니다.
Notebook 상에서 각 코드 셀을 실행하면서 결과를 확인해보고, 필요에 따라 각 명령어의 의미를 찾아보세요.
이 가이드를 따라 하면서 궁금한 점이나 문제가 생기면 언제든 질문해 주세요. 이제 한 단계씩 진행해 보세요!