TensorFlow Binary Classification: Esimerkki lineaarisesta luokittimesta

Kaksi yleisintรค valvottu oppiminen Tehtรคvรคt ovat lineaarinen regressio ja lineaarinen luokitin. Lineaarinen regressio ennustaa arvon, kun taas lineaarinen luokitin ennustaa luokan. Tรคmรค opetusohjelma keskittyy lineaarisiin luokittelijoihin.

Mikรค on lineaarinen luokitin?

A Lineaarinen luokitin koneoppimisessa on menetelmรค lรถytรครค objektin luokka sen ominaisuuksien perusteella tilastollista luokittelua varten. Se tekee luokituspรครคtรถksen objektin ominaisuuksien lineaarisen yhdistelmรคn arvon perusteella. Lineaarista luokittelijaa kรคytetรครคn kรคytรคnnรถn ongelmissa, kuten dokumenttien luokittelussa ja monimuuttujaongelmissa.

Luokitteluongelmat edustavat noin 80 prosenttia koneoppimistehtรคvรคstรค. Luokittelun tarkoituksena on ennustaa kunkin luokan todennรคkรถisyys tietyllรค syรถtteellรค. Tunniste (eli riippuva muuttuja) on diskreetti arvo, jota kutsutaan luokaksi.

  1. Jos tunnisteessa on vain kaksi luokkaa, oppimisalgoritmi on binaarinen luokitin.
  2. Moniluokkainen luokitin kรคsittelee tarroja, joissa on enemmรคn kuin kaksi luokkaa.

Esimerkiksi tyypillinen binรครคriluokitteluongelma on ennustaa todennรคkรถisyyttรค, ettรค asiakas tekee toisen ostoksen. Kuvassa nรคkyvรคn elรคimen tyypin ennustaminen on moniluokkainen luokitteluongelma, koska elรคimiรค on olemassa enemmรคn kuin kaksi lajiketta.

Tรคmรคn opetusohjelman teoreettisessa osassa keskitytรครคn ensisijaisesti binรครคriluokkaan. Opit lisรครค multiclass-tulostustoiminnosta tulevassa opetusohjelmassa.

Kuinka binรครคrinen luokitin toimii?

Opit edellisessรค opetusohjelmassa, ettรค funktio koostuu kahdentyyppisistรค muuttujista, riippuvaisesta muuttujasta ja joukosta ominaisuuksia (riippumattomia muuttujia). Lineaarisessa regressiossa riippuva muuttuja on reaaliluku ilman vaihteluvรคliรค. Ensisijainen tavoite on ennustaa sen arvo minimoimalla keskineliรถvirhe.

TensorFlow Binary Classifier -luokittajassa etiketillรค voi olla kaksi mahdollista kokonaislukuarvoa. Useimmissa tapauksissa se on joko [0,1] tai [1,2]. Tavoitteena on esimerkiksi ennustaa, ostaako asiakas tuotteen vai ei. Etiketti mรครคritellรครคn seuraavasti:

  • K = 1 (asiakas osti tuotteen)
  • K = 0 (asiakas ei osta tuotetta)

Malli kรคyttรครค ominaisuuksia X luokittelemaan jokaisen asiakkaan todennรคkรถisimpรครคn luokkaan, johon hรคn kuuluu, eli potentiaaliseen ostajaan vai ei.

Onnistumisen todennรคkรถisyys lasketaan logistinen regressio. Algoritmi laskee todennรคkรถisyyden ominaisuuden X perusteella ja ennustaa onnistumisen, kun tรคmรค todennรคkรถisyys on yli 50 prosenttia. Muodollisemmin todennรคkรถisyys lasketaan alla olevan TensorFlow-binaariluokituksen esimerkin mukaisesti:

Esimerkki binรครคriluokituksesta

jossa 0 on joukko painotuksia, ominaisuuksia ja b bias.

Funktio voidaan jakaa kahteen osaan:

  • Lineaarinen malli
  • Logistiikkatoiminto

Lineaarinen malli

Olet jo perehtynyt tapaan, jolla painot lasketaan. Painot lasketaan pistetulolla:Pistetuote Y on lineaarinen funktio kaikista piirteistรค xi. Jos mallissa ei ole ominaisuuksia, ennuste on yhtรค suuri kuin bias, b.

Painot osoittavat ominaisuuksien x vรคlisen korrelaation suunnani ja etiketti y. Positiivinen korrelaatio lisรครค positiivisen luokan todennรคkรถisyyttรค, kun taas negatiivinen korrelaatio vie todennรคkรถisyyden lรคhemmรคksi arvoa 0 (eli negatiivinen luokka).

Lineaarinen malli palauttaa vain reaaliluvun, joka on ristiriidassa alueen [0,1] todennรคkรถisyysmitan kanssa. Logistista toimintoa tarvitaan muuntamaan lineaarisen mallin tulos todennรคkรถisyydeksi,

Logistinen toiminto

Logistisella funktiolla eli sigmoidifunktiolla on S-muotoinen muoto ja tรคmรคn funktion tulos on aina vรคlillรค 0 ja 1.

Esimerkki logistiikkatoiminnosta

Esimerkki logistiikkatoiminnosta
Esimerkki logistiikkatoiminnosta

Lineaarisen regression tulos on helppo korvata sigmoidifunktiolla. Tuloksena on uusi luku todennรคkรถisyydellรค 0 ja 1.

Luokitin voi muuttaa todennรคkรถisyyden luokaksi

  • Arvoista 0โ€“0.49 tulee luokka 0
  • Arvoista 0.5โ€“1 tulee luokka 1

Kuinka mitata lineaarisen luokittelulaitteen suorituskykyรค?

tarkkuus

Luokittimen kokonaissuorituskykyรค mitataan tarkkuusmittarilla. Tarkkuus kerรครค kaikki oikeat arvot jaettuna havaintojen kokonaismรครคrรคllรค. Esimerkiksi 80 prosentin tarkkuusarvo tarkoittaa, ettรค malli on oikea 80 prosentissa tapauksista.

Tarkkuusmetriikka
Mittaa Lineaarisen luokittelulaitteen suorituskykyรค tarkkuusmittarin avulla

