사용안내 및 노트

홈으로/사용안내 및 노트
제목015. TensorFlow 2.0 첫걸음 – Synthetic Features와 Outliers2020-09-20 21:44:48
작성자

☐ TensorFlow 2.0 첫걸음 – Synthetic Features와 Outliers

 ○ 주요 내용

  - synthetic features에 대한 소개와 outliers(특이 값)의 영향

  - synthetic features: 서로 다른 2개의 features 조합으로 만든다.

   · rooms_per_person 이라는 synthetic features를 생성하려면, rooms_per_person = total_rooms / population

  - linear regression 모델에 synthetic features를 input feature로 사용

  - input 데이터로부터 outliers 제거(clipping 또는 removing) 및 효과 확인

 ○ 앞서 Single Input Feature를 사용했을 때와 비교해서 기본 코드는 큰 차이가 없으며 학습은 아래 예처럼 수행한다.

  - 더 나은 결과를 도출할 수 있도록 변수 값 설정에 집중할 것

california_housing_dataframe["rooms_per_person"] = (california_housing_dataframe["total_rooms"] / california_housing_dataframe["population"])

calibration_data = train_model(

learning_rate=0.05,

steps=500,

batch_size=5,

input_feature="rooms_per_person")

 ○ Outliers 식별

  - predictions과 targets를 비교한 scatter plot으로 모델 성능 시각화

   · 이상적인 상태는 완벽한 상관성을 갖는 대각선이 그려지는 것이다.

  - rooms_per_person의 히스토그램을 이용해 input 데이터 내 특이 값 식별

plt.figure(figsize=(15, 6))

plt.subplot(1, 2, 1)

plt.scatter(calibration_data["predictions"], calibration_data["targets"])

plt.subplot(1, 2, 2)

_ = california_housing_dataframe["rooms_per_person"].hist()

  - 대부분의 scatter points는 직선을 따라 배치되어 있다. 수직에 가까운 이 선에 대해서는 나중에 설명한다. 지금은 크게 벗어난 소수의 points에 대해서만 집중하자.

  - rooms_per_person의 히스토그램에서는 약간의 특이한 input 데이터를 발견할 수 있다.

 ○ Outliers 제거

  - rooms_per_person 값에 최소 또는 최대 한계를 설정할 때 모델의 적합성을 더 높일 수 있는지 살펴본다.

  - 아래는 Pandas Series에 함수를 적용하는 방법이다.

   · clipped_feature = my_dataframe["my_feature_name"].apply(lambda x: max(x, 0))

※ 참고: 위 람다함수는 max(x, 0) => 0 이상만 포함, min(x, 0) => 0 이하만 포함

  - 위의 히스토그램을 보면 대부분의 값이 5 미만이다. rooms_per_person을 5에서 잘라내고 히스토그램을 재생성하여 결과를 다시 확인한다.

california_housing_dataframe["rooms_per_person"] = (california_housing_dataframe["rooms_per_person"]).apply(lambda x: min(x, 5))

_ = california_housing_dataframe["rooms_per_person"].hist()

  - 삭제의 효과를 확인하기 위해 학습을 다시 수행하고 calibration_data를 한 번 더 출력해 본다.

calibration_data = train_model(

learning_rate=0.05,

steps=500,

batch_size=5,

input_feature="rooms_per_person")

_ = plt.scatter(calibration_data["predictions"], calibration_data["targets"])