Dvejetainė klasifikacija sistemoje „TensorFlow“: tiesinio klasifikatoriaus pavyzdys

Dvi dažniausiai prižiūrimos mokymosi užduotys yra tiesinė regresija ir tiesinis klasifikatorius. Tiesinė regresija numato vertę, o linijinis klasifikatorius - klasę. Ši pamoka skirta tiesiniam klasifikatoriui.

Kas yra tiesinis klasifikatorius?

Linijinis klasifikatorius automatu mokymasis yra būdas rasti objekto klasę, remiantis jų savybėmis statistinės klasifikacijos. Jis priima klasifikavimo sprendimą pagal objekto charakteristikų linijinio derinio vertę. Linijinis klasifikatorius naudojamas praktinėms problemoms, tokioms kaip dokumentų klasifikavimas ir problemoms, turinčioms daug kintamųjų.

Klasifikavimo problemos sudaro maždaug 80 procentų mašininio mokymosi užduoties. Klasifikacija siekiama numatyti kiekvienos klasės tikimybę, atsižvelgiant į įvesties rinkinį. Etiketė (ty priklausomas kintamasis) yra diskretiška reikšmė, vadinama klase.

  1. Jei etiketėje yra tik dvi klasės, mokymosi algoritmas yra dvejetainis klasifikatorius.
  2. Daugiasluoksnis klasifikatorius naudoja etiketes, turinčias daugiau nei dvi klases.

Pavyzdžiui, tipinė dvejetainės klasifikacijos problema yra numatyti tikimybę, kad klientas įsigis antrą kartą. Numatykite, kad paveikslėlyje rodomo gyvūno tipas yra daugiasluoksnė klasifikavimo problema, nes egzistuoja daugiau nei dvi gyvūnų veislės.

Teorinėje šio vadovėlio dalyje pagrindinis dėmesys skiriamas dvejetainiai klasei. Daugiau apie daugialypės išvesties funkciją sužinosite būsimoje mokymo programoje.

Šioje pamokoje sužinosite

  • Kas yra tiesinis klasifikatorius?
  • Kaip veikia dvejetainis klasifikatorius?
  • Kaip įvertinti linijinio klasifikatoriaus veikimą?
  • Tikslumas
  • Sumišimo matrica
  • Tikslumas ir jautrumas
  • Linijinis klasifikatorius su „TensorFlow“
  • 1 žingsnis) Importuokite duomenis
  • 2 žingsnis) Duomenų konvertavimas
  • 3 žingsnis. Mokykite klasifikatorių
  • 4 žingsnis) Patobulinkite modelį
  • 5 žingsnis) Hiperparametras: „Lasso & Ridge“

Kaip veikia dvejetainis klasifikatorius?

Ankstesnėje pamokoje sužinojote, kad funkciją sudaro dviejų rūšių kintamieji, priklausomas kintamasis ir funkcijų rinkinys (nepriklausomi kintamieji). Tiesinės regresijos metu priklausomas kintamasis yra tikrasis skaičius be diapazono. Pagrindinis tikslas yra numatyti jo vertę sumažinant vidutinę paklaidą kvadrate.

„TensorFlow“ dvejetainio klasifikatoriaus etiketėje galėjo būti dvi galimos sveikojo skaičiaus reikšmės. Dažniausiai tai yra [0,1] arba [1,2]. Pavyzdžiui, tikslas yra numatyti, ar klientas pirks produktą, ar ne. Etiketė apibrėžiama taip:

  • Y = 1 (klientas įsigijo produktą)
  • Y = 0 (klientas neperka produkto)

Modelis naudoja X ypatybes, kad klasifikuotų kiekvieną klientą į labiausiai tikėtiną klasę, kuriai jis priklauso, būtent potencialų pirkėją ar ne.

Sėkmės tikimybė apskaičiuojama logistine regresija . Algoritmas apskaičiuos tikimybę, remdamasis savybe X, ir prognozuoja sėkmę, kai ši tikimybė viršija 50 proc. Formaliau tikimybė apskaičiuojama taip, kaip parodyta toliau pateiktame „TensorFlow“ dvejetainės klasifikacijos pavyzdyje:

kur 0 yra svorių rinkinys, ypatybės ir b šališkumas.