Voit huomata tรคmรคn mittarin puutteen, erityisesti epรคtasapainoluokissa. Epรคtasapainotietojoukko syntyy, kun havaintojen mรครคrรค ryhmรครค kohti ei ole sama. Sanotaanpa; yritรคt luokitella harvinaista tapahtumaa logistisella funktiolla. Kuvittele, ettรค luokitin yrittรครค arvioida potilaan kuoleman sairauden seurauksena. Tietojen mukaan 5 prosenttia potilaista kuolee. Voit kouluttaa luokittelijan ennustamaan kuolleiden lukumรครคrรครค ja kรคyttรครค tarkkuusmittaria suoritusten arvioimiseen. Jos luokitin ennustaa 0 kuolemaa koko tietojoukolle, se pitรครค paikkansa 95 prosentissa tapauksista.

Hรคmmennysmatriisi

Parempi tapa arvioida luokittelijan suorituskykyรค on tarkastella sekaannusmatriisia.

Sekaannusmatriisi
Mittaa Lineaarisen luokittelulaitteen suorituskykyรค Confusion-matriisin avulla

sekaannusmatriisi visualisoi luokittelijan tarkkuuden vertaamalla todellista ja ennustettua luokkia, kuten yllรค olevassa Lineaarinen luokittelija -esimerkissรค on esitetty. Binรครคrisekoitusmatriisi koostuu neliรถistรค:

  • TP: True Positive: Ennustetut arvot on ennustettu oikein todellisina positiivisina
  • FP: Ennustetut arvot ennustivat vรครคrin todellisen positiivisen. eli negatiiviset arvot ennustetaan positiivisiksi
  • FN: Vรครคrรค negatiivinen: Positiiviset arvot ennustetaan negatiivisiksi
  • TN: True Negative: Ennustetut arvot on ennustettu oikein todellisiksi negatiivisiksi

Sekaannusmatriisista on helppo verrata todellista luokkaa ja ennustettua luokkaa.

Tarkkuus ja herkkyys

Sekaannusmatriisi tarjoaa hyvรคn kรคsityksen todellisista positiivisista ja vรครคristรค positiivisista. Joissakin tapauksissa on parempi kรคyttรครค tiiviimpรครค mittaria.

Tarkkuus

Tarkkuusmetriikka nรคyttรครค positiivisen luokan tarkkuuden. Se mittaa, kuinka todennรคkรถisesti positiivisen luokan ennuste on oikea.

Tarkkuus

Maksimipistemรครคrรค on 1, kun luokitin luokittelee tรคydellisesti kaikki positiiviset arvot. Pelkรคstรครคn tarkkuus ei ole kovin hyรถdyllinen, koska se jรคttรครค huomioimatta negatiivisen luokan. Mittari yhdistetรครคn yleensรค pariksi Recall-mittarin kanssa. Palautusta kutsutaan myรถs herkkyydeksi tai todelliseksi positiiviseksi koroksi.

Herkkyys

Herkkyys laskee oikein havaittujen positiivisten luokkien suhteen. Tรคmรค mittari kertoo, kuinka hyvรค malli tunnistaa positiivisen luokan.

Herkkyys

Lineaarinen luokitin TensorFlow'lla

Tรคssรค opetusohjelmassa kรคytรคmme vรคestรถnlaskentatietoa. Tarkoitus on kรคyttรครค vรคestรถnlaskentaaineiston muuttujia tulotason ennustamiseen. Huomaa, ettรค tulot ovat binรครคrimuuttujia

  • arvolla 1, jos tulot > 50k
  • 0 jos tulot < 50k.

Tรคmรค muuttuja on tunniste

Tรคmรค tietojoukko sisรคltรครค kahdeksan kategorista muuttujaa:

  • tyรถpaikka
  • koulutus
  • avio-
  • ammatti
  • yhteys
  • rotu
  • sukupuoli
  • Kotimaa

lisรคksi kuusi jatkuvaa muuttujaa:

  • ikรค
  • fnlwgt
  • koulutus_nm
  • myyntivoitto
  • pรครคoma_tappio
  • tuntia_viikko

Tรคmรคn TensorFlow-luokitteluesimerkin avulla ymmรคrrรคt, kuinka opettaa lineaarisia TensorFlow-luokittajia TensorFlow-estimaattorilla ja kuinka parantaa tarkkuusmetriikkaa.

Jatketaan seuraavasti:

  • Vaihe 1) Tuo tiedot
  • Vaihe 2) Tietojen muuntaminen
  • Vaihe 3) Kouluta luokittelija
  • Vaihe 4) Paranna mallia
  • Vaihe 5) Hyperparametri: Lasso & Ridge

Vaihe 1) Tuo tiedot

Tuo ensin opetusohjelman aikana kรคytetyt kirjastot.

import tensorflow as tf
import pandas as pd

Seuraavaksi tuot tiedot UCI:n arkistosta ja mรครคritรคt sarakkeiden nimet. Kรคytรคt sarakkeita nimeรคmรครคn sarakkeet pandastietokehyksessรค.

Huomaa, ettรค koulutat luokittelijan kรคyttรคmรคllรค Pandas-tietokehystรค.

## Define path data
COLUMNS = ['age','workclass', 'fnlwgt', 'education', 'education_num', 'marital',
           'occupation', 'relationship', 'race', 'sex', 'capital_gain', 'capital_loss',
           'hours_week', 'native_country', 'label']
PATH = "https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data"
PATH_test = "https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.test"

Verkkoon tallennetut tiedot on jo jaettu junasarjan ja testijoukon kesken.

df_train = pd.read_csv(PATH, skipinitialspace=True, names = COLUMNS, index_col=False)
df_test = pd.read_csv(PATH_test,skiprows = 1, skipinitialspace=True, names = COLUMNS, index_col=False)

Junasarja sisรคltรครค 32,561 16,281 havaintoa ja testisarja XNUMX XNUMX

print(df_train.shape, df_test.shape)
print(df_train.dtypes)
(32561, 15) (16281, 15)
age                int64
workclass         object
fnlwgt             int64
education         object
education_num      int64
marital           object
occupation        object
relationship      object
race              object
sex               object
capital_gain       int64
capital_loss       int64
hours_week         int64
native_country    object
label             object
dtype: object

Tensorflow vaatii Boolen arvon luokittelijan kouluttamiseen. Arvot on vรคlitettรคvรค merkkijonosta kokonaisluvuksi. Tarra tallennetaan objektina, mutta sinun on muutettava se numeeriseksi arvoksi. Alla oleva koodi luo sanakirjan, joka sisรคltรครค muunnettavat arvot ja silmukan sarakekohteen yli. Huomaa, ettรค suoritat tรคmรคn toiminnon kahdesti, yhden junatestille ja toisen testisarjalle

