California Housing Data
California Housing Dataset은
- California 지역의 주택 가격과 관련된 정보를 담고 있는
- Machine Learning 연습용 regression dataset임.
Boston Housing Data와 함께 주택 가격 예측 문제에서 자주 사용되던 dataset이나,
현재는 Boston Housing Data보다 California Housing Data가 더 많이 사용되는 편임.
Boston Housing Data는
오래된 dataset (1978)이며,
일부 feature가
인종적 편견과 관련된 문제를 가지고 있음.반면 California Housing Data는
sample 수가 더 많고,
비교적 더 현대적인 dataset (1990)이며,
regression model을 연습하기에 적합함.
2024.04.18 - [Python] - [DL] Dataset: Boston Housing Price
[DL] Dataset: Boston Housing Price
Boston Housing Data 1970년 대 보스턴 시의 주택가격 데이터으로California Housing Data 와 함께 기계학습의 연습용 데이터로 많이 애용됨. 현재 California Housing Data로 대체되는 추세임California Housing Data가 1990
ds31x.tistory.com
California Housing Dataset은 다음과 같은 특징을 가짐.
- California district 단위의 주택 관련 정보로 구성됨.
- target은 해당 district의 median house value임.
- 전체 sample 수는 20,640개임.
- input feature의 수는 8개임.
- target은 10만 달러 단위의 주택 가격임.
- scikit-learn의
fetch_california_housing()함수로 쉽게 얻을 수 있음.
Feature Description
California Housing Dataset에서 제공하는 feature는 다음과 같음.
| idx | Column Name | Desc. |
| 1 | MedInc | 해당 district의 median income (단위: 10,000 달러, 즉 값 1은 10,000달러를 의미함) |
| 2 | HouseAge | 해당 district의 주택 median age (단위: 년, 해당 지역 주택들의 중간 연식) |
| 3 | AveRooms | 가구당 평균 방 개수 (총 방 개수를 가구 수로 나눈 값) |
| 4 | AveBedrms | 가구당 평균 침실 개수 (총 침실 수를 가구 수로 나눈 값) |
| 5 | Population | 해당 district의 총 인구 수 |
| 6 | AveOccup | 가구당 평균 거주 인원 (총 인구를 가구 수로 나눈 값) |
| 7 | Latitude | 위도 (지리적 위치를 나타내며 북쪽으로 갈수록 값이 커짐) |
| 8 | Longitude | 경도 (지리적 위치를 나타내며 서쪽으로 갈수록 값이 작아짐) |
| 9 | MedHouseVal | median house value, target (단위: 10만 달러, 해당 지역 주택 가격의 중간값) |
- 여기서
MedHouseVal은 model이 예측해야 하는 label에 해당함. - 단위는 10만 달러임.
데이터 로딩
scikit-learn에서는
- California Housing Dataset 를 위해
sklearn.datasets.fetch_california_housing()함수를 제공함.
다음 code가 사용법을 보여줌:
from sklearn.datasets import fetch_california_housing
housing = fetch_california_housing()
기본적으로 fetch_california_housing()은 dataset을 Bunch 객체로 반환함.
Bunch객체는 dictionary와 비슷하게 사용할 수 있으며,- attribute 방식으로도 내부 데이터에 접근할 수 있음.
Bunch 객체의 주요 구성 요소
fetch_california_housing()으로 얻은 housing 객체는 주로 다음 속성들을 가짐.
| Attribute | Desc. |
data |
input data, shape은 (20640, 8) |
target |
label data, shape은 (20640,) |
feature_names |
feature 이름 목록 |
target_names |
target 이름 목록 |
DESCR |
dataset 설명 문자열 |
frame |
as_frame=True일 때 제공되는 pandas DataFrame |
다음 code로 shape을 확인할 수 있음:
print(housing.data.shape)
print(housing.target.shape)
출력은 다음과 같음:
(20640, 8)
(20640,)
housing.data는 20,640개의 sample과 8개의 feature를 가지는 input data임.housing.target은 각 sample에 대응하는 median house value임.
Feature 이름 및 Target 이름 확인
feature 이름은 feature_names attribute를 통해 확인할 수 있음:
print(housing.feature_names)
출력은 다음과 같음:
['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms',
'Population', 'AveOccup', 'Latitude', 'Longitude']
target 이름은 다음과 같이 확인할 수 있음:
print(housing.target_names)
출력은 다음과 같음:
['MedHouseVal']
NumPy Array로 사용하기
기본적으로 fetch_california_housing()은
input data와 target을 NumPy array 형태로 제공함:
x_raw = housing.data
y_raw = housing.target
print(type(x_raw))
print(type(y_raw))
print(x_raw.shape)
print(y_raw.shape)
출력 예시는 다음과 같음:
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
(20640, 8)
(20640,)
ML에서 일반적으로 model의 input은 2차원 array 형태를 가짐:
(n_samples, n_features)
반면 target은 각 sample마다 하나의 실수값을 가지며 다음의 값을 가짐:
y_raw.shape = (20640,)
참고: Pandas DataFrame으로 변환하기 (수동변환)
NumPy array만으로도 model 학습은 가능하지만,
- feature 이름과 함께 데이터를 확인하려면
- pandas의 DataFrame으로 변환하는 것이 편함.
import pandas as pd
from sklearn.datasets import fetch_california_housing
housing = fetch_california_housing()
x_raw = housing.data
y_raw = housing.target
features = housing.feature_names
target_name = housing.target_names[0]
df = pd.DataFrame(x_raw, columns=features)
df[target_name] = y_raw
df.head()
위의 코드를 통해 input features와 target을 하나의 DataFrame으로 합칠 수 있음.
다음을 통해 각 column의 dtype과 missing value 여부를 확인할 수 있음.
df.info()
2025.05.16 - [Python/pandas] - [ML] pandas.DataFrame 에서 EDA에 적합한 메서드 요약
[ML] pandas.DataFrame 에서 EDA에 적합한 메서드 요약
Pandas DataFrame에서 탐색적 데이터 분석(EDA)에 사용할 수 있는 주요 메서드들은 다음과 같음:2024.05.18 - [분류 전체보기] - [ML] Exploratory Data Analysis (EDA) [ML] Exploratory Data Analysis (EDA)Exploratory Data Analysis (
ds31x.tistory.com
as_frame=True 사용하기
fetch_california_housing()은
as_frame옵션을 제공하며,- 지정하지 않을 경우 기본값은
False임. - 이때
frame속성은None이며, 데이터는 NumPy array 형태로data와target에 각각 저장됨.
이 as_frame=True를 사용하면 처음부터 pandas DataFrame 형태로 dataset을 얻을 수 있음.
as_frame=True인 경우와 as_frame=False(default)인 경우를 나누어 설명하면 다음과 같음.
as_frame=True인 경우- scikit-learn에서 데이터를 pandas 형태로 제공함.
housing.data는 pandas DataFrame,housing.target은 pandas Series,housing.frame은 feature와 target이 모두 포함된 하나의 pandas DataFrame으로 제공됨.
- scikit-learn에서 데이터를 pandas 형태로 제공함.
as_frame=False인 경우 (기본값)
scikit-learn에서 데이터를 NumPy array 형태로 제공함.housing.data는 NumPy ndarray,housing.target도 NumPy ndarray이며,housing.frame은 제공되지 않음.
다음의 코드 확인:
from sklearn.datasets import fetch_california_housing
housing = fetch_california_housing(as_frame=True)
print(type(housing.data))
print(type(housing.target))
print(type(housing.frame))
출력 예시는 다음과 같음:
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.series.Series'>
<class 'pandas.core.frame.DataFrame'>
따라서 데이터를 살펴보는 단계에서는 as_frame=True를 사용하는 것이 편리함.
return_X_y=True 사용하기
return_X_y=True 옵션을 사용하면
Bunch객체가 아니라- input data와 target을 바로 tuple 형태로 받을 수 있음.
from sklearn.datasets import fetch_california_housing
x_raw, y_raw = fetch_california_housing(return_X_y=True)
print(x_raw.shape)
print(y_raw.shape)
출력은 다음과 같음:
(20640, 8)
(20640,)
참고: 시각화, 전처리 및 회귀모델 훈련
간단한 시각화
California Housing Dataset은
- 위도와 경도 정보를 포함하고 있으므로,
- 위치 기반으로 target 분포를 간단히 살펴볼 수 있음.
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing
housing = fetch_california_housing(as_frame=True)
df = housing.frame
plt.figure(figsize=(8, 6))
plt.scatter(
df["Longitude"],
df["Latitude"],
c=df["MedHouseVal"],
s=5,
alpha=0.5
)
plt.xlabel("Longitude")
plt.ylabel("Latitude")
plt.title("California Housing Data")
plt.colorbar(label="MedHouseVal")
plt.show()
이 code는
- 각 district를 위도와 경도에 따라 점으로 표시하고,
- 주택 가격인
MedHouseVal을 색으로 나타냄.

Train/Test Dataset 나누기
Machine Learning model을 학습하려면
- 전체 dataset을 training dataset과
- test dataset으로 나누는 것이 일반적임.
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
housing = fetch_california_housing()
x_raw = housing.data
y_raw = housing.target
x_train, x_test, y_train, y_test = train_test_split(
x_raw,
y_raw,
test_size=0.2,
random_state=42
)
print(x_train.shape)
print(x_test.shape)
print(y_train.shape)
print(y_test.shape)
출력 예시는 다음과 같음:
(16512, 8)
(4128, 8)
(16512,)
(4128,)
Feature Scaling 및 LinearRegression 모델 훈련
California Housing Dataset의 feature들은
서로 scale이 다름.
예를 들어,
MedInc는 소득 관련 값임.Population은 인구 수임.Latitude,Longitude는 위치 좌표임.AveRooms,AveBedrms는 평균 방 개수임.
이처럼 feature마다 값의 범위가 다르기 때문에,
일부 model에서는 feature scaling이 중요함.
예를 들면 다음과 같음:
LinearRegressionRidgeLassoSVRKNeighborsRegressor- Neural Network 기반 regression model
https://dsaint31.tistory.com/720
[ML] Feature Scaling
Feature ScalingML에서 feature scaling이란 다음을 의미함.input data의 각 feature들의 값이 일정한 범위(a consistent range)나 표준화된 척도(standardized scale)로 변환하는 과정. Feature Scaling은 ML에서모든 feature가
dsaint31.tistory.com
다음은 StandardScaler와 LinearRegression을 Pipeline으로 묶어 사용하는 예임.
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
housing = fetch_california_housing()
x_raw = housing.data
y_raw = housing.target
x_train, x_test, y_train, y_test = train_test_split(
x_raw,
y_raw,
test_size=0.2,
random_state=42
)
# StandardScaler로 feature를 정규화한 뒤 LinearRegression 모델을 적용하는 Pipeline 생성
model = make_pipeline(
StandardScaler(), # 각 feature를 평균 0, 분산 1로 스케일링
LinearRegression() # 선형 회귀 모델
)
model.fit(x_train, y_train)
y_pred = model.predict(x_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print("MSE:", mse)
print("R2 Score:", r2)
Pipeline을 사용하면 scaling과 model 학습 과정을 하나의 객체로 묶을 수 있음:
https://dsaint31.tistory.com/829
[ML] scikit-learn: Pipeline 사용법
Scikit-learn의 Pipeline은 여러 데이터 처리 과정을 하나로 묶어 효율적으로 실행할 수 있게 해주는 Class.(일반적인) Pipeline 이란?Pipeline은 일반적으로 (데이터) 처리 과정 또는 기계학습 등에서 “여러
dsaint31.tistory.com
https://dsaint31.me/mkdocs_site/ML/ch01/ch01_41/?h=elastic#1-linear-regression
BME
bagging boosting ensemble machine-learning ml random-forest regression rf scikit-learn support-vector-machine svm [ML] Classic Regressor (Summary) DeepLearning 계열을 제외한 Regressor 모델들을 간단하게 정리함. 분류 Instance Based Alg
dsaint31.me
https://dsaint31.tistory.com/710
[Statistics] coefficient of determination (결정계수 ~ R squared)
Coefficient of Determination데이터에 대한 현재 regression 모델의 성능(or 적합도)를 평가함 ▷ 1에 가까울수록 좋은 모델임: [0,1]통계 (linear model 한정, 더 정확하게는 OLS w/ intercept 한정)에서 사용되는 경
dsaint31.tistory.com
정리
fetch_california_housing()은
scikit-learn에서 제공하는
대표적인 regression dataset loading 함수임.
California Housing Dataset은
- regression 문제 연습에 적합함.
- sample 수가 20,640개로 Boston Housing Dataset보다 큼.
- input feature는 8개임.
- target은 district 단위의 median house value임.
- target 단위는 10만 달러임.
Bunch, NumPy array, pandas DataFrame 형태로 모두 사용할 수 있음.- 위도와 경도를 포함하므로 위치 기반 시각화도 가능함.
같이 보면 좋은 자료들
2024.05.18 - [Python] - [ML] Dataset: Wisconsin Breast Cancer Dataset
[ML] Dataset: Wisconsin Breast Cancer Dataset
Wisconsin Breast Cancer Dataset (WBCD):Wisconsin Breast Cancer Dataset (WBCD)은오늘날 Machine Learning 및 Data Science 분야에서binary classification 교육용으로 자주 사용되는 Dataset임. Wisconsin 대학의 병리학자인 Dr. William H.
ds31x.tistory.com
https://dsaint31.tistory.com/960
Linear Regression (Summary)
0. Linear Regression 분류Linear Regression ├── 1. Error model 기준 │ ├── OLS 계열 │ │ ├── X: fixed or error-free │ │ ├── y: noise 있음 │ │ └── $\text{Var}(\varepsilon) = \sigma^2\mathbf{I}$│ │ │ ├
dsaint31.tistory.com
'ML' 카테고리의 다른 글
| optuna : Automatic Hyperparameter Optimization Framework (0) | 2026.06.27 |
|---|---|
| Autograd : In-place 연산 (0) | 2026.06.23 |
| torch_xla 간단 사용법: TPU로 PyTorch 사용하기 (0) | 2026.06.23 |
| 2026 정리 (0) | 2026.06.10 |
| Hugging Face Trainer Callback과 JSONL 기반 Curve Logger (0) | 2026.06.04 |