Funkciją galima suskaidyti į dvi dalis:

  • Linijinis modelis
  • Logistinė funkcija

Linijinis modelis

Jūs jau esate susipažinę su svorių skaičiavimo būdu. Svoriai apskaičiuojami naudojant taškinį sandaugą: Y yra linijinė visų x i ypatybių funkcija . Jei modelis neturi požymių, prognozė lygi šališkumui, b.

Svoriai nurodo ypatybių x i ir etiketės y koreliacijos kryptį . Teigiama koreliacija padidina teigiamos klasės tikimybę, o neigiama koreliacija tikimybę priartina prie 0 (ty neigiamos klasės).

Linijinis modelis pateikia tik realųjį skaičių, kuris neatitinka diapazono [0,1] tikimybės mato. Logistinė funkcija reikalinga norint konvertuoti tiesinio modelio išvestį į tikimybę,

Logistinė funkcija

Logistinė arba sigmoidinė funkcija turi S formą, o šios funkcijos išvestis visada yra nuo 0 iki 1.

Logistinių funkcijų pavyzdys

Linijinės regresijos išvestį lengva pakeisti sigmoidine funkcija. Gaunamas naujas skaičius, kurio tikimybė yra nuo 0 iki 1.

Klasifikatorius gali transformuoti tikimybę į klasę

  • Vertės nuo 0 iki 0,49 tampa 0 klase
  • Vertės nuo 0,5 iki 1 tampa 1 klase

Kaip įvertinti linijinio klasifikatoriaus veikimą?

Tikslumas

Bendras klasifikatoriaus veikimas matuojamas tikslumo metrika. Tikslumas renka visas teisingas reikšmes, padalytas iš bendro stebėjimų skaičiaus. Pavyzdžiui, 80 procentų tikslumo reikšmė reiškia, kad modelis yra teisingas 80 procentų atvejų.

Išmatuokite linijinio klasifikatoriaus našumą naudodami tikslumo metriką

Naudodami šią metriką, galite pastebėti trūkumą, ypač kalbant apie disbalanso klasę. Disbalanso duomenų rinkinys atsiranda, kai stebėjimų skaičius vienoje grupėje nėra vienodas. Tarkim; bandote klasifikuoti retą įvykį su logistine funkcija. Įsivaizduokite, klasifikatorius bando įvertinti paciento mirtį po ligos. Duomenimis, 5 proc. Pacientų miršta. Galite mokyti klasifikatorių numatyti mirties skaičių ir naudoti tikslumo metriką, kad įvertintumėte pasirodymus. Jei klasifikatorius numato 0 mirčių visam duomenų rinkiniui, tai bus teisinga 95 procentais atvejų.

Sumišimo matrica

Geresnis būdas įvertinti klasifikatoriaus našumą yra pažvelgti į painiavos matricą.

Išmatuokite linijinio klasifikatoriaus našumą naudodami „Confusion“ matricą

Sumišimo matrica vizualizuoja klasifikatoriaus tikslumą lyginant faktines ir numatomas klases, kaip parodyta aukščiau pateiktame tiesinio klasifikatoriaus pavyzdyje. Dvejetainę painiavos matricą sudaro kvadratai:

  • TP: tikras teigiamas: numatomos vertės teisingai prognozuojamos kaip teigiamos
  • FP: numatomos vertės neteisingai numatė faktinį teigiamą. ty, neigiamos reikšmės prognozuojamos kaip teigiamos
  • FN: klaidingas neigiamas: teigiamos vertės numatomos kaip neigiamos
  • TN: tikras neigiamas: numatomos vertės teisingai numatytos kaip faktinės neigiamos

Pagal painiavos matricą lengva palyginti tikrąją klasę ir numatomą klasę.

Tikslumas ir jautrumas

Sumišimo matrica suteikia gerą supratimą apie tikrąjį teigiamą ir klaidingą teigiamą. Kai kuriais atvejais geriau turėti glaustesnę metriką.

Tikslumas

Tikslumo metrika rodo teigiamos klasės tikslumą. Jis matuoja, kiek tikėtina teigiamos klasės prognozė yra teisinga.