label = {'<=50K': 0,'>50K': 1}
df_train.label = [label[item] for item in df_train.label]
label_t = {'<=50K.': 0,'>50K.': 1}
df_test.label = [label_t[item] for item in df_test.label]

Junatiedoissa on 24,720 50 alle 7841 XNUMX tuloa ja XNUMX XNUMX yli. Suhde on lรคhes sama testisarjassa. Katso tรคstรค Facets-opetusohjelmasta lisรครค.

print(df_train["label"].value_counts())
### The model will be correct in atleast 70% of the case
print(df_test["label"].value_counts())
## Unbalanced label
print(df_train.dtypes)
0    24720
1     7841
Name: label, dtype: int64
0    12435
1     3846
Name: label, dtype: int64
age                int64
workclass         object
fnlwgt             int64
education         object
education_num      int64
marital           object
occupation        object
relationship      object
race              object
sex               object
capital_gain       int64
capital_loss       int64
hours_week         int64
native_country    object
label              int64
dtype: object

Vaihe 2) Tietojen muuntaminen

Muutama vaihe vaaditaan ennen kuin harjoitat lineaarista luokittelijaa Tensorflow:lla. Sinun on valmisteltava malliin sisรคllytettรคvรคt ominaisuudet. Vertailuregressiossa kรคytรคt alkuperรคisiรค tietoja ilman muunnoksia.

Estimaattorilla on oltava luettelo ominaisuuksista mallin kouluttamiseksi. Siksi sarakkeen tiedot on muutettava tensoriksi.

Hyvรค kรคytรคntรถ on mรครคrittรครค kaksi ominaisuusluetteloa niiden tyypin perusteella ja vรคlittรครค ne sitten estimaattorin feature_columns -kohdassa.

Aloitat muuntamalla jatkuvia ominaisuuksia ja mรครคritรคt sitten ryhmรคn kategorisilla tiedoilla.

Tietojoukon ominaisuuksilla on kaksi muotoa:

  • Kokonaisluku
  • objekti

Jokainen ominaisuus on lueteltu kahdessa seuraavassa muuttujassa niiden tyyppien mukaan.

## Add features to the bucket: 
### Define continuous list
CONTI_FEATURES  = ['age', 'fnlwgt','capital_gain', 'education_num', 'capital_loss', 'hours_week']
### Define the categorical list
CATE_FEATURES = ['workclass', 'education', 'marital', 'occupation', 'relationship', 'race', 'sex', 'native_country']

Feature_column on varustettu objektilla numeric_column, joka auttaa jatkuvien muuttujien muuntamisessa tensoriksi. Alla olevassa koodissa muutat kaikki muuttujat CONTI_FEATURES tensoriksi, jolla on numeerinen arvo. Tรคmรค on pakollista mallin rakentamiseksi. Kaikki riippumattomat muuttujat on muutettava oikeantyyppisiksi tensoreiksi.

Alla kirjoitamme koodin, jonka avulla nรคet, mitรค feature_column.numeric_column-kohdan takana tapahtuu. Tulostamme iรคn muunnetun arvon. Se on selittรคvรค, joten python-koodia ei tarvitse ymmรคrtรครค. Voit katsoa koodit virallisesta dokumentaatiosta.

def print_transformation(feature = "age", continuous = True, size = 2): 
    #X = fc.numeric_column(feature)
    ## Create feature name
    feature_names = [
    feature]

    ## Create dict with the data
    d = dict(zip(feature_names, [df_train[feature]]))

    ## Convert age
    if continuous == True:
        c = tf.feature_column.numeric_column(feature)
        feature_columns = [c]
    else: 
        c = tf.feature_column.categorical_column_with_hash_bucket(feature, hash_bucket_size=size) 
        c_indicator = tf.feature_column.indicator_column(c)
        feature_columns = [c_indicator]
    
## Use input_layer to print the value
    input_layer = tf.feature_column.input_layer(
        features=d,
        feature_columns=feature_columns
        )
    ## Create lookup table
    zero = tf.constant(0, dtype=tf.float32)
    where = tf.not_equal(input_layer, zero)
    ## Return lookup tble
    indices = tf.where(where)
    values = tf.gather_nd(input_layer, indices)
    ## Initiate graph
    sess = tf.Session()
    ## Print value
    print(sess.run(input_layer))
print_transformation(feature = "age", continuous = True) 
[[39.]
 [50.]
 [38.]
 ...
 [58.]
 [22.]
 [52.]]

Arvot ovat tรคsmรคlleen samat kuin df_trainissa

continuous_features = [tf.feature_column.numeric_column(k) for k in CONTI_FEATURES]

TensorFlow-dokumentaation mukaan kategorisia tietoja voidaan muuntaa eri tavoin. Jos ominaisuuden sanasto on tiedossa eikรค siinรค ole paljon arvoja, on mahdollista luoda kategoriallinen sarake kategorisella_sarake_sanaluettelolla. Se mรครคrittรครค kaikille ainutlaatuisille sanastoluetteloille tunnuksen.

Jos esimerkiksi muuttujan tilalla on kolme eri arvoa:

  • aviomies
  • Vaimo
  • Yksi

Sitten annetaan kolme tunnusta. Esimerkiksi miehellรค on tunnus 1, vaimolla tunnus 2 ja niin edelleen.

Havainnollistamistarkoituksessa voit kรคyttรครค tรคtรค koodia muuntaaksesi objektimuuttujan kategoriseksi sarakkeeksi TensorFlowissa.

Ominaisuussukupuolella voi olla vain kaksi arvoa: mies tai nainen. Kun muunnamme ominaisuuden sukupuolen, Tensorflow luo 2 uutta saraketta, yhden miehille ja toisen naisille. Jos sukupuoli on yhtรค suuri kuin mies, uuden sarakkeen mies on 1 ja nainen 0. Tรคmรค esimerkki nรคkyy alla olevassa taulukossa:

riviรค sukupuoli muutoksen jรคlkeen uros- naaras-
1 uros- => 1 0
2 uros- => 1 0
3 naaras- => 0 1

Tensorflow-tilassa:

print_transformation(feature = "sex", continuous = False, size = 2)
[[1. 0.]
 [1. 0.]
 [1. 0.]
 ...
 [0. 1.]
 [1. 0.]
 [0. 1.]]

relationship = tf.feature_column.categorical_column_with_vocabulary_list(
    'relationship', [
        'Husband', 'Not-in-family', 'Wife', 'Own-child', 'Unmarried',
        'Other-relative'])

