Working with real data
popular sites
1.
UCI Machine Learning Repository
2.
Find Open Datasets and Machine Learning Projects | Kaggle
3.
2.2
큰 그림 보기
데이터 : 캘리포니아 인구조사 데이터(인구, 중간소득, 중간주택가격 등)목표 : 구역의 중간 주택 가격 예측하기
2.2.1. 문제 정의Q1. 비즈니스의 목적이 무엇인가?
2.3.데이터 가져오기
jupyter 노트북 사용하기 시작한다.housing.tgz라는 single file을 다운로드 받은 것임.housing.csv로 train
tgz를 압축 풀기하기 위해 함수를 하나 만들게 된다.1) datasets/housing directory를 만들고2) housing.tgz file을 다운로드 받고3) 안의 내용물을 추출하여 저장한다.
import os
import tarfile
import urllib
DOWNLOAD_ROOT = "https://raw.githubusercontent.com/ageron/handson-ml2/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):
os.makedirs(housing_path, exist_ok=True)
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)
housing_tgz.close()
fetch_housing_data()
그런 뒤에 pandas를 불러와서데이터를 읽어들인다.
import pandas as pd
def load_housing_data(housing_path=HOUSING_PATH):
csv_path = os.path.join(housing_path, "housing.csv")
return pd.read_csv(csv_path)
data.head() 혹은 .info() 함수를 이용하면 데이터의 구조를 파악할 수 있다.
housing = load_housing_data()
housing.head()
value_counts() 메소드를 이용하면ocean_proximity라는 특성을 어떻게 가지고 있는지 확인할 수 있다.
housing["ocean_proximity"].value_counts()
housing.describe() data plot using matplotlib.pyplot
%matplotlib inline
import matplotlib.pyplot as plt
housing.hist(bins=50, figsize=(20,15))
plt.show()
시각화를 통해feature scaling을 다루게 된다.
tail-heavy : extend to the right of the median
create a test set
import numpy as np
def split_train_text(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)
len(train_set)
len(test_set)
dataset에 ID 만들기위도와 경도 이용해서 만들기
housing_with_id["id"] = housing["longitude"] * 1000 + housing["latitude"]
train_set, test_set = split_train_test_by_id(housing_with_id, 0.2, "id")
scikit-learn의 train_test_split 함수를 이용하면데이터셋을 나눌 수 있다.표본의 대표성을 위해서stratified sampling을 고려하여야 한다.
housing["income_cat"] = pd.cut(housing["median_income"],
bins=[0., 1.5, 3.0, 4.5, 6., np.inf],
labels = [1,2,3,4,5])
housing["income_cat"].hist()
scikit-learn's stratifiedshufflesplit class를 이용해서 할 수 있음
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]
strat_test_set["income_cat"].value_counts() / len(strat_test_set)
output
3 0.350533 2 0.318798 4 0.176357 5 0.114583 1 0.039729 Name: income_cat, dtype: float64
2.4.
데이터 이해를 위한 탐색과 시각화
visualizing geographical data (using longitude & latitude)
housing = strat_train_set.copy()
housing.plot(kind="scatter", x="longitude", y="latitude")
housing.plot(kind="scatter", x="longitude", y="latitude", alpha=0.1)
jet - color map (option cmap)
housing.plot(kind="scatter", x="longitude", y="latitude", alpha=0.4,
s=housing["population"]/100, label="population", figsize=(10,7),
c="median_house_value", cmap=plt.get_cmap("jet"), colorbar=True,
)
plt.legend()
looking for correlations
피어슨 상관계수
corr_matrix=housing.corr()
corr_matrix["median_house_value"].sort_values(ascending=False)
'''아웃풋
median_house_value 1.000000
median_income 0.687160
total_rooms 0.135097
housing_median_age 0.114110
households 0.064506
total_bedrooms 0.047689
population -0.026920
longitude -0.047432
latitude -0.142724
Name: median_house_value, dtype: float64 '''
from pandas.plotting import scatter_matrix
attributes = ["median_house_value", "median_income", "total_rooms",
"housing_median_age"]
scatter_matrix(housing[attributes], figsize=(12,8))
위 그림에서는 median_income과 median_housing_value와의 상관관계가두드러지게 나타났다.
experimenting with attribute combinations
2.5.
머신러닝 알고리즘을 위한 데이터 준비
data cleaning
결측치 처리
handling text and categorical attributes
custom transformers
feature scaling
transformation pipelines
2.6.
모델 선택과 훈련
2.7.
모델 세부 튜닝
2.8.
론칭, 모니터링, 시스템 유지 보수
2.9.
직접 해보세요!
2.10.연습문제
<참고>
Geron, Aurelien. (2019). Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow. Sebastopol: O'Reilly Media, Incorporated.
'Data Science > AI' 카테고리의 다른 글
핸즈온 머신러닝 1~2장 흐름 정리 (0) | 2021.07.22 |
---|---|
BOAZ BIGDATA CONFERENCE 2021 / 빅데이터 연합동아리 14회 컨퍼런스 (0) | 2021.07.19 |
[정리] 머신러닝이란 무엇인가? 머신러닝의 종류, 활용법 (핸즈온 머신러닝 챕터 1 : 사이킷런과 텐서플로를 활용한 머신러닝, 딥러닝) (0) | 2021.07.15 |
[필기] Hands on machine learning - chapter 1. (0) | 2021.07.13 |
[7.13] Hands-on Machine Learning - preface (0) | 2021.07.13 |