Maksimalus balas yra 1, kai klasifikatorius puikiai klasifikuoja visas teigiamas vertes. Vien tikslumas nėra labai naudingas, nes jis ignoruoja neigiamą klasę. Metrika paprastai derinama su metrika Recall. Atsišaukimas dar vadinamas jautrumu arba tikruoju teigiamu rodikliu.

Jautrumas

Jautrumas apskaičiuoja teisingai nustatytų teigiamų klasių santykį. Ši metrika rodo, kaip gerai modelis atpažįsta teigiamą klasę.

Linijinis klasifikatorius su „TensorFlow“

Šiai pamokai naudosime surašymo duomenų rinkinį. Tikslas yra naudoti surašymo duomenų rinkinio kintamuosius pajamų lygiui prognozuoti. Atkreipkite dėmesį, kad pajamos yra dvejetainis kintamasis

  • kurio vertė 1, jei pajamos> 50 tūkst
  • 0, jei pajamos <50 tūkst.

Šis kintamasis yra jūsų etiketė

Šiame duomenų rinkinyje yra aštuoni kategoriniai kintamieji:

  • darbo vietoje
  • švietimas
  • santuokinis
  • užsiėmimas
  • santykiai
  • lenktynės
  • seksas
  • Gimtoji šalis

be to, šeši nuolatiniai kintamieji:

  • amžiaus
  • fnlwgt
  • edukacijos_skaita
  • kapitalo prieaugio
  • kapitalo praradimas
  • darbo valandos

Per šį „TensorFlow“ klasifikavimo pavyzdį suprasite, kaip mokyti tiesinius „TensorFlow“ klasifikatorius naudojant „TensorFlow“ įvertiklį ir kaip pagerinti tikslumo metriką.

Mes elgsimės taip:

  • 1 žingsnis) Importuokite duomenis
  • 2 žingsnis) Duomenų konvertavimas
  • 3 žingsnis. Mokykite klasifikatorių
  • 4 žingsnis) Patobulinkite modelį
  • 5 žingsnis) Hiperparametras: „Lasso & Ridge“

1 žingsnis) Importuokite duomenis

Pirmiausia importuojate bibliotekas, naudojamas per mokymo programą.

import tensorflow as tfimport pandas as pd 

Tada importuosite duomenis iš UCI archyvo ir nustatysite stulpelių pavadinimus. Stulpeliams pavadinti pandų duomenų rėmelyje naudosite COLUMNS.

Atminkite, kad klasifikatorių mokysite naudodami „Pandas“ duomenų rėmą.

## 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"

Internetu saugomi duomenys jau yra padalinti tarp traukinių ir bandymų rinkinių.

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)

Traukinių rinkinyje yra 32 561 stebėjimas, o bandymų rinkinyje - 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

Norint mokyti klasifikatorių, „Tensorflow“ reikalinga Bulio reikšmė. Reikės perduoti reikšmes iš eilutės į sveiką skaičių. Etiketė yra saugykla kaip objektas, tačiau ją reikia konvertuoti į skaitinę vertę. Žemiau pateiktas kodas sukuria žodyną su vertėmis, kurias reikia konvertuoti ir perkelti stulpelio elementą. Atkreipkite dėmesį, kad šią operaciją atliekate du kartus: vieną traukinio bandymui, vieną bandymų rinkiniui

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]

Traukinio duomenyse yra 24 720 mažesnių nei 50 tūkst. Ir 7841 pajamų. Bandymų rinkinio santykis yra beveik vienodas. Daugiau informacijos rasite šioje „Facets“ pamokoje.

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

2 žingsnis) Duomenų konvertavimas

Prieš mokant linijinį klasifikatorių naudojant „Tensorflow“, reikia atlikti kelis veiksmus. Turite paruošti funkcijas, kurias norite įtraukti į modelį. Etaloninėje regresijoje naudosite pradinius duomenis netaikydami jokios transformacijos.

Vertintojas turi turėti funkcijų sąrašą, kad mokytų modelį. Taigi stulpelio duomenis reikia konvertuoti į tenzorą.

Gera praktika yra apibrėžti du požymių sąrašus, atsižvelgiant į jų tipą, ir tada juos perduoti vertintuvo elementų_ stulpeliuose.

Pradėsite konvertuodami nuolatines funkcijas, tada apibrėžkite segmentą su kategoriniais duomenimis.

Duomenų rinkinio funkcijos yra dviejų formatų:

  • Sveikasis skaičius
  • Objektas