Lisรคsimme alle Python koodi koodauksen tulostamiseksi. Jรคlleen, sinun ei tarvitse ymmรคrtรครค koodia, tarkoituksena on nรคhdรค muunnos

Nopeampi tapa muuttaa tiedot on kuitenkin kรคyttรครค menetelmรครค categorical_column_with_hash_bucket. Merkkijonomuuttujien muuttaminen harvassa matriisissa on hyรถdyllistรค. Harva matriisi on matriisi, jossa on enimmรคkseen nolla. Menetelmรค hoitaa kaiken. Sinun tarvitsee vain mรครคrittรครค รคmpรคrien mรครคrรค ja avainsarake. Sรคilรถiden mรครคrรค on suurin sallittu mรครคrรค ryhmiรค, jotka Tensorflow voi luoda. Avainsarake on yksinkertaisesti muunnettavan sarakkeen nimi.

Alla olevassa koodissa luot silmukan kaikille kategorisille ominaisuuksille.

categorical_features = [tf.feature_column.categorical_column_with_hash_bucket(k, hash_bucket_size=1000) for k in CATE_FEATURES]

Vaihe 3) Kouluta luokittelija

TensorFlow tarjoaa tรคllรค hetkellรค estimaattorin lineaarista regressiota ja lineaarista luokittelua varten.

  • Lineaarinen regressio: Lineaarinen regressio
  • Lineaarinen luokitus: LinearClassifier

Lineaarisen luokittelijan syntaksi on sama kuin opetusohjelmassa lineaarinen regressio paitsi yksi argumentti, n_class. Sinun on mรครคritettรคvรค ominaisuussarake, mallihakemisto ja verrattava lineaariseen regressoriin; sinun on mรครคritettรคvรค luokan lukumรครคrรค. Logit-regressiolle luokan lukumรครคrรค on yhtรค suuri kuin 2.

Malli laskee jatkuvat_ominaisuudet ja kategorialliset_ominaisuudet sisรคltรคmien sarakkeiden painot.

model = tf.estimator.LinearClassifier(
    n_classes = 2,
    model_dir="ongoing/train", 
    feature_columns=categorical_features+ continuous_features)

ulostulo

INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {'_model_dir': 'ongoing/train', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_service': None, '_cluster_spec': 
<tensorflow.python.training.server_lib.ClusterSpec object at 0x181f24c898>, '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

Nyt kun luokitin on mรครคritetty, voit luoda syรถttรถfunktion. Menetelmรค on sama kuin lineaarisen regressorin opetusohjelmassa. Tรคssรค kรคytรคt erรคkokoa 128 ja sekoitat tiedot.

FEATURES = ['age','workclass', 'fnlwgt', 'education', 'education_num', 'marital', 'occupation', 'relationship', 'race', 'sex', 'capital_gain', 'capital_loss', 'hours_week', 'native_country']
LABEL= 'label'
def get_input_fn(data_set, num_epochs=None, n_batch = 128, shuffle=True):
    return tf.estimator.inputs.pandas_input_fn(
       x=pd.DataFrame({k: data_set[k].values for k in FEATURES}),
       y = pd.Series(data_set[LABEL].values),
       batch_size=n_batch,   
       num_epochs=num_epochs,
       shuffle=shuffle)

Luot funktion lineaarisen estimaattorin vaatimilla argumenteilla, eli aikakausien lukumรครคrรคllรค, erien lukumรครคrรคllรค ja sekoitat tietojoukon tai muistiinpanon. Koska kรคytรคt Panda Menetelmรค siirtรครคksesi tiedot malliin, sinun on mรครคritettรคvรค X-muuttujat panda-tietokehykseksi. Huomaa, ettรค kรคyt lรคpi kaikki OMINAISUUDET-kansioon tallennetut tiedot.

Harjoitetaan mallia objektilla model.train. Kรคytรคt aiemmin mรครคritettyรค funktiota syรถttรคmรครคn malliin sopivat arvot. Huomaa, ettรค asetat erรคn kooksi 128 ja aikakausien lukumรครคrรคksi Ei mitรครคn. Mallia koulutetaan yli tuhat askelta.

model.train(input_fn=get_input_fn(df_train, 
                                      num_epochs=None,
                                      n_batch = 128,
                                      shuffle=False),
                                      steps=1000)
									 
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow: Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Saving checkpoints for 1 into ongoing/train/model.ckpt.
INFO:tensorflow:loss = 88.722855, step = 1
INFO:tensorflow:global_step/sec: 65.8282
INFO:tensorflow:loss = 52583.64, step = 101 (1.528 sec)
INFO:tensorflow:global_step/sec: 118.386
INFO:tensorflow:loss = 25203.816, step = 201 (0.837 sec)
INFO:tensorflow:global_step/sec: 110.542
INFO:tensorflow:loss = 54924.312, step = 301 (0.905 sec)
INFO:tensorflow:global_step/sec: 199.03
INFO:tensorflow:loss = 68509.31, step = 401 (0.502 sec)
INFO:tensorflow:global_step/sec: 167.488
INFO:tensorflow:loss = 9151.754, step = 501 (0.599 sec)
INFO:tensorflow:global_step/sec: 220.155
INFO:tensorflow:loss = 34576.06, step = 601 (0.453 sec)
INFO:tensorflow:global_step/sec: 199.016
INFO:tensorflow:loss = 36047.117, step = 701 (0.503 sec)
INFO:tensorflow:global_step/sec: 197.531
INFO:tensorflow:loss = 22608.148, step = 801 (0.505 sec)
INFO:tensorflow:global_step/sec: 208.479
INFO:tensorflow:loss = 22201.918, step = 901 (0.479 sec)
INFO:tensorflow:Saving checkpoints for 1000 into ongoing/train/model.ckpt.
INFO:tensorflow:Loss for final step: 5444.363.

<tensorflow.python.estimator.canned.linear.LinearClassifier at 0x181f223630>

Huomaa, ettรค tappio pieneni myรถhemmin viimeisen 100 vaiheen aikana, eli 901:stรค 1000:een.

Lopullinen hรคviรถ tuhannen iteroinnin jรคlkeen on 5444. Voit arvioida mallisi testisarjasta ja nรคhdรค suorituskyvyn. Mallin suorituskyvyn arvioimiseksi sinun on kรคytettรคvรค objektin arviointia. Syรถtรคt malliin testisarjan ja asetat epookkien lukumรครคrรคksi 1, eli data menee malliin vain kerran.

model.evaluate(input_fn=get_input_fn(df_test, 
                                      num_epochs=1,
                                      n_batch = 128,
                                      shuffle=False),
                                      steps=1000)
									  
INFO:tensorflow:Calling model_fn.
WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to "careful_interpolation" instead.
WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to "careful_interpolation" instead.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2018-06-02-08:28:22
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from ongoing/train/model.ckpt-1000
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Evaluation [100/1000]
INFO:tensorflow:Finished evaluation at 2018-06-02-08:28:23
INFO:tensorflow:Saving dict for global step 1000: accuracy = 0.7615626, accuracy_baseline = 0.76377374, auc = 0.63300294, auc_precision_recall = 0.50891197, average_loss = 47.12155, global_step = 1000, label/mean = 0.23622628, loss = 5993.6406, precision = 0.49401596, prediction/mean = 0.18454961, recall = 0.38637546

{'accuracy': 0.7615626,
 'accuracy_baseline': 0.76377374,
 'auc': 0.63300294,
 'auc_precision_recall': 0.50891197,
 'average_loss': 47.12155,
 'global_step': 1000,
 'label/mean': 0.23622628,
 'loss': 5993.6406,
 'precision': 0.49401596,
 'prediction/mean': 0.18454961,
 'recall': 0.38637546}

TensorFlow palauttaa kaikki mittarit, jotka opit teoreettisessa osassa. Ilman yllรคtystรค tarkkuus on suuri epรคtasapainoisen etiketin vuoksi. Itse asiassa malli toimii hieman paremmin kuin satunnainen arvaus. Kuvittele, ettรค malli ennustaa kaikki kotitaloudet, joiden tulot ovat alle 50 70, niin mallin tarkkuus on XNUMX prosenttia. Tarkemmalla analyysillรค voit nรคhdรค, ettรค ennuste ja muistaminen ovat melko alhaiset.

Vaihe 4) Paranna mallia

