반응형
# 사이킷런으로 간단하게 나누기
from sklearn.model_selection import train_test_split
train_set, test_set = train_test_split(housing,test_szie=0.2, random_state=42)
# 계층적 샘플링
# 너무많은 계층으로 나뉘면 안되며 각 계층별로 충분히 커야 한다.
housing["income_cat"] = pd.cut(housing["median_income"], bin=[0.,1.5,3.0,4.5,6., np.inf], labels=[1,2,3,4,5])
# PANDAS
import pandas as pd
def load_data():
return pd.read_csv(csv_path)
#데이터 구조 흝어보기
A = load_data()
# 처음 다섯 행 확인
A.head()
# 각 특성의 데이터 타입과 null이 아닌 개수 확인
A.info()
# 범주형에 어떤카테고리가 있는지 확인
A["categorical"].value_counts()
# 특성의 요약 정보
# couynt, mean, min, max, quartile
A.describe()
#히스토그램으로 확인하기
%matplotlib inline
import matplotlib.pyplot as plt
A.hist(bins=5, figsize=(20,15)
plt.show()
# 각 데이터가 어떤 의미를 지니고 어떻게 계산되는지 이해하고 있어야함
# 스케일링
테스트 세트 만들기
# 일반적인 데이터 셋 나누기
import numpy as np
def split_train_test(data, test_ratio):
# np.random.seed(42) # 난수 발생기의 초기값을 지정해 사용할수있다.
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]
# 각 샘플마다 식별자의 해시값을 계산하여 해시 최댓값의 20%보다 작거나 같은 샘플만 테스트 세트로 보내도록 할 수 있다.
#이렇게 반복하면 데이터셋이 갱신되더라도 테스트 세트가 동일하게 유지될수있다.
from zlib import crc32
def test_set_check(identifier, test_ratio):
return crc32(np.int64(identifier)) & 0xffffffff < test_ratio * 2**32
def split_train_test_by_id(data, test_ratio, id_column):
ids = data[id_column]
in_test_set = ids.apply(lambda id_: test_set_check(id_, test_ratio))
return data.loc[~in_test_set], data.loc[in_test_set]
A_with_id = A.reset_index()
train_set, test_set = split_train_test_by_id(housing_with_id, 0.2, "index")
housing_with_id["id"] = housing["longtiude"] * 1000 + housing["latitude"]
train_set, test_set = split_train_test_by_id(housing_with_id, 0.2, "id")
각 샘플마다 충분한 데이터가 있어야 데이터 편향이 발생하지 않는다.
훈련세트를 손상시키지 않기위해 복사본을 만들수 있다.
housing = strat_train_set.copy()
# 지리적 데이터를 시각화하기
housing.plot(kind="scatter", x="longitude", y="latitude")
housing.plot(kind="scatter", x="longitude", y="latitude", alpha=0.1)
# alpha값은 데이터가 많으면 많을수록 진하게 표시해준다.
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,
sharex=False
)
plt.legend()
# x,y는 말그대로 위치 alpha는 선명도
# s는 반지름크기
# c는 색깔을 부여해 낮으면파란색 높으면 빨간색으로
# 상관관계 살펴보기
corr_matrix = housing.corr()
corr_matrix["median_house_value"].sort_values(ascending=False)
# 숫자형 특성이 여러개일경우 상관관계가 높아 보이는 특성 몇가지만 살펴보기
from pandas.plotting import scatter_matrix
attributes = ["median_house_value","median_income","total_rooms","housing_median_age"]
scatter_matrix(housing[attributes], figsize=(12,8))
housing.plot(kind="scatter",x="median_income",y="median_house_value", alpha=0.1)
# 이미지를 보면은 45만달러 근처에 수평선이 보이고
# 35와 28만달러에도 수평선이 보이는대
# 이러한 값은 학습하지 않도록 제거해 주는것이 좋습니다.
머신러닝 알고리즘을 위한 데이터 준비
- 어떤 데이터셋에 대해서도 데이터 변환을 손쉽게 반복할 수 있다.
- 향후 프로젝트에 사용할 수 있는 변환 라이브러리를 점진적으로 구축할수 있다
- 실제 시스템에서 알고리즘에 새 데이터를 주입하기 전에 변환시키는데 활용될수 있다
- 여러 가지 데이터 변환을 쉽게 시도해 보며 어떤 조합이 좋은지 확인할 수 있다.
housing = strat_train_set.drop("median_house_value", axis=1)
housing_lables = strat_train_set["median_house_value"].copy()
# drop은 해당값만 drop하고 복사하는 체계이기에 원본을 건들지 않는다
데이터정제
- 해당 구역을 제거하기
- 전체 특성을 삭제하기
- 어떤 값으로 체우기 0 , 평균, 중간값으로
dropna(), drop(), fillna()
housing.dropna(subset=["total_bedrooms"])
housing.drop("total_bedrooms",axis=1)
median = housing["total_bedroom"].median()
housing["total_bedrooms"].fillna(median, inplace=True)
SimpleImputer sklearn 라이브러리를 이용하기
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy="median")
# 수치형만 계산되기에 ocean_proximity는 제외시켜야한다
housing_num = housing.drop("ocean_proximity", axis=1)
imputer.fit(housing_num)
imputer.statistics_
housing_num.median().values
X = imputer.transform(housing_num)
housing_tr = pd.DataFrame(X, columns=housing_num.columns, index=housing_num.index)
반응형
'『 Python 』 > AI' 카테고리의 다른 글
[AI] 분류 (0) | 2023.02.07 |
---|---|
[AI] DataFrame 메서드 (0) | 2023.02.05 |
[AI] 2.1 머신러닝 프로젝트 흝어보기 (0) | 2023.02.05 |
[AI] 1.3 머신러닝 테스트와 검증 (0) | 2023.02.05 |
[AI] 1.2 머신러닝 주요 과제 (0) | 2023.02.05 |
댓글