Binaarinen luokitus TensorFlow: ssa: Lineaarinen luokittelijaesimerkki

Sisällysluettelo:

Anonim

Kaksi yleisintä valvottua oppimistehtävää ovat lineaarinen regressio ja lineaarinen luokittelija. Lineaarinen regressio ennustaa arvon, kun taas lineaarinen luokittelija ennustaa luokan. Tämä opetusohjelma on keskittynyt lineaariseen luokittelijaan.

Mikä on lineaarinen luokittelija?

Lineaarinen luokitin koneoppimisen on menetelmä löytää objektin luokka perustuu sen ominaisuudet tilastoluokitus. Se tekee luokittelupäätöksen kohteen ominaisuuksien lineaarisen yhdistelmän arvon perusteella. Lineaarista luokitinta käytetään käytännön ongelmissa, kuten asiakirjojen luokittelussa ja monien muuttujien ongelmissa.

Luokitteluongelmat edustavat noin 80 prosenttia koneoppimistehtävästä. Luokittelulla pyritään ennustamaan kunkin luokan todennäköisyys tietyn panosjoukon perusteella. Tunniste (ts. Riippuva muuttuja) on erillinen arvo, jota kutsutaan luokaksi.

  1. Jos tunnisteessa on vain kaksi luokkaa, oppimisalgoritmi on binääriluokitus.
  2. Moniklassinen luokittelija käsittelee tarroja, joissa on enemmän kuin kaksi luokkaa.

Esimerkiksi tyypillinen binääriluokitteluongelma on ennustaa todennäköisyys, jonka asiakas tekee toisen ostoksen. Ennusta kuvassa näytettävän eläimen tyyppi on moniluokkainen ongelma, koska eläimiä on enemmän kuin kaksi.

Tämän opetusohjelman teoreettisessa osassa keskitytään ensisijaisesti binääriluokkaan. Saat lisätietoja moniluokan lähtötoiminnosta tulevassa opetusohjelmassa.

Tässä opetusohjelmassa opit

  • Mikä on lineaarinen luokittelija?
  • Kuinka binääriluokitus toimii?
  • Kuinka mitata lineaarisen luokittelijan suorituskykyä?
  • Tarkkuus
  • Sekaannusmatriisi
  • Tarkkuus ja herkkyys
  • Lineaarinen TensorFlow-luokittelija
  • Vaihe 1) Tuo tiedot
  • Vaihe 2) Tietojen muuntaminen
  • Vaihe 3) Kouluta luokittelija
  • Vaihe 4) Paranna mallia
  • Vaihe 5) Hyperparametri: Lasso & Ridge

Kuinka binääriluokitus toimii?

Opit edellisessä opetusohjelmassa, että funktio koostuu kahdentyyppisistä muuttujista, riippuvasta muuttujasta ja joukosta ominaisuuksia (riippumattomia muuttujia). Lineaarisessa regressiossa riippuva muuttuja on reaaliluku ilman aluetta. Ensisijaisena tavoitteena on ennustaa sen arvo minimoimalla keskimääräinen neliövirhe.

TensorFlow-binaariluokitinta varten tunnisteella voi olla kaksi mahdollista kokonaislukuarvoa. Useimmissa tapauksissa se on joko [0,1] tai [1,2]. Tavoitteena on esimerkiksi ennustaa asiakas ostaa tuotteen vai ei. Tarra määritellään seuraavasti:

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

Malli käyttää ominaisuuksia X luokittelemaan kukin asiakas todennäköisimpään luokkaan, johon hän kuuluu, nimittäin potentiaalinen ostaja tai ei.

Menestyksen todennäköisyys lasketaan logistisella regressiolla . 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-binääriluokituksen esimerkin mukaisesti:

missä 0 on joukko painoja, ominaisuuksia ja b-esijännitystä.

Toiminto voidaan jakaa kahteen osaan:

  • Lineaarinen malli
  • Logistinen toiminto

Lineaarinen malli

Olet jo perehtynyt tapaan, jolla painot lasketaan. Painot lasketaan pistetulolla: Y on kaikkien ominaisuuksien x i lineaarinen funktio . Jos mallilla ei ole ominaisuuksia, ennuste on yhtä suuri kuin bias, b.