Nyt kun sinulla on vertailumalli, voit yrittรครค parantaa sitรค, eli lisรคtรค tarkkuutta. Edellisessรค opetusohjelmassa opit parantamaan ennustetehoa vuorovaikutustermillรค. Tรคssรค opetusohjelmassa palaat tรคhรคn ajatukseen lisรครคmรคllรค polynomitermin regressioon.

Polynomiregressio on hyรถdyllinen, kun tiedoissa on epรคlineaarisuutta. On kaksi tapaa siepata datan epรคlineaarisuus.

  • Lisรครค polynomitermi
  • Luokittele jatkuva muuttuja kategoriseksi muuttujaksi

Polynomitermi

Alla olevasta kuvasta nรคet, mikรค polynomiregressio on. Se on yhtรคlรถ, jossa on eri tehoisia X-muuttujia. Toisen asteen polynomiregressiossa on kaksi muuttujaa, X ja X neliรถity. Kolmannessa asteessa on kolme muuttujaa, X, X2, ja X3

Polynomiregressio
Mikรค on polynomiregressio

Alla rakensimme kaavion kahdella muuttujalla, X ja Y. On selvรครค, ettรค suhde ei ole lineaarinen. Jos lisรครคmme lineaarisen regression, voimme nรคhdรค, ettรค malli ei pysty kaappaamaan kuviota (vasen kuva).