Kiekviena funkcija yra išvardyta kituose dviejuose kintamuosiuose pagal jų tipus.

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

Stulpelyje „feature_column“ yra objekto numeric_column, kuris padeda nepertraukiamus kintamuosius paversti tensorais. Žemiau pateiktame kode visus kintamuosius iš CONTI_FEATURES konvertuojate į skaitiklinę reikšmę turinčią tensorių. Tai yra privaloma norint sukurti modelį. Visi nepriklausomi kintamieji turi būti konvertuojami į tinkamą tensoriaus tipą.

Žemiau mes parašome kodą, kad galėtumėte pamatyti, kas vyksta už feature_column.numeric_column. Mes atspausdinsime konvertuotą amžiaus reikšmę. Tai aiškinimo tikslu, todėl nereikia suprasti pitono kodo. Norėdami suprasti kodus, galite kreiptis į oficialią dokumentaciją.

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.]]

Vertės yra visiškai tokios pačios kaip df_train

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

Remiantis „TensorFlow“ dokumentais, yra įvairių būdų kategoriškiems duomenims konvertuoti. Jei ypatybių žodynų sąrašas yra žinomas ir neturi daug reikšmių, galima sukurti kategorinį stulpelį su kategorijos_kolonna_su_žodyno_sąlyga. Visiems unikaliems žodynų sąrašams jis priskirs ID.

Pavyzdžiui, jei kintamojo būsenoje yra trys skirtingos vertės:

  • Vyras
  • Žmona
  • Vienišas

Tada bus priskirti trys ID. Pavyzdžiui, Vyras turės ID 1, Žmona ID 2 ir kt.

Norėdami iliustruoti, galite naudoti šį kodą, kad objekto kintamąjį paverstumėte kategorišku „TensorFlow“ stulpeliu.

Funkcijos lytis gali turėti tik dvi vertybes: vyrą ar moterį. Kai konvertuosime funkcijų lytį, „Tensorflow“ sukurs 2 naujus stulpelius, vieną skirtą vyrams, o kitą - moterims. Jei lytis lygi vyrui, tada naujas stulpelio vyras bus lygus 1, o moteris - 0. Šis pavyzdys rodomas toliau pateiktoje lentelėje:

eilučių

seksas

po transformacijos

Patinas

Moteris

1

Patinas

=>

1

0

2

Patinas

=>

1

0

3

Moteris

=>

0

1

Tensorflow:

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

Žemiau pridėjome „Python“ kodą, kad atspausdintume kodavimą. Vėlgi, jums nereikia suprasti kodo, tikslas yra pamatyti transformaciją

Tačiau greitesnis būdas transformuoti duomenis yra naudoti metodą kategorinis_stulpelis_su_varžos_grupė. Straipsnių kintamųjų keitimas retoje matricoje bus naudingas. Retoji matrica yra matrica, kurioje daugiausia nulis. Metodas rūpinasi viskuo. Jums reikia nurodyti tik grupių skaičių ir raktų stulpelį. Kibirų skaičius yra didžiausias grupių skaičius, kurį gali sukurti „Tensorflow“. Raktinis stulpelis yra tiesiog konvertuojamo stulpelio pavadinimas.

Žemiau esančiame kode sukuriate visų kategorinių funkcijų kilpą.

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

3 žingsnis. Mokykite klasifikatorių

Šiuo metu „TensorFlow“ pateikia tiesinės regresijos ir tiesinės klasifikacijos įvertintoją.

  • Linijinė regresija: LinearRegressor
  • Linijinė klasifikacija: Linijinis klasifikatorius

Linijinio klasifikatoriaus sintaksė yra tokia pati, kaip ir tiesinės regresijos pamokoje, išskyrus vieną argumentą „n_class“. Turite apibrėžti funkcijų stulpelį, modelių katalogą ir palyginti su tiesiniu regresoriumi; jūs turite apibrėžti klasės skaičių. Logitinės regresijos atveju klasės skaičius yra lygus 2.

Modelis apskaičiuos stulpelių, esančių tęstinėse_ ir kategorinėse_ savybėse, svorį.

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

IŠĖJIMAS:

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}

Dabar, kai klasifikatorius yra apibrėžtas, galite sukurti įvesties funkciją. Metodas yra toks pats kaip tiesinio regresoriaus pamokoje. Čia naudojate 128 paketo dydį ir maišote duomenis.

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)

Sukuriate funkciją naudodami linijinio įvertintojo reikalaujamus argumentus, ty epochų skaičių, partijų skaičių ir sumaišykite duomenų rinkinį ar pastabą. Kadangi duomenų perdavimui į modelį naudojate „Pandas“ metodą, X kintamuosius turite apibrėžti kaip pandų duomenų rėmelius. Atminkite, kad jūs peržiūri visus duomenis, saugomus funkcijose FEATURES.

Treniruokime modelį su objekto modeliu.traukinys. Norėdami naudoti modelį su atitinkamomis reikšmėmis, naudojate anksčiau apibrėžtą funkciją. Atkreipkite dėmesį, kad partijos dydį nustatėte į 128, o epochų skaičių - Nėra. Modelis bus mokomas per tūkstantį žingsnių.

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.

Atkreipkite dėmesį, kad nuostoliai vėliau sumažėjo per paskutinius 100 žingsnių, ty nuo 901 iki 1000.

Galutinis nuostolis po tūkstančio pakartojimų yra 5444. Galite įvertinti savo modelį bandymų rinkinyje ir pamatyti našumą. Norėdami įvertinti savo modelio našumą, turite naudoti objekto vertinimą. Jūs tiekiate modelį su bandymų rinkiniu ir nustatote epochų skaičių į 1, ty duomenys modeliui bus perduodami tik vieną kartą.

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“ pateikia visą metriką, kurią išmokote teorinėje dalyje. Nenuostabu, kad tikslumas yra didelis dėl nesubalansuotos etiketės. Tiesą sakant, modelis veikia šiek tiek geriau nei atsitiktinis spėjimas. Įsivaizduokite, kad modelis prognozuoja visus namų ūkius, kurių pajamos yra mažesnės nei 50 tūkst., Tada modelio tikslumas yra 70 proc. Atidžiau išanalizavę, galite pamatyti, kad prognozavimas ir atšaukimas yra gana nedideli.

4 žingsnis) Patobulinkite modelį

Dabar, kai turite etalono modelį, galite pabandyti jį patobulinti, ty padidinti tikslumą. Ankstesnėje pamokoje sužinojote, kaip pagerinti prognozavimo galią naudojant sąveikos terminą. Šioje pamokoje jūs dar kartą apžvelgsite šią idėją, prie regresijos pridėdami daugianario terminą.

Polinominė regresija yra instrumentinė, kai duomenyse yra nelinijiškumas. Yra du būdai, kaip užfiksuoti netiesiškumą duomenyse.

  • Pridėti daugianario terminą
  • Nepertraukiamąjį kintamąjį kaupkite kategoriniu kintamuoju

Daugianario terminas

Žemiau pateiktame paveikslėlyje galite pamatyti, kas yra daugianario regresija. Tai lygtis su X kintamaisiais, turinčiais skirtingą galią. Antrojo laipsnio polinomo regresija turi du kintamuosius, X ir X kvadratus. Trečiasis laipsnis turi tris kintamuosius, X, X 2 ir X 3

Kas yra daugianario regresija

Žemiau mes sukūrėme grafiką su dviem kintamaisiais - X ir Y. Akivaizdu, kad ryšys nėra tiesinis. Jei pridėsime tiesinę regresiją, galime pamatyti, kad modelis negali užfiksuoti modelio (kairysis paveikslėlis).

Dabar pažiūrėkite į kairį paveikslėlį iš žemiau esančio paveikslėlio, prie regresijos pridėjome penkių terminų (tai yra y = x + x 2 + x 3 + x 4 + x 5. Dabar modelis geriau užfiksuoja modelį. Tai yra daugianario regresijos galia.

Grįžkime prie savo pavyzdžio. Amžius nėra tiesiogiai susijęs su pajamomis. Ankstyvame amžiuje pajamos gali būti lygios nuliui, nes vaikai ar jaunimas nedirba. Tada jis padidėja darbingo amžiaus ir sumažėja išėjus į pensiją. Paprastai tai yra „Inversed-U“ forma. Vienas iš būdų užfiksuoti šį modelį yra regresijai pridedant dvi galias.

Pažiūrėkime, ar tai padidina tikslumą.

Šią naują funkciją turite pridėti prie duomenų rinkinio ir nepertraukiamų funkcijų sąraše.

Pridedate naują kintamąjį traukinio ir bandymo duomenų rinkinyje, todėl patogiau parašyti funkciją.

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

Funkcijoje yra 3 argumentai:

  • df_t: apibrėžkite mokymo rinkinį
  • df_te: apibrėžkite testų rinkinį
  • var_name = 'age': apibrėžkite kintamąjį, kurį norite transformuoti

Norėdami naudoti kvadratą kintamam amžiui, galite naudoti objektą pow (2). Atminkite, kad naujasis kintamasis vadinamas „nauju“

Dabar, kai parašyta funkcija square_var, galite sukurti naujus duomenų rinkinius.

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

Kaip matote, naujame duomenų rinkinyje yra dar viena funkcija.

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

Kvadratinis kintamasis duomenų rinkinyje vadinamas nauju. Turite jį įtraukti į nuolatinių funkcijų sąrašą.

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]

Atminkite , kad pakeitėte diagramos katalogą. Negalite mokyti skirtingų modelių tame pačiame kataloge. Tai reiškia, kad jūs turite pakeisti argumento model_dir kelią. Jei to nepadarysite, „TensorFlow“ sukels klaidą.

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)

Dabar, kai klasifikatorius sukurtas naudojant naują duomenų rinkinį, galite mokyti ir įvertinti modelį.

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}

Kintamasis kintamasis pagerino tikslumą nuo 0,76 iki 0,79. Pažiūrėkime, ar jūs galite padaryti geriau, derindami segmentus ir sąveikos terminus.

Kibiravimas ir sąveika

Kaip matėte anksčiau, linijinis klasifikatorius negali tinkamai nustatyti amžiaus ir pajamų modelio. Taip yra todėl, kad jis išmoksta po vieną kiekvienos funkcijos svorį. Kad būtų lengviau klasifikatoriui, vienas dalykas, kurį galite padaryti, yra ši funkcija. „Kibiravimas“ paverčia skaitinę ypatybę į keletą tam tikrų, atsižvelgiant į diapazoną, į kurį ji patenka, ir kiekviena iš šių naujų savybių nurodo, ar žmogaus amžius patenka į tą diapazoną.

Naudodamiesi šiomis naujomis funkcijomis, linijinis modelis gali užfiksuoti santykius mokydamasis skirtingo kiekvieno segmento svorio.

„TensorFlow“ tai daroma su „bucketized_column“. Ribose turite pridėti reikšmių diapazoną.

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

Jūs jau žinote, kad amžius yra nelinijinis atsižvelgiant į pajamas. Kitas būdas patobulinti modelį yra sąveika. „TensorFlow“ žodžiu, tai yra funkcijų kirtimas. Funkcijų kirtimas yra būdas sukurti naujas funkcijas, kurios yra esamų deriniai, o tai gali būti naudinga linijiniam klasifikatoriui, kuris negali modeliuoti funkcijų sąveikos.

Galite suskirstyti amžių į kitą funkciją, pvz., Išsilavinimą. Tai yra, kai kurios grupės greičiausiai turi dideles pajamas, o kitos - mažas (pagalvokite apie doktorantą).

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

Norėdami sukurti kryžminio elemento stulpelį, naudokite crossed_column su kintamaisiais, kad kirstumėte skliaustą. Hash_bucket_size nurodo maksimalias perėjimo galimybes. Norėdami sukurti sąveiką tarp kintamųjų (bent vienas kintamasis turi būti kategoriškas), galite naudoti tf.feature_column.crossed_column. Norėdami naudoti šį objektą, kvadratiniame skliauste turite pridėti sąveikaujantį kintamąjį ir antrą argumentą - segmento dydį. Grupės dydis yra didžiausias įmanomas grupės skaičius kintamajame. Čia nustatėte 1000, nes nežinote tikslaus grupių skaičiaus

age_buckets turi būti kvadratas prieš įtraukiant jį į funkcijų stulpelius. Taip pat pridedate naujas funkcijas prie funkcijų stulpelių ir paruošiate įvertintuvą

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)

IŠĖJIMAS

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)

Jūs esate pasirengęs įvertinti naują modelį ir sužinoti, ar jis pagerina tikslumą.

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}

Naujas tikslumo lygis yra 83,58 proc. Jis yra keturiais procentais didesnis nei ankstesnis modelis.

Galiausiai galite pridėti dėsningumo terminą, kad išvengtumėte per didelio įrengimo.

5 žingsnis) Hiperparametras: „Lasso & Ridge“

Jūsų modelis gali nukentėti dėl per didelio ar netinkamo .

  • Perteklinis: modelis negali apibendrinti prognozės pagal naujus duomenis
  • Nepakankamas: modelis negali užfiksuoti duomenų modelio. ty tiesinė regresija, kai duomenys yra nelinijiniai

Kai modelis turi daug parametrų ir palyginti mažai duomenų, tai lemia blogas prognozes. Įsivaizduokite, viena grupė turi tik tris pastebėjimus; modelis apskaičiuos šios grupės svorį. Svoris naudojamas prognozuoti; jei šios konkrečios grupės testų rinkinio stebėjimai visiškai skiriasi nuo treniruočių rinkinio, tada modelis pateiks neteisingą prognozę. Vertinant su treniruočių rinkiniu, tikslumas yra geras, bet netinkamas su testo rinkiniu, nes apskaičiuoti svoriai nėra teisingi modelio apibendrinimui. Šiuo atveju jis nepateikia pagrįstos prognozės dėl nematytų duomenų.

Norint išvengti per didelio pritaikymo, reguliavimas suteikia jums galimybę kontroliuoti tokį sudėtingumą ir padaryti jį labiau apibendrinamą. Yra du reguliavimo būdai:

  • L1: Lasso
  • L2: kalvagūbris

„TensorFlow“ galite pridėti šiuos du hiperparametrus į optimizavimo priemonę. Pavyzdžiui, kuo didesnis hiperparametras L2, svoris būna labai mažas ir artimas nuliui. Pritaikyta linija bus labai plokščia, o L2 arti nulio reiškia, kad svoriai yra artimi taisyklingai tiesinei regresijai.

Galite patys išbandyti skirtingą hiperparametrų vertę ir sužinoti, ar galite padidinti tikslumo lygį.

Atkreipkite dėmesį, kad jei pakeisite hiperparametrą, turite ištrinti aplanką vykstantis / traukinys4, kitaip modelis prasidės nuo anksčiau apmokyto modelio.

Pažiūrėkime, kaip yra hype tikslumas

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

OUPUT

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)

OUPUT

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)

IŠĖJIMAS

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}

Naudodami šį hiperparametrą, šiek tiek padidinate tikslumo metriką. Kitoje pamokoje sužinosite, kaip patobulinti linijinį klasifikatorių naudojant branduolio metodą.

Santrauka

Norėdami mokyti modelį, turite:

  • Apibrėžkite ypatybes: Nepriklausomi kintamieji: X
  • Apibrėžkite etiketę: Priklausomas kintamasis: y
  • Sukurkite traukinį / bandymų komplektą
  • Apibrėžkite pradinį svorį
  • Apibrėžkite nuostolių funkciją: MSE
  • Optimizuokite modelį: gradiento nusileidimas
  • Apibrėžti:
    • Mokymosi greitis
    • Epochos skaičius
    • Partijos dydis
    • Klasės skaičius

Šioje pamokoje sužinojote, kaip naudoti aukšto lygio API linijinės regresijos klasifikatoriui. Turite apibrėžti:

  1. Funkcijos stulpeliai. Jei nenutrūkstamas: tf.feature_column.numeric_column (). Galite užpildyti sąrašą suprasdami python sąrašą
  2. Įvertiklis: tf.estimator.LinearClassifier (feature_columns, model_dir, n_classes = 2)
  3. Duomenų, paketo dydžio ir epochos importavimo funkcija: input_fn ()

Po to jūs esate pasirengęs treniruotis, įvertinti ir prognozuoti su traukiniu (), įvertinti () ir numatyti ()

Norėdami pagerinti modelio veikimą, galite:

  • Naudokite daugianario regresiją
  • Sąveikos terminas: tf.feature_column.crossed_column
  • Pridėti reguliavimo parametrą

Įdomios straipsniai...