Painot osoittavat ominaisuuksien x i ja tarran y välisen korrelaation suunnan . Positiivinen korrelaatio lisää positiivisen luokan todennäköisyyttä, kun taas negatiivinen korrelaatio johtaa todennäköisyyden lähemmäksi nollaa (eli negatiivista luokkaa).

Lineaarinen malli palauttaa vain reaaliluvun, joka on ristiriidassa alueen [0,1] todennäköisyysmittauksen kanssa. Logistista toimintoa tarvitaan muuntaa lineaarinen mallilähtö todennäköisyydeksi,

Logistinen toiminto

Logistisella funktiolla tai sigmoidilla funktiolla on S-muoto ja tämän funktion ulostulo on aina välillä 0 ja 1.

Esimerkki logistisista toiminnoista

Lineaarisen regressiolähdön tulos on helppo korvata sigmoidifunktiolla. Tuloksena on uusi luku todennäköisyydellä 0 ja 1.

Luokittelija voi muuntaa todennäköisyyden luokaksi

  • Arvot välillä 0 - 0,49 tulevat luokkaan 0
  • Arvot välillä 0,5 - 1 tulevat luokaksi 1

Kuinka mitata lineaarisen luokittelijan suorituskykyä?

Tarkkuus

Luokittelijan kokonaisteho mitataan tarkkuusmittarilla. Tarkkuus kerää kaikki oikeat arvot jaettuna havaintojen kokonaismäärällä. Esimerkiksi tarkkuusarvo 80 prosenttia tarkoittaa, että malli on oikea 80 prosentissa tapauksista.

Mittaa lineaarisen luokittelijan suorituskyky tarkkuusmetriikan avulla

Voit havaita puutteen tällä mittarilla, erityisesti epätasapainoluokassa. Epätasapainotietojoukko tapahtuu, kun havaintojen määrä ryhmää kohden ei ole sama. Sanokaamme; yrität luokitella harvinaisen tapahtuman logistisella toiminnolla. Kuvittele, että luokittelija yrittää arvioida potilaan kuoleman sairauden jälkeen. Tiedoissa 5 prosenttia potilaista kuolee. Voit kouluttaa luokittelijan ennustamaan kuolemien määrän ja arvioimaan suorituskykyä tarkkuusmittarilla. Jos luokittelija ennustaa 0 kuoleman koko tietojoukolle, se on oikea 95 prosentissa tapauksista.

Sekaannusmatriisi

Parempi tapa arvioida luokittelijan suorituskykyä on tarkastella sekaannusmatriisia.

Mittaa lineaarisen luokittelijan suorituskyky Confusion-matriisin avulla

Sekaannusmatriisi visualisoi luokittelijan tarkkuuden vertaamalla todellisia ja ennustettuja luokkia, kuten yllä olevassa lineaarisen luokittelijan esimerkissä on esitetty. Binaarinen sekaannusmatriisi koostuu neliöistä:

  • TP: Todellinen positiivinen: Ennustetut arvot on ennustettu oikein todellisiksi positiivisiksi
  • FP: Ennustetut arvot ennustivat virheellisesti todellisen positiivisen. ts. negatiiviset arvot ennustetaan positiivisiksi
  • FN: False Negative: Positiiviset arvot ennustetaan negatiivisiksi
  • TN: Todellinen negatiivinen: 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 todellisesta positiivisesta ja väärästä positiivisesta. Joissakin tapauksissa on parempi olla suppeampi metriikka.

Tarkkuus

Tarkkuustiedot osoittavat positiivisen luokan tarkkuuden. Se mittaa, kuinka todennäköisesti positiivisen luokan ennuste on oikea.

Suurin pistemäärä on 1, kun luokittelija luokittelee kaikki positiiviset arvot täydellisesti. Pelkkä tarkkuus ei ole kovin hyödyllinen, koska siinä jätetään huomioimatta negatiivinen luokka. Metriikka on yleensä pariliitetty Recall-metriikkaan. Takaisinkutsua kutsutaan myös herkkyydeksi tai todelliseksi positiiviseksi nopeudeksi.

Herkkyys