Katso nyt vasenta kuvaa alla olevasta kuvasta, lisรคsimme regressioon viisi termiรค (eli y=x+x2+x3+x4+x5. Malli vangitsee nyt paljon paremmin kuvion. Tรคmรค on polynomiregression voima.

Polynomiregressio

Palataanpa esimerkkiimme. Ikรค ei ole lineaarisessa suhteessa tuloihin. Varhaisella iรคllรค saattaa olla tasaiset tulot lรคhellรค nollaa, koska lapset tai nuoret eivรคt kรคy tรถissรค. Sitten se nousee tyรถiรคssรค ja laskee elรคkkeelle siirtyessรค. Se on tyypillisesti kรครคnteinen U-muoto. Yksi tapa kaapata tรคmรค kuvio on lisรคtรค potenssi kaksi regressioon.

Katsotaan lisรครคkรถ se tarkkuutta.

Sinun on lisรคttรคvรค tรคmรค uusi ominaisuus tietojoukkoon ja jatkuvan ominaisuuden luetteloon.

Lisรครคt uuden muuttujan juna- ja testaustietojoukkoon, joten funktion kirjoittaminen on helpompaa.

def square_var(df_t, df_te, var_name = 'age'):
    df_t['new'] = df_t[var_name].pow(2) 
    df_te['new'] = df_te[var_name].pow(2) 
    return df_t, df_te

Funktiolla on 3 argumenttia:

  • df_t: mรครคritรค harjoitussarja
  • df_te: mรครคritรค testijoukko
  • var_name = 'age': Mรครคritรค muunnettava muuttuja

Voit kรคyttรครค objektia pow(2) neliรถimรครคn muuttujan iรคn. Huomaa, ettรค uuden muuttujan nimi on "new"

Nyt kun funktio square_var on kirjoitettu, voit luoda uudet tietojoukot.

df_train_new, df_test_new = square_var(df_train, df_test, var_name = 'age')

Kuten nรคet, uudessa tietojoukossa on vielรค yksi ominaisuus.

print(df_train_new.shape, df_test_new.shape)			
(32561, 16) (16281, 16)

Neliรถmรคistรค muuttujaa kutsutaan tietojoukossa uudeksi. Sinun on lisรคttรคvรค se jatkuvien ominaisuuksien luetteloon.

CONTI_FEATURES_NEW  = ['age', 'fnlwgt','capital_gain', 'education_num', 'capital_loss', 'hours_week', 'new']
continuous_features_new = [tf.feature_column.numeric_column(k) for k in CONTI_FEATURES_NEW]

Huomautuksia ettรค muutit Graphin hakemistoa. Et voi kouluttaa eri malleja samassa hakemistossa. Se tarkoittaa, ettรค sinun on vaihdettava argumentin model_dir polku. Jos et, TensorFlow antaa virheilmoituksen.

model_1 = tf.estimator.LinearClassifier(
    model_dir="ongoing/train1", 
    feature_columns=categorical_features+ continuous_features_new)
INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {'_model_dir': 'ongoing/train1', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_service': None, '_cluster_spec': 
<tensorflow.python.training.server_lib.ClusterSpec object at 0x1820f04b70>, '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}
FEATURES_NEW = ['age','workclass', 'fnlwgt', 'education', 'education_num', 'marital', 'occupation', 'relationship', 'race', 'sex', 'capital_gain', 'capital_loss', 'hours_week', 'native_country', 'new']
def get_input_fn(data_set, num_epochs=None, n_batch = 128, shuffle=True):
    return tf.estimator.inputs.pandas_input_fn(
       x=pd.DataFrame({k: data_set[k].values for k in FEATURES_NEW}),
       y = pd.Series(data_set[LABEL].values),
       batch_size=n_batch,   
       num_epochs=num_epochs,
       shuffle=shuffle)

Nyt kun luokitin on suunniteltu uuden tietojoukon kanssa, voit harjoitella ja arvioida mallia.

model_1.train(input_fn=get_input_fn(df_train, 
                                      num_epochs=None,
                                      n_batch = 128,
                                      shuffle=False),
                                      steps=1000)
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Saving checkpoints for 1 into ongoing/train1/model.ckpt.
INFO:tensorflow:loss = 88.722855, step = 1
INFO:tensorflow:global_step/sec: 81.487
INFO:tensorflow:loss = 70077.66, step = 101 (1.228 sec)
INFO:tensorflow:global_step/sec: 111.169
INFO:tensorflow:loss = 49522.082, step = 201 (0.899 sec)
INFO:tensorflow:global_step/sec: 128.91
INFO:tensorflow:loss = 107120.57, step = 301 (0.776 sec)
INFO:tensorflow:global_step/sec: 132.546
INFO:tensorflow:loss = 12814.152, step = 401 (0.755 sec)
INFO:tensorflow:global_step/sec: 162.194
INFO:tensorflow:loss = 19573.898, step = 501 (0.617 sec)
INFO:tensorflow:global_step/sec: 204.852
INFO:tensorflow:loss = 26381.986, step = 601 (0.488 sec)
INFO:tensorflow:global_step/sec: 188.923
INFO:tensorflow:loss = 23417.719, step = 701 (0.529 sec)
INFO:tensorflow:global_step/sec: 192.041
INFO:tensorflow:loss = 23946.049, step = 801 (0.521 sec)
INFO:tensorflow:global_step/sec: 197.025
INFO:tensorflow:loss = 3309.5786, step = 901 (0.507 sec)
INFO:tensorflow:Saving checkpoints for 1000 into ongoing/train1/model.ckpt.
INFO:tensorflow:Loss for final step: 28861.898.

<tensorflow.python.estimator.canned.linear.LinearClassifier at 0x1820f04c88>
model_1.evaluate(input_fn=get_input_fn(df_test_new, 
                                      num_epochs=1,
                                      n_batch = 128,
                                      shuffle=False),
                                      steps=1000)
INFO:tensorflow:Calling model_fn.
WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to "careful_interpolation" instead.
WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to "careful_interpolation" instead.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2018-06-02-08:28:37
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from ongoing/train1/model.ckpt-1000
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Evaluation [100/1000]
INFO:tensorflow:Finished evaluation at 2018-06-02-08:28:39
INFO:tensorflow:Saving dict for global step 1000: accuracy = 0.7944229, accuracy_baseline = 0.76377374, auc = 0.6093755, auc_precision_recall = 0.54885805, average_loss = 111.0046, global_step = 1000, label/mean = 0.23622628, loss = 14119.265, precision = 0.6682401, prediction/mean = 0.09116262, recall = 0.2576703

{'accuracy': 0.7944229,
 'accuracy_baseline': 0.76377374,
 'auc': 0.6093755,
 'auc_precision_recall': 0.54885805,
 'average_loss': 111.0046,
 'global_step': 1000,
 'label/mean': 0.23622628,
 'loss': 14119.265,
 'precision': 0.6682401,
 'prediction/mean': 0.09116262,
 'recall': 0.2576703}

Neliรถmuuttuja paransi tarkkuutta 0.76:sta 0.79:รครคn. Katsotaan, voitko tehdรค paremmin yhdistรคmรคllรค ryhmittelyn ja vuorovaikutustermit yhteen.

Bucketization ja vuorovaikutus

Kuten aiemmin nรคit, lineaarinen luokitin ei pysty kuvaamaan ikรค-tulokuviota oikein. Tรคmรค johtuu siitรค, ettรค se oppii yhden painon jokaiselle ominaisuudelle. Luokittelijan toiminnan helpottamiseksi voit tehdรค ominaisuuden รคmpรคriin. Sรคilรถntรค muuntaa numeerisen ominaisuuden useiksi tietyiksi sen alueen perusteella, jolle se kuuluu, ja jokainen nรคistรค uusista ominaisuuksista osoittaa, kuuluuko henkilรถn ikรค tรคlle alueelle.

Nรคiden uusien ominaisuuksien avulla lineaarinen malli voi vangita suhteen oppimalla eri painot jokaiselle รคmpรคrille.

TensorFlowissa se tehdรครคn bucketized_columnilla. Sinun on lisรคttรคvรค arvoalue rajoihin.

age = tf.feature_column.numeric_column('age')
age_buckets = tf.feature_column.bucketized_column(
    age, boundaries=[18, 25, 30, 35, 40, 45, 50, 55, 60, 65])

Tiedรคt jo, ettรค ikรค ei ole lineaarinen tulojen kanssa. Toinen tapa parantaa mallia on vuorovaikutus. TensorFlow'n sanalla se on ominaisuuden rajaamista. Ominaisuuksien ristiin on tapa luoda uusia ominaisuuksia, jotka ovat yhdistelmiรค olemassa olevista, mikรค voi olla hyรถdyllistรค lineaariselle luokittelijalle, joka ei pysty mallintamaan ominaisuuksien vรคlistรค vuorovaikutusta.

Voit laskea ikรครค toisella ominaisuudella, kuten koulutuksella. Toisin sanoen joillakin ryhmillรค on todennรคkรถisesti korkeat tulot ja toisilla alhaiset (ajattele tohtoriopiskelijaa).

education_x_occupation = [tf.feature_column.crossed_column(
    ['education', 'occupation'], hash_bucket_size=1000)]
age_buckets_x_education_x_occupation = [tf.feature_column.crossed_column(
    [age_buckets, 'education', 'occupation'], hash_bucket_size=1000)]

Jos haluat luoda ristikkรคispiirresarakkeen, kรคytรค crossed_column-muuttujia, joiden muuttujat ovat rajattavissa suluissa. Hash_bucket_size osoittaa suurimmat ylitysmahdollisuudet. Voit luoda muuttujien vรคlisen vuorovaikutuksen (ainakin yhden muuttujan on oltava kategorinen) kรคyttรคmรคllรค tf.feature_column.crossed_column. Jotta voit kรคyttรครค tรคtรค objektia, sinun on lisรคttรคvรค hakasulkeisiin muuttuja vuorovaikutuksessa ja toinen argumentti, segmentin koko. Astian koko on suurin mahdollinen ryhmien lukumรครคrรค muuttujan sisรคllรค. Tรคssรค asetat sen arvoksi 1000, koska et tiedรค tarkkaa ryhmien mรครคrรครค

age_buckets on neliรถitรคvรค ennen sen lisรครคmistรค ominaisuussarakkeisiin. Voit myรถs lisรคtรค uudet ominaisuudet ominaisuussarakkeisiin ja valmistella estimaattorin

base_columns = [
    age_buckets,
]

model_imp = tf.estimator.LinearClassifier(
    model_dir="ongoing/train3", 
    feature_columns=categorical_features+base_columns+education_x_occupation+age_buckets_x_education_x_occupation)

ulostulo

INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {'_model_dir': 'ongoing/train3', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_service': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x1823021be0>, '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}
FEATURES_imp = ['age','workclass', 'education', 'education_num', 'marital',
                'occupation', 'relationship', 'race', 'sex', 'native_country', 'new']

def get_input_fn(data_set, num_epochs=None, n_batch = 128, shuffle=True):
    return tf.estimator.inputs.pandas_input_fn(
       x=pd.DataFrame({k: data_set[k].values for k in FEATURES_imp}),
       y = pd.Series(data_set[LABEL].values),
       batch_size=n_batch,   
       num_epochs=num_epochs,
       shuffle=shuffle)

Olet valmis arvioimaan uutta mallia ja katsomaan, parantaako se tarkkuutta.

model_imp.train(input_fn=get_input_fn(df_train_new, 
                                      num_epochs=None,
                                      n_batch = 128,
                                      shuffle=False),
                                      steps=1000)
									  
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Saving checkpoints for 1 into ongoing/train3/model.ckpt.
INFO:tensorflow:loss = 88.722855, step = 1
INFO:tensorflow:global_step/sec: 94.969
INFO:tensorflow:loss = 50.334488, step = 101 (1.054 sec)
INFO:tensorflow:global_step/sec: 242.342
INFO:tensorflow:loss = 56.153225, step = 201 (0.414 sec)
INFO:tensorflow:global_step/sec: 213.686
INFO:tensorflow:loss = 45.792007, step = 301 (0.470 sec)
INFO:tensorflow:global_step/sec: 174.084
INFO:tensorflow:loss = 37.485672, step = 401 (0.572 sec)
INFO:tensorflow:global_step/sec: 191.78
INFO:tensorflow:loss = 56.48449, step = 501 (0.524 sec)
INFO:tensorflow:global_step/sec: 163.436
INFO:tensorflow:loss = 32.528934, step = 601 (0.612 sec)
INFO:tensorflow:global_step/sec: 164.347
INFO:tensorflow:loss = 37.438057, step = 701 (0.607 sec)
INFO:tensorflow:global_step/sec: 154.274
INFO:tensorflow:loss = 61.1075, step = 801 (0.647 sec)
INFO:tensorflow:global_step/sec: 189.14
INFO:tensorflow:loss = 44.69645, step = 901 (0.531 sec)
INFO:tensorflow:Saving checkpoints for 1000 into ongoing/train3/model.ckpt.
INFO:tensorflow:Loss for final step: 44.18133.

<tensorflow.python.estimator.canned.linear.LinearClassifier at 0x1823021cf8>
model_imp.evaluate(input_fn=get_input_fn(df_test_new, 
                                      num_epochs=1,
                                      n_batch = 128,
                                      shuffle=False),
                                      steps=1000)
									  
INFO:tensorflow:Calling model_fn.
WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to "careful_interpolation" instead.
WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to "careful_interpolation" instead.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2018-06-02-08:28:52
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from ongoing/train3/model.ckpt-1000
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Evaluation [100/1000]
INFO:tensorflow:Finished evaluation at 2018-06-02-08:28:54
INFO:tensorflow:Saving dict for global step 1000: accuracy = 0.8358209, accuracy_baseline = 0.76377374, auc = 0.88401634, auc_precision_recall = 0.69599575, average_loss = 0.35122654, global_step = 1000, label/mean = 0.23622628, loss = 44.67437, precision = 0.68986726, prediction/mean = 0.23320661, recall = 0.55408216


{'accuracy': 0.8358209,
 'accuracy_baseline': 0.76377374,
 'auc': 0.88401634,
 'auc_precision_recall': 0.69599575,
 'average_loss': 0.35122654,
 'global_step': 1000,
 'label/mean': 0.23622628,
 'loss': 44.67437,
 'precision': 0.68986726,
 'prediction/mean': 0.23320661,
 'recall': 0.55408216}

Uusi tarkkuustaso on 83.58 prosenttia. Se on neljรค prosenttia edellistรค mallia korkeampi.

Lopuksi voit lisรคtรค sรครคnnรถstelytermin liiallisen sovituksen estรคmiseksi.

Vaihe 5) Hyperparametri: Lasso & Ridge

Mallisi voi kรคrsiรค liikaa or alasovitus.

  • Ylisovitus: Malli ei pysty yleistรคmรครคn ennustetta uusille tiedoille
  • Alasovitus: Malli ei pysty kaappaamaan tietojen mallia. eli lineaarinen regressio, kun data on epรคlineaarinen

Kun mallissa on paljon parametreja ja suhteellisen vรคhรคn dataa, se johtaa huonoihin ennusteisiin. Kuvittele, ettรค yhdellรค ryhmรคllรค on vain kolme havaintoa; malli laskee painon tรคlle ryhmรคlle. Painoa kรคytetรครคn ennustamiseen; jos tรคmรคn tietyn ryhmรคn testijoukon havainnot poikkeavat tรคysin harjoitusjoukosta, malli tekee vรครคrรคn ennusteen. Harjoittelusarjan arvioinnin aikana tarkkuus on hyvรค, mutta ei hyvรค testisarjalla, koska lasketut painot eivรคt ole oikeat kuvion yleistรคmiseksi. Tรคssรค tapauksessa se ei tee jรคrkevรครค ennustetta nรคkymรคttรถmille tiedoille.

Liiallisen sovituksen estรคmiseksi regularisointi antaa sinulle mahdollisuuden hallita tรคllaista monimutkaisuutta ja tehdรค siitรค yleistettรคvรคmpi. On olemassa kaksi sรครคnnรถstelytekniikkaa:

  • L1: Lasso
  • L2: Ridge

TensorFlow'ssa voit lisรคtรค nรคmรค kaksi hyperparametria optimoijaan. Esimerkiksi mitรค korkeampi hyperparametri L2, paino on yleensรค hyvin alhainen ja lรคhellรค nollaa. Sovitettu viiva on hyvin tasainen, kun taas L2 lรคhellรค nollaa tarkoittaa, ettรค painot ovat lรคhellรค sรครคnnรถllistรค lineaarista regressiota.

Voit kokeilla itse hyperparametrien eri arvoja ja katsoa, โ€‹โ€‹voitko lisรคtรค tarkkuustasoa.

Huomautuksia ettรค jos muutat hyperparametria, sinun on poistettava kansio kรคynnissรค/train4, muuten malli alkaa aiemmin opetetusta mallista.

Katsotaanpa kuinka tarkkuus hypeillรค on

model_regu = tf.estimator.LinearClassifier(
    model_dir="ongoing/train4", feature_columns=categorical_features+base_columns+education_x_occupation+age_buckets_x_education_x_occupation,
    optimizer=tf.train.FtrlOptimizer(
        learning_rate=0.1,
        l1_regularization_strength=0.9,
        l2_regularization_strength=5))

ULOS

INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {'_model_dir': 'ongoing/train4', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_service': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x1820d9c128>, '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}
model_regu.train(input_fn=get_input_fn(df_train_new, 
                                      num_epochs=None,
                                      n_batch = 128,
                                      shuffle=False),
                                      steps=1000)

ULOS

INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Saving checkpoints for 1 into ongoing/train4/model.ckpt.
INFO:tensorflow:loss = 88.722855, step = 1
INFO:tensorflow:global_step/sec: 77.4165
INFO:tensorflow:loss = 50.38778, step = 101 (1.294 sec)
INFO:tensorflow:global_step/sec: 187.889
INFO:tensorflow:loss = 55.38014, step = 201 (0.535 sec)
INFO:tensorflow:global_step/sec: 201.895
INFO:tensorflow:loss = 46.806694, step = 301 (0.491 sec)
INFO:tensorflow:global_step/sec: 217.992
INFO:tensorflow:loss = 38.68271, step = 401 (0.460 sec)
INFO:tensorflow:global_step/sec: 193.676
INFO:tensorflow:loss = 56.99398, step = 501 (0.516 sec)
INFO:tensorflow:global_step/sec: 202.195
INFO:tensorflow:loss = 33.263622, step = 601 (0.497 sec)
INFO:tensorflow:global_step/sec: 216.756
INFO:tensorflow:loss = 37.7902, step = 701 (0.459 sec)
INFO:tensorflow:global_step/sec: 240.215
INFO:tensorflow:loss = 61.732605, step = 801 (0.416 sec)
INFO:tensorflow:global_step/sec: 220.336
INFO:tensorflow:loss = 46.938225, step = 901 (0.456 sec)
INFO:tensorflow:Saving checkpoints for 1000 into ongoing/train4/model.ckpt.
INFO:tensorflow:Loss for final step: 43.4942.


<tensorflow.python.estimator.canned.linear.LinearClassifier at 0x181ff39e48>
model_regu.evaluate(input_fn=get_input_fn(df_test_new, 
                                      num_epochs=1,
                                      n_batch = 128,
                                      shuffle=False),
                                      steps=1000)

ulostulo

INFO:tensorflow:Calling model_fn.
WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to "careful_interpolation" instead.
WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to "careful_interpolation" instead.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2018-06-02-08:29:07
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from ongoing/train4/model.ckpt-1000
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Evaluation [100/1000]
INFO:tensorflow:Finished evaluation at 2018-06-02-08:29:09
INFO:tensorflow:Saving dict for global step 1000: accuracy = 0.83833915, accuracy_baseline = 0.76377374, auc = 0.8869794, auc_precision_recall = 0.7014905, average_loss = 0.34691378, global_step = 1000, label/mean = 0.23622628, loss = 44.12581, precision = 0.69720596, prediction/mean = 0.23662092, recall = 0.5579823





{'accuracy': 0.83833915,
 'accuracy_baseline': 0.76377374,
 'auc': 0.8869794,
 'auc_precision_recall': 0.7014905,
 'average_loss': 0.34691378,
 'global_step': 1000,
 'label/mean': 0.23622628,
 'loss': 44.12581,
 'precision': 0.69720596,
 'prediction/mean': 0.23662092,
 'recall': 0.5579823}

Tรคllรค hyperparametrilla lisรครคt hieman tarkkuusmittareita. Seuraavassa opetusohjelmassa opit parantamaan lineaarista luokittelijaa ydinmenetelmรคllรค.

Yhteenveto

Mallin kouluttamiseksi sinun on:

  • Mรครคrittele ominaisuudet: Riippumattomat muuttujat: X
  • Mรครคrittele tunniste: Riippuva muuttuja: y
  • Rakenna juna/koesarja
  • Mรครคritรค alkuperรคinen paino
  • Mรครคritรค hรคviรถfunktio: MSE
  • Optimoi malli: Gradienttilasku
  • Mรครคritellรค:
    • Oppimisnopeus
    • Epookin lukumรครคrรค
    • Erรคn koko
    • Luokan lukumรครคrรค

Tรคssรค opetusohjelmassa opit kรคyttรคmรครคn korkean tason API:ta lineaarisen regression luokittelijana. Sinun on mรครคritettรคvรค:

  1. Ominaisuussarakkeet. Jos jatkuva: tf.feature_column.numeric_column(). Voit tรคyttรครค luettelon python-luetteloiden ymmรคrtรคmisellรค
  2. Estimaattori: tf.estimator.LinearClassifier(feature_columns, model_dir, n_classes = 2)
  3. Funktio, jolla tuodaan tiedot, erรคn koko ja aikakausi: input_fn()

Sen jรคlkeen olet valmis harjoittelemaan, arvioimaan ja tekemรครคn ennusteen train(), arvioi() ja ennusta()

Voit parantaa mallin suorituskykyรค seuraavasti:

  • Kรคytรค polynomiregressiota
  • Vuorovaikutustermi: tf.feature_column.crossed_column
  • Lisรครค regularisointiparametri

Tiivistรค tรคmรค viesti seuraavasti: