iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 26
0

進入遊戲區體驗Fairness的機器學習,將會練習之前所說的不同的差異以及用子組合,來評估模型性能。

文章

(本篇分成兩章文章)


開始前

資料:用成人普查收入數據集(Adult Census Income dataset),該數據集常常在機器學習文獻中使用。該數據是Ronny Kohavi和Barry Becker從1994年人口普查局數據庫中提取的。

  • 注意事項:
    1. 資料年齡為16歲以上
    2. 調整後總收入超過一年100元
    3. 資料代表人數超過0人
    4. 每週工作時數超過0小時

目標:預測一年可以一個人賺超過5萬美金

開始:

載入Module

首先要載入我們需要的module:

import os
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import tensorflow as tf
import tempfile
!pip install seaborn==0.8.1
import seaborn as sns
import itertools
from sklearn.metrics import confusion_matrix
from sklearn.metrics import roc_curve, roc_auc_score
from sklearn.metrics import precision_recall_curve
from google.colab import widgets
# For facets
from IPython.core.display import display, HTML
import base64
!pip install facets-overview==1.0.0
from facets_overview.feature_statistics_generator import FeatureStatisticsGenerator

載入完畢的話會顯示:Requirement already satisfied: xxx(版號)以及Modules are imported.的字樣。

載入資料集

接著就是要使用我們的資料集-Adult Census Income dataset:

COLUMNS = ["age", "workclass", "fnlwgt", "education", "education_num",
           "marital_status", "occupation", "relationship", "race", "gender",
           "capital_gain", "capital_loss", "hours_per_week", "native_country",
           "income_bracket"]

train_df = pd.read_csv(
    "https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data",
    names=COLUMNS,
    sep=r'\s*,\s*',
    engine='python',
    na_values="?")
test_df = pd.read_csv(
    "https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.test",
    names=COLUMNS,
    sep=r'\s*,\s*',
    skiprows=[0],
    engine='python',
    na_values="?")

# Drop rows with missing values
train_df = train_df.dropna(how="any", axis=0)
test_df = test_df.dropna(how="any", axis=0)
  • 是否存在大量觀測值缺失的特徵值?
  • 是否有缺少的功能可能會影響其他功能?
  • 是否有任何意外的功能值?
  • 看到什麼數據偏斜跡象?

我們可以使用FACETS

#@title Visualize the Data in Facets
fsg = FeatureStatisticsGenerator()
dataframes = [
    {'table': train_df, 'name': 'trainData'}]
censusProto = fsg.ProtoFromDataFrames(dataframes)
protostr = base64.b64encode(censusProto.SerializeToString()).decode("utf-8")


HTML_TEMPLATE = """<script src="https://cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/1.3.3/webcomponents-lite.js"></script>
        <link rel="import" href="https://raw.githubusercontent.com/PAIR-code/facets/1.0.0/facets-dist/facets-jupyter.html">
        <facets-overview id="elem"></facets-overview>
        <script>
          document.querySelector("#elem").protoInput = "{protostr}";
        </script>"""
html = HTML_TEMPLATE.format(protostr=protostr)
display(HTML(html))

以用圖型化的上觀察是否資料集能使用,本次案例會得到這樣的圖型:
https://ithelp.ithome.com.tw/upload/images/20191012/20103826XlFZAMOiZU.png
https://ithelp.ithome.com.tw/upload/images/20191012/20103826nOoFadFAzx.pnghttps://ithelp.ithome.com.tw/upload/images/20191012/20103826U8CcPSqUMC.png

所以知道:

  • 是否存在大量觀測值缺失的特徵值?
    → 根據欄位顯示,沒有看到缺失資料
  • 是否有缺少的功能可能會影響其他功能?
    → 可以看得出來,每週工作時間,這個明顯錯誤,讓大家以為一週可以工作一小時而已。
  • 是否有任何意外的功能值?
    → 10%的示例對於這些功能具有非零值當然是合理的,但是我們可能需要仔細檢查以驗證這些功能的值有效。
  • 看到什麼數據偏斜跡象?
    → 當我們要預測個現象,理想值男生和女生一起出現,機率是各50。但是以女生和男生去區分,會沒有什麼交流性。不太能使用這個module。

前置作業完成,接著下一回,可以玩Colab


上一篇
【Day25】3rd:Fairness-評估偏差(evaluating for bias)
下一篇
【Day27】3rd:Playground-訓練模型(by TensorFlow)#2
系列文
Machine Learning(by Google)30

尚未有邦友留言

立即登入留言