Herkkyys laskee oikein havaittujen positiivisten luokkien suhteen. Tämä mittari kertoo kuinka hyvä malli on tunnistaa positiivinen luokka.

Lineaarinen TensorFlow-luokittelija

Tässä opetusohjelmassa käytämme väestönlaskenta-aineistoa. Tarkoituksena on käyttää väestönlaskentatiedon muuttujia tulotason ennustamiseen. Huomaa, että tulot ovat binäärimuuttujia

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

Tämä muuttuja on tunnisteesi

Tämä tietojoukko sisältää kahdeksan kategorista muuttujaa:

  • työpaikalla
  • koulutus
  • avioliitto
  • ammatti
  • suhde
  • rotu
  • sukupuoli
  • Kotimaa

lisäksi kuusi jatkuvaa muuttujaa:

  • ikä
  • fnlwgt
  • koulutus_num
  • myyntivoitto
  • pääoman menetys
  • tuntia viikkoa

Tämän TensorFlow Classification -esimerkin avulla ymmärrät, kuinka kouluttaa lineaarisia TensorFlow-luokittelijoita TensorFlow-estimaattorilla ja kuinka parantaa tarkkuusmetriikkaa.

Menemme 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 tfimport pandas as pd 

Seuraavaksi tuot tiedot UCI: n arkistosta ja määrität sarakkeiden nimet. NIMITÄ sarakkeet PANDA-tietokehyksessä sarakkeiden avulla.

Huomaa, että koulutat luokittelijan Pandas-tietokehyksellä.

## Define path dataCOLUMNS = ['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"

Verkossa tallennetut tiedot on jo jaettu junajoukon 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)

Junajoukko sisältää 32 561 havaintoa ja testisarja 16 281

print(df_train.shape, df_test.shape)print(df_train.dtypes)(32561, 15) (16281, 15)age int64workclass objectfnlwgt int64education objecteducation_num int64marital objectoccupation objectrelationship objectrace objectsex objectcapital_gain int64capital_loss int64hours_week int64native_country objectlabel objectdtype: object

Tensorflow vaatii Boolen-arvon luokittelijan kouluttamiseksi. Sinun on lähetettävä arvot merkkijonosta kokonaislukuun. Tarra on store objektina, mutta sinun on muunnettava se numeeriseksi arvoksi. Alla oleva koodi luo sanakirjan, joka sisältää arvot muunnettaviksi ja silmukoita sarakekohdan yli. Huomaa, että teet tämän toiminnon kahdesti, yksi junatestiä varten, toinen testisarjaa varten

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 24720 tuloa, jotka ovat alle 50k ja 7841 edellä. Suhde on melkein sama testisarjassa. Katso lisätietoja tästä oppaasta Facetsista.

print(df_train["label"].value_counts())### The model will be correct in atleast 70% of the caseprint(df_test["label"].value_counts())## Unbalanced labelprint(df_train.dtypes)0 247201 7841Name: label, dtype: int640 124351 3846Name: label, dtype: int64age int64workclass objectfnlwgt int64education objecteducation_num int64marital objectoccupation objectrelationship objectrace objectsex objectcapital_gain int64capital_loss int64hours_week int64native_country objectlabel int64dtype: object

Vaihe 2) Tietojen muuntaminen

Muutama vaihe vaaditaan ennen lineaarisen luokittelijan kouluttamista Tensorflow-sovelluksella. Sinun on valmisteltava ominaisuudet, jotka sisällytetään malliin. Vertailuregressiossa käytetään alkuperäisiä tietoja muuntamatta.

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

Hyvä käytäntö on määritellä kaksi ominaisuuksien luetteloa tyypin perusteella ja välittää ne sitten estimaattorin ominaisuussarakkeisiin.

Aloitat muuntamalla jatkuvia ominaisuuksia ja määritä sitten ämpäri kategorisilla tiedoilla.

Tietojoukon ominaisuuksilla on kaksi muotoa:

  • Kokonaisluku
  • Esine

Jokainen ominaisuus on lueteltu kahdessa seuraavassa muuttujassa tyypin mukaan.

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

Feature_column on varustettu objektinumerosarakkeella, joka auttaa muuttamaan jatkuvia muuttujia tensoriksi. Alla olevassa koodissa muunnat kaikki muuttujat kohteesta CONTI_FEATURES tensoriksi, jolla on lukuarvo. Tämä on pakollista mallin rakentamiseksi. Kaikki riippumattomat muuttujat on muunnettava oikean tyyppiseksi tensoriksi.

Alla kirjoitamme koodin, jonka avulla voit nähdä, mitä Feature_column.numeric_column takana tapahtuu. Tulostamme muunnetun iän arvon. Se on selitystarkoitusta varten, joten python-koodia ei tarvitse ymmärtää. Voit viitata virallisiin asiakirjoihin ymmärtääksesi koodit.

def print_transformation(feature = "age", continuous = True, size = 2):#X = fc.numeric_column(feature)## Create feature namefeature_names = [feature]## Create dict with the datad = dict(zip(feature_names, [df_train[feature]]))## Convert ageif 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 valueinput_layer = tf.feature_column.input_layer(features=d,feature_columns=feature_columns)## Create lookup tablezero = tf.constant(0, dtype=tf.float32)where = tf.not_equal(input_layer, zero)## Return lookup tbleindices = tf.where(where)values = tf.gather_nd(input_layer, indices)## Initiate graphsess = tf.Session()## Print valueprint(sess.run(input_layer))print_transformation(feature = "age", continuous = True)[[39.][50.][38.]… [58.][22.][52.]]

Arvot ovat täsmälleen samat kuin kohdassa df_train

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

TensorFlow-dokumentaation mukaan kategorisia tietoja voidaan muuntaa eri tavoin. Jos jonkin ominaisuuden sanastoluettelo on tiedossa ja sillä ei ole paljon arvoja, on mahdollista luoda kategorinen sarake kategorian_sarakkeella_sanastoluettelon kanssa. Se määrittää kaikille yksilöllisille sanastoluetteloille tunnuksen.

Esimerkiksi, jos muuttujan tilalla on kolme erillistä arvoa:

  • Aviomies
  • Vaimo
  • Yksittäinen

Sitten määritetään kolme henkilötodistusta. Esimerkiksi aviomiehellä on tunnus 1, vaimolla tunnus 2 ja niin edelleen.

Havainnollistamista varten voit käyttää tätä koodia muuntaa objektimuuttujan kategoriseksi sarakkeeksi TensorFlow'ssa.

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

riviä

sukupuoli

muutoksen jälkeen

Uros

Nainen

1

Uros

=>

1

0

2

Uros

=>

1

0

3

Nainen

=>

0

1

Tensorflow: ssa:

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'])

Alla on lisätty Python-koodi koodauksen tulostamiseen. Jälleen sinun ei tarvitse ymmärtää koodia, tarkoituksena on nähdä muutos

Nopeampi tapa muuntaa tietoja on kuitenkin käyttää menetelmää kategorinen_sarake_wash_bashet. Merkkijonomuuttujien muuttaminen harvaan matriisiin on hyödyllistä. Harvinainen matriisi on matriisi, jolla on enimmäkseen nolla. Menetelmä hoitaa kaiken. Sinun tarvitsee vain määrittää ryhmien lukumäärä ja avainsarake. Ryhmien lukumäärä on Ryhmien enimmäismäärä, jonka Tensorflow voi luoda. Avainsarake on yksinkertaisesti muunnettavan sarakkeen nimi.

Alla olevassa koodissa luodaan silmukka kaikkiin kategorisiin ominaisuuksiin.

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 lineaariselle regressiolle ja lineaariselle luokitukselle.

  • Lineaarinen regressio: LinearRegressor
  • Lineaarinen luokitus: LinearClassifier

Lineaarisen luokittelijan syntaksit ovat samat kuin lineaarisen regressio-oppaassa, lukuun ottamatta yhtä argumenttia, n_luokka. Sinun on määriteltävä ominaisuussarake, mallihakemisto ja verrattava lineaariseen regresoriin; sinulla on määritettävä luokan numero. Logit-regressiota varten luokan lukumäärä on yhtä suuri kuin 2.

Malli laskee sarakkeiden painot, jotka sisältyvät jatkuviin_ominaisuuksiin ja kategorisiin_ominaisuuksiin.

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

LÄHTÖ:

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':, '_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 luokittelija on määritelty, voit luoda syöttöfunktion. Menetelmä on sama kuin lineaarisen regressorin opetusohjelmassa. Tässä käytetään eräkokoa 128 ja sekoitat tietoja.

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)

Luodaan funktio lineaarisen estimaattorin edellyttämillä argumenteilla, ts. Aikakausien lukumäärä, erien määrä ja sekoitetaan datajoukko tai muistiinpano. Koska käytät Pandas-menetelmää tietojen siirtämiseen malliin, sinun on määriteltävä X-muuttujat pandojen datakehykseksi. Huomaa, että siirryt kaikkiin FEATURES-sovellukseen tallennettuihin tietoihin.

Koulutetaan mallia objektimallilla. Juna. Aiemmin määriteltyä toimintoa käytetään mallin syöttämiseen sopivilla arvoilla. Huomaa, että asetat eräkoon 128 ja aikakausien lukumääräksi Ei mitään. Mallia koulutetaan yli tuhannessa vaiheessa.

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 = 1INFO:tensorflow:global_step/sec: 65.8282INFO:tensorflow:loss = 52583.64, step = 101 (1.528 sec)INFO:tensorflow:global_step/sec: 118.386INFO:tensorflow:loss = 25203.816, step = 201 (0.837 sec)INFO:tensorflow:global_step/sec: 110.542INFO:tensorflow:loss = 54924.312, step = 301 (0.905 sec)INFO:tensorflow:global_step/sec: 199.03INFO:tensorflow:loss = 68509.31, step = 401 (0.502 sec)INFO:tensorflow:global_step/sec: 167.488INFO:tensorflow:loss = 9151.754, step = 501 (0.599 sec)INFO:tensorflow:global_step/sec: 220.155INFO:tensorflow:loss = 34576.06, step = 601 (0.453 sec)INFO:tensorflow:global_step/sec: 199.016INFO:tensorflow:loss = 36047.117, step = 701 (0.503 sec)INFO:tensorflow:global_step/sec: 197.531INFO:tensorflow:loss = 22608.148, step = 801 (0.505 sec)INFO:tensorflow:global_step/sec: 208.479INFO: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.

Huomaa, että tappio pieneni myöhemmin 100 viimeisen vaiheen aikana, eli 901: stä 1000: een.

Lopullinen tappio tuhannen iteraation jälkeen on 5444. Voit arvioida mallisi testisarjassa ja nähdä suorituskyvyn. Mallin suorituskyvyn arvioimiseksi sinun on käytettävä objektiarviointia. Syötät mallia testijoukolla ja asetat aikakausien lukumääräksi 1, eli tiedot menevät 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:22INFO:tensorflow:Graph was finalized.INFO:tensorflow:Restoring parameters from ongoing/train/model.ckpt-1000INFO: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:23INFO: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 teoreettisessa osassa oppimasi mittarit. Ilman yllätystä, tarkkuus on suuri epätasapainoisen tarran takia. Itse asiassa malli toimii hieman paremmin kuin satunnainen arvaus. Kuvittele, että malli ennustaa kaikille kotitalouksille, joiden tulot ovat alle 50 000, sitten mallin tarkkuus on 70 prosenttia. Lähemmästä analyysistä näet, että ennuste ja palautus ovat melko alhaisia.

Vaihe 4) Paranna mallia

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

Polynomiregressio on instrumentaali, kun tiedoissa on epälineaarisuutta. On kaksi tapaa siepata epälineaarisuus dataan.

  • Lisää polynomitermi
  • Ryhmittele jatkuva muuttuja kategoriseksi muuttujaksi

Polynomi termi

Alla olevasta kuvasta näet, mikä on polynomiregressio. Se on yhtälö X-muuttujien kanssa, joilla on erilainen teho. Toisen asteen polynomiregressiossa on kaksi muuttujaa, X ja X neliössä. Kolmannella asteella on kolme muuttujaa, X, X 2 ja X 3

Mikä on polynomiregressio

Alla rakennettiin kaavio, jossa oli kaksi muuttujaa, X ja Y. On selvää, että suhde ei ole lineaarinen. Jos lisätään lineaarinen regressio, voimme nähdä, että malli ei pysty kaappaamaan kuviota (vasen kuva).

Katsokaa nyt vasemmanpuoleista kuvaa alla olevasta kuvasta, lisäsimme regressioon viiden aikavälin (eli y = x + x 2 + x 3 + x 4 + x 5. Malli sieppaa nyt kuvion paremmin. polynomisen regression voima.

Palataan takaisin esimerkkiin. Ikä ei ole lineaarisessa suhteessa tuloihin. Varhaisella iällä voi olla tasainen tulo lähellä nollaa, koska lapset tai nuoret eivät toimi. Sitten se kasvaa työikäisenä ja vähenee eläkkeelle siirtymisen aikana. Se on tyypillisesti käänteinen-U-muoto. Yksi tapa kaapata tämä malli on lisätä teho kaksi regressioon.

Katsotaanpa, lisääkö se tarkkuutta.

Tämä uusi ominaisuus on lisättävä aineistoon ja jatkuvien ominaisuuksien luetteloon.

Lisäät uuden muuttujan juna- ja testiaineistoon, joten on helpompaa kirjoittaa funktio.

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ä harjoitusjoukko
  • df_te: määritä testijoukko
  • var_name = 'age': Määritä muutettava muuttuja

Voit käyttää objektia pow (2) neliöimään vaihtelevan iän. Huomaa, että uusi muuttuja on nimeltään 'uusi'

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äette, uudella tietojoukolla on vielä yksi ominaisuus.

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

Neliömuuttujaa kutsutaan uudeksi tietojoukossa. 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]

Huomaa , että muutit kaavion hakemistoa. Et voi kouluttaa eri malleja samaan hakemistoon. Se tarkoittaa, että sinun on muutettava argumentin model_dir polkua. Jos et, TensorFlow heittää virheen.

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':, '_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 luokittelija on suunniteltu uudella tietojoukolla, voit kouluttaa 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 = 1INFO:tensorflow:global_step/sec: 81.487INFO:tensorflow:loss = 70077.66, step = 101 (1.228 sec)INFO:tensorflow:global_step/sec: 111.169INFO:tensorflow:loss = 49522.082, step = 201 (0.899 sec)INFO:tensorflow:global_step/sec: 128.91INFO:tensorflow:loss = 107120.57, step = 301 (0.776 sec)INFO:tensorflow:global_step/sec: 132.546INFO:tensorflow:loss = 12814.152, step = 401 (0.755 sec)INFO:tensorflow:global_step/sec: 162.194INFO:tensorflow:loss = 19573.898, step = 501 (0.617 sec)INFO:tensorflow:global_step/sec: 204.852INFO:tensorflow:loss = 26381.986, step = 601 (0.488 sec)INFO:tensorflow:global_step/sec: 188.923INFO:tensorflow:loss = 23417.719, step = 701 (0.529 sec)INFO:tensorflow:global_step/sec: 192.041INFO:tensorflow:loss = 23946.049, step = 801 (0.521 sec)INFO:tensorflow:global_step/sec: 197.025INFO: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.
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:37INFO:tensorflow:Graph was finalized.INFO:tensorflow:Restoring parameters from ongoing/train1/model.ckpt-1000INFO: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:39INFO: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: een. Katsotaanpa, voitko pärjätä paremmin yhdistämällä ryhmittelyn ja vuorovaikutustermin yhdessä.

Ämpäri ja vuorovaikutus

Kuten aiemmin näit, lineaarinen luokittelija ei kykene ottamaan ikätulot huomioon oikein. Tämä johtuu siitä, että se oppii yhden painon jokaiselle ominaisuudelle. Luokittelijan helpottamiseksi yksi asia, jonka voit tehdä, on ominaisuus. Ryhmittely muuntaa numeerisen ominaisuuden useaksi tietyksi sen mukaan, mihin alueeseen se kuuluu, ja jokainen näistä uusista ominaisuuksista osoittaa, kuuluuko henkilön ikä kyseiselle alueelle.

Näiden uusien ominaisuuksien avulla lineaarinen malli voi kaapata suhteen oppimalla eri painot kullekin kauhalle.

TensorFlow-ohjelmassa se tehdään sarakkeella bucketized_column. Sinun on lisättävä arvojen alue 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ä on epälineaarinen tulojen kanssa. Toinen tapa parantaa mallia on vuorovaikutus. TensorFlow-sanalla se on ominaisuuden ylitys. Ominaisuuden ylitys on tapa luoda uusia ominaisuuksia, jotka ovat olemassa olevien yhdistelmiä, mikä voi olla hyödyllistä lineaariselle luokittelijalle, joka ei voi mallintaa ominaisuuksien välistä vuorovaikutusta.

Voit jakaa iän toisella ominaisuudella, kuten koulutuksella. Toisin sanoen joillakin ryhmillä on todennäköisesti korkeat tulot ja toisilla matala (Ajattele Ph.D.-opiskelijaa).

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äisen ominaisuuden sarakkeen, käytä crossed_column muuttujien kanssa suluissa ylittämistä varten. Hash_bucket_size osoittaa suurin mahdollinen ylitysmahdollisuus. Voit luoda muuttujien välisen vuorovaikutuksen (vähintään yhden muuttujan on oltava kategorinen) käyttämällä tf.feature_column.crossed_column. Tämän objektin käyttämiseksi sinun on lisättävä hakasulkeisiin vuorovaikutteinen muuttuja ja toinen argumentti, kauhan koko. Kauhan koko on suurin mahdollinen ryhmämäärä muuttujassa. Tässä asetat sen arvoksi 1000, koska et tiedä tarkkaa ryhmien lukumäärää

age_buckets on ruudullinen ennen sen lisäämistä ominaisuussarakkeisiin. Lisäät myös uudet ominaisuudet ominaisuussarakkeisiin ja valmistelet 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)

LÄHTÖ

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': , '_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 uuden mallin ja parantamaan sen 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 = 1INFO:tensorflow:global_step/sec: 94.969INFO:tensorflow:loss = 50.334488, step = 101 (1.054 sec)INFO:tensorflow:global_step/sec: 242.342INFO:tensorflow:loss = 56.153225, step = 201 (0.414 sec)INFO:tensorflow:global_step/sec: 213.686INFO:tensorflow:loss = 45.792007, step = 301 (0.470 sec)INFO:tensorflow:global_step/sec: 174.084INFO:tensorflow:loss = 37.485672, step = 401 (0.572 sec)INFO:tensorflow:global_step/sec: 191.78INFO:tensorflow:loss = 56.48449, step = 501 (0.524 sec)INFO:tensorflow:global_step/sec: 163.436INFO:tensorflow:loss = 32.528934, step = 601 (0.612 sec)INFO:tensorflow:global_step/sec: 164.347INFO:tensorflow:loss = 37.438057, step = 701 (0.607 sec)INFO:tensorflow:global_step/sec: 154.274INFO:tensorflow:loss = 61.1075, step = 801 (0.647 sec)INFO:tensorflow:global_step/sec: 189.14INFO: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.
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:52INFO:tensorflow:Graph was finalized.INFO:tensorflow:Restoring parameters from ongoing/train3/model.ckpt-1000INFO: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:54INFO: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 korkeampi kuin edellinen malli.

Lopuksi voit lisätä laillistustermin ylikuormituksen estämiseksi.

Vaihe 5) Hyperparametri: Lasso & Ridge

Mallisi voi kärsiä overfitting tai underfitting .

  • Yliasennus: Malli ei pysty yleistämään ennustetta uusille tiedoille
  • Alivarustus: Malli ei pysty kaappaamaan tietojen mallia. ts. lineaarinen regressio, kun data on epälineaarinen

Kun mallissa on paljon parametreja ja suhteellisen pieni määrä tietoa, se johtaa heikkoihin ennusteisiin. Kuvittele, yhdellä ryhmällä on vain kolme havaintoa; malli laskee tämän ryhmän painon. Painoa käytetään ennustamiseen; Jos tämän ryhmän testijoukon havainnot poikkeavat täysin harjoitussarjasta, malli tekee väärän ennusteen. Harjoittelusarjan arvioinnin aikana tarkkuus on hyvä, mutta ei hyvä testisarjan kanssa, koska lasketut painot eivät ole totta mallin yleistämiseksi. Tässä tapauksessa se ei tee kohtuullista ennustetta näkymättömistä tiedoista.

Yliasennuksen estämiseksi laillistaminen antaa sinulle mahdollisuuden hallita tällaista monimutkaisuutta ja tehdä siitä yleisempi. On olemassa kaksi laillistamistekniikkaa:

  • L1: Lasso
  • L2: Harjanne

TensorFlow-sovelluksessa voit lisätä nämä kaksi hyperparametriä optimoijaan. Esimerkiksi mitä korkeampi hyperparametri L2, painolla on taipumus olla hyvin pieni ja lähellä nollaa. Asennettu viiva on hyvin tasainen, kun taas nollan lähellä oleva L2 tarkoittaa, että painot ovat lähellä säännöllistä lineaarista regressiota.

Voit kokeilla itse hyperparametrien erilaista arvoa ja nähdä, pystytkö lisäämään tarkkuustasoa.

Huomaa, että jos vaihdat hyperparametriä, sinun on poistettava käynnissä oleva / train4-kansio, muuten malli alkaa aiemmin koulutetulla mallilla.

Katsotaanpa, kuinka tarkkuus hypeellä 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))

OUTUT

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': , '_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)

OUTUT

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 = 1INFO:tensorflow:global_step/sec: 77.4165INFO:tensorflow:loss = 50.38778, step = 101 (1.294 sec)INFO:tensorflow:global_step/sec: 187.889INFO:tensorflow:loss = 55.38014, step = 201 (0.535 sec)INFO:tensorflow:global_step/sec: 201.895INFO:tensorflow:loss = 46.806694, step = 301 (0.491 sec)INFO:tensorflow:global_step/sec: 217.992INFO:tensorflow:loss = 38.68271, step = 401 (0.460 sec)INFO:tensorflow:global_step/sec: 193.676INFO:tensorflow:loss = 56.99398, step = 501 (0.516 sec)INFO:tensorflow:global_step/sec: 202.195INFO:tensorflow:loss = 33.263622, step = 601 (0.497 sec)INFO:tensorflow:global_step/sec: 216.756INFO:tensorflow:loss = 37.7902, step = 701 (0.459 sec)INFO:tensorflow:global_step/sec: 240.215INFO:tensorflow:loss = 61.732605, step = 801 (0.416 sec)INFO:tensorflow:global_step/sec: 220.336INFO: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.
model_regu.evaluate(input_fn=get_input_fn(df_test_new,num_epochs=1,n_batch = 128,shuffle=False),steps=1000)

LÄHTÖ

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:07INFO:tensorflow:Graph was finalized.INFO:tensorflow:Restoring parameters from ongoing/train4/model.ckpt-1000INFO: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:09INFO: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 tarkkuustietoja hieman. Seuraavassa opetusohjelmassa opit parantamaan lineaarista luokitinta ytimen menetelmällä.

Yhteenveto

Mallin kouluttamiseksi sinun on:

  • Määritä ominaisuudet: Itsenäiset muuttujat: X
  • Määritä tunniste: Riippuva muuttuja: y
  • Rakenna juna / testisarja
  • Määritä alkuperäinen paino
  • Määritä häviöfunktio: MSE
  • Optimoi malli: kaltevuuslasku
  • Määritellä:
    • Oppimisnopeus
    • Aikakauden lukumäärä
    • Erän koko
    • Luokan numero

Tässä opetusohjelmassa opit käyttämään korkean tason API: ta lineaarisessa regressioluokittelussa. Sinun on määriteltävä:

  1. Feature sarakkeet. Jos jatkuva: tf.feature_column.numeric_column (). Voit täyttää luettelon python-luettelon ymmärtämisellä
  2. Estimaattori: tf.estimator.LinearClassifier (ominaisuus_sarakkeet, mallin_hakemisto, n_luokat = 2)
  3. Toiminto tietojen, eräkoon ja aikakauden tuomiseksi: input_fn ()

Sen jälkeen olet valmis harjoittelemaan, arvioimaan ja tekemään ennusteen junalla (), arvioimaan () ja ennustamaan ()

Parantaaksesi mallin suorituskykyä voit:

  • Käytä polynomiregressiota
  • Vuorovaikutustermi: tf.feature_column.crossed_column
  • Lisää tasoitusparametri