TensorFlow binarna klasifikacija: primjer linearnog klasifikatora
Dvije najฤeลกฤe nadzirano uฤenje zadaci su linearna regresija i linearni klasifikator. Linearna regresija predviฤa vrijednost dok linearni klasifikator predviฤa klasu. Ovaj vodiฤ usmjeren je na linearne klasifikatore.
ล to je linearni klasifikator?
A Linearni klasifikator u strojnom uฤenju je metoda za pronalaลพenje klase objekta na temelju njegovih karakteristika za statistiฤku klasifikaciju. Donosi odluku o klasifikaciji na temelju vrijednosti linearne kombinacije karakteristika objekta. Linearni klasifikator koristi se u praktiฤnim problemima poput klasifikacije dokumenata i problema s mnogo varijabli.
Problemi s klasifikacijom predstavljaju otprilike 80 posto zadatka strojnog uฤenja. Klasifikacija ima za cilj predviฤanje vjerojatnosti svake klase s obzirom na skup inputa. Oznaka (tj. zavisna varijabla) je diskretna vrijednost, koja se naziva klasa.
- Ako oznaka ima samo dvije klase, algoritam uฤenja je binarni klasifikator.
- Multiclass klasifikator bavi se oznakama s viลกe od dvije klase.
Na primjer, tipiฤan problem binarne klasifikacije je predviฤanje vjerojatnosti da kupac obavi drugu kupnju. Predviฤanje vrste ลพivotinje prikazane na slici problem je viลกeklasne klasifikacije buduฤi da postoji viลกe od dvije vrste ลพivotinja.
Teorijski dio ovog vodiฤa stavlja primarni fokus na binarnu klasu. Nauฤit ฤete viลกe o funkciji viลกeklasnog izlaza u buduฤem vodiฤu.
Kako radi binarni klasifikator?
U prethodnom ste vodiฤu nauฤili da je funkcija sastavljena od dvije vrste varijabli, zavisne varijable i skupa znaฤajki (nezavisne varijable). U linearnoj regresiji, zavisna varijabla je realan broj bez raspona. Primarni cilj je predvidjeti njegovu vrijednost minimiziranjem srednje kvadratne pogreลกke.
Za TensorFlow binarni klasifikator, oznaka je mogla imati dvije moguฤe vrijednosti cijelog broja. U veฤini sluฤajeva, to je [0,1] ili [1,2]. Na primjer, cilj je predvidjeti hoฤe li kupac kupiti proizvod ili ne. Oznaka je definirana na sljedeฤi naฤin:
- Y = 1 (kupac je kupio proizvod)
- Y = 0 (kupac ne kupuje proizvod)
Model koristi znaฤajke X za klasificiranje svakog kupca u najvjerojatniji razred kojem pripada, odnosno, potencijalni kupac ili ne.
Vjerojatnost uspjeha izraฤunava se s logistiฤka regresija. Algoritam ฤe izraฤunati vjerojatnost na temelju svojstva X i predviฤa uspjeh kada je ta vjerojatnost iznad 50 posto. Formalnije, vjerojatnost se izraฤunava kao ลกto je prikazano u donjem primjeru TensorFlow binarne klasifikacije:
gdje je 0 skup teลพina, znaฤajki, a b pristranost.
Funkcija se moลพe rastaviti na dva dijela:
- Linearni model
- Logistiฤka funkcija
Linearni model
Veฤ ste upoznati s naฤinom na koji se izraฤunavaju teลพine. Teลพine se izraฤunavaju pomoฤu toฤkastog produkta: Y je linearna funkcija svih svojstava xi. Ako model nema znaฤajke, predviฤanje je jednako pristranosti, b.
Ponderi pokazuju smjer korelacije izmeฤu znaฤajki xi i oznaka y. Pozitivna korelacija poveฤava vjerojatnost pozitivne klase dok negativna korelacija vodi vjerojatnost bliลพe 0 (tj. negativnoj klasi).
Linearni model vraฤa samo realni broj, koji nije u skladu s mjerom vjerojatnosti raspona [0,1]. Logistiฤka funkcija je potrebna za pretvaranje izlaza linearnog modela u vjerojatnost,
Logistiฤka funkcija
Logistiฤka funkcija ili sigmoidna funkcija ima oblik slova S, a izlaz ove funkcije je uvijek izmeฤu 0 i 1.

Lako je zamijeniti izlaz linearne regresije u sigmoidnu funkciju. Rezultat je novi broj s vjerojatnoลกฤu izmeฤu 0 i 1.
Klasifikator moลพe transformirati vjerojatnost u klasu
- Vrijednosti izmeฤu 0 i 0.49 postaju klasa 0
- Vrijednosti izmeฤu 0.5 i 1 postaju klasa 1
Kako izmjeriti izvedbu linearnog klasifikatora?
Toฤnost
Ukupna izvedba klasifikatora mjeri se metrikom toฤnosti. Toฤnost prikuplja sve toฤne vrijednosti podijeljene s ukupnim brojem opaลพanja. Na primjer, vrijednost toฤnosti od 80 posto znaฤi da je model toฤan u 80 posto sluฤajeva.

Moลพete primijetiti nedostatak ove metrike, posebno za klasu neravnoteลพe. Skup podataka o neravnoteลพi javlja se kada broj opaลพanja po skupini nije jednak. Recimo; pokuลกavate klasificirati rijedak dogaฤaj s logistiฤkom funkcijom. Zamislite da klasifikator pokuลกava procijeniti smrt pacijenta nakon bolesti. Prema podacima, 5 posto pacijenata premine. Moลพete uvjeลพbati klasifikator da predvidi broj smrti i koristite metriku toฤnosti za procjenu performansi. Ako klasifikator predviฤa 0 smrti za cijeli skup podataka, to ฤe biti toฤno u 95 posto sluฤajeva.
Matrica zabune
Bolji naฤin za procjenu uฤinka klasifikatora je pogled na matricu zabune.

The matrica zabune vizualizira toฤnost klasifikatora usporeฤujuฤi stvarne i predviฤene klase kao ลกto je prikazano u gornjem primjeru linearnog klasifikatora. Binarna matrica zabune sastoji se od kvadrata:
- TP: True Positive: Predviฤene vrijednosti toฤno predviฤene kao stvarne pozitivne
- FP: Predviฤene vrijednosti netoฤno su predvidjele stvarni pozitivan. tj. Negativne vrijednosti predviฤene kao pozitivne
- FN: Laลพno negativno: Pozitivne vrijednosti predviฤene kao negativne
- TN: Istinski negativan: Predviฤene vrijednosti toฤno predviฤene kao stvarni negativni
Iz matrice zabune lako je usporediti stvarnu klasu i predviฤenu klasu.
Preciznost i osjetljivost
Matrica zabune pruลพa dobar uvid u pravu pozitivu i laลพno pozitivu. U nekim sluฤajevima, poลพeljno je imati saลพetiju metriku.
Preciznost
Metrika preciznosti pokazuje toฤnost pozitivne klase. Mjeri koliko je vjerojatno da je predviฤanje pozitivne klase toฤno.
Maksimalna ocjena je 1 kada klasifikator savrลกeno klasificira sve pozitivne vrijednosti. Sama preciznost nije od velike pomoฤi jer zanemaruje negativnu klasu. Metrika je obiฤno uparena s metrikom opoziva. Prisjeฤanje se takoฤer naziva osjetljivost ili prava pozitivna stopa.
Osjetljivost
Osjetljivost izraฤunava omjer pravilno detektiranih pozitivnih klasa. Ova metrika pokazuje koliko je model dobar za prepoznavanje pozitivne klase.
Linearni klasifikator s TensorFlowom
Za ovaj vodiฤ koristit ฤemo skup podataka popisa stanovniลกtva. Svrha je koristiti varijable u skupu podataka popisa za predviฤanje razine prihoda. Imajte na umu da je prihod binarna varijabla
- s vrijednoลกฤu 1 ako je prihod > 50k
- 0 ako je prihod < 50k.
Ova varijabla je vaลกa oznaka
Ovaj skup podataka ukljuฤuje osam kategoriฤkih varijabli:
- na radnom mjestu
- obrazovanje
- braฤni
- okupacija
- odnos
- utrka
- seks
- rodna_zemlja
osim toga, ลกest kontinuiranih varijabli:
- starost
- fnlwgt
- obrazovanje_br
- kapitalni dobitak
- gubitak_kapitala
- sati_tjedan
Kroz ovaj primjer TensorFlow klasifikacije razumjet ฤete kako trenirati linearne TensorFlow klasifikatore s TensorFlow estimatorom i kako poboljลกati metriku toฤnosti.
Postupit ฤemo na sljedeฤi naฤin:
- Korak 1) Uvezite podatke
- Korak 2) Pretvorba podataka
- Korak 3) Obuฤite klasifikatora
- Korak 4) Poboljลกajte model
- Korak 5) Hiperparametar: laso i greben
Korak 1) Uvezite podatke
Prvo uvozite biblioteke koriลกtene tijekom poduke.
import tensorflow as tf import pandas as pd
Zatim uvozite podatke iz arhive UCI-ja i definirate nazive stupaca. Koristit ฤete COLUMNS za imenovanje stupaca u pandas podatkovnom okviru.
Imajte na umu da ฤete obuฤiti klasifikator koristeฤi Pandas podatkovni okvir.
## 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"
Podaci pohranjeni online veฤ su podijeljeni izmeฤu skupa vlakova i skupa za testiranje.
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)
Skup vlakova sadrลพi 32,561 16,281 opaลพanja, a testni skup 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 zahtijeva Booleovu vrijednost za obuku klasifikatora. Morate pretvoriti vrijednosti iz niza u cijeli broj. Oznaka se pohranjuje kao objekt, meฤutim, trebate je pretvoriti u numeriฤku vrijednost. Kod u nastavku stvara rjeฤnik s vrijednostima za pretvaranje i prelazi preko stavke stupca. Imajte na umu da ovu operaciju izvodite dva puta, jednu za test vlaka, jednu za skup testova
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]
U podacima vlaka ima 24,720 prihoda niลพih od 50k i 7841 iznad. Omjer je gotovo isti za test set. Za viลกe pogledajte ovaj vodiฤ o aspektima.
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
Korak 2) Pretvorba podataka
Potrebno je nekoliko koraka prije nego ลกto uvjeลพbate linearni klasifikator s Tensorflowom. Morate pripremiti znaฤajke koje ฤete ukljuฤiti u model. U regresiji referentne vrijednosti koristit ฤete izvorne podatke bez primjene bilo kakve transformacije.
Procjenitelj mora imati popis znaฤajki za obuku modela. Stoga se podaci stupca moraju pretvoriti u tenzor.
Dobra praksa je definirati dva popisa znaฤajki na temelju njihove vrste i zatim ih proslijediti u feature_columns estimatora.
Poฤet ฤete pretvaranjem kontinuiranih znaฤajki, zatim definirati kantu s kategoriฤkim podacima.
Znaฤajke skupa podataka imaju dva formata:
- Integer
- Objekt
Svaka znaฤajka navedena je u sljedeฤe dvije varijable prema njihovoj vrsti.
## 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 opremljen je objektom numeric_column koji pomaลพe u transformaciji kontinuiranih varijabli u tenzor. U donjem kodu pretvarate sve varijable iz CONTI_FEATURES u tenzor s numeriฤkom vrijednoลกฤu. Ovo je obavezno za konstruiranje modela. Sve nezavisne varijable treba pretvoriti u odgovarajuฤi tip tenzora.
U nastavku piลกemo kod da biste vidjeli ลกto se dogaฤa iza feature_column.numeric_column. Ispisat ฤemo pretvorenu vrijednost za dob. To je u svrhu objaลกnjenja, stoga nema potrebe za razumijevanjem python koda. Moลพete pogledati sluลพbenu dokumentaciju da biste razumjeli kodove.
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.]]
Vrijednosti su potpuno iste kao u df_train
continuous_features = [tf.feature_column.numeric_column(k) for k in CONTI_FEATURES]
Prema TensorFlow dokumentaciji, postoje razliฤiti naฤini pretvaranja kategoriฤkih podataka. Ako je popis rjeฤnika znaฤajke poznat i nema mnogo vrijednosti, moguฤe je stvoriti kategoriฤki stupac s categorical_column_with_vocabulary_list. Dodijelit ฤe ID svim jedinstvenim popisima vokabulara.
Na primjer, ako status varijable ima tri razliฤite vrijednosti:
- Suprug
- ลฝena
- jedan
Tada ฤe se pripisati tri ID-a. Na primjer, muลพ ฤe imati ID 1, ลพena ID 2 i tako dalje.
U svrhu ilustracije, moลพete koristiti ovaj kod za pretvaranje varijable objekta u kategoriฤki stupac u TensorFlowu.
Obiljeลพje spola moลพe imati samo dvije vrijednosti: muลกko ili ลพensko. Kada ฤemo pretvoriti znaฤajku spola, Tensorflow ฤe stvoriti 2 nova stupca, jedan za muลกkarce i jedan za ลพene. Ako je spol jednak muลกkom, tada ฤe novi stupac muลกki biti jednak 1, a ลพenski 0. Ovaj primjer prikazan je u donjoj tablici:
| redaka | seks | nakon transformacije | muลกki | ลพena |
|---|---|---|---|---|
| 1 | muลกki | => | 1 | 0 |
| 2 | muลกki | => | 1 | 0 |
| 3 | ลพena | => | 0 | 1 |
U tenzorskom toku:
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'])
U nastavku smo dodali Python kod za ispis kodiranja. Opet, ne morate razumjeti kod, svrha je vidjeti transformaciju
Meฤutim, brลพi naฤin transformacije podataka je koriลกtenje metode categorical_column_with_hash_bucket. Promjena varijabli niza u rijetkoj matrici bit ฤe korisna. Rijetka matrica je matrica s veฤinom nula. Metoda se brine za sve. Trebate samo navesti broj spremnika i kljuฤni stupac. Broj spremnika maksimalan je broj grupa koje Tensorflow moลพe stvoriti. Kljuฤni stupac jednostavno je naziv stupca koji treba pretvoriti.
U donjem kodu stvarate petlju preko svih kategoriฤkih znaฤajki.
categorical_features = [tf.feature_column.categorical_column_with_hash_bucket(k, hash_bucket_size=1000) for k in CATE_FEATURES]
Korak 3) Obuฤite klasifikator
TensorFlow trenutno pruลพa estimator za linearnu regresiju i linearnu klasifikaciju.
- Linearna regresija: LinearRegressor
- Linearna klasifikacija: LinearClassifier
Sintaksa linearnog klasifikatora je ista kao u vodiฤu o Linearna regresija osim jednog argumenta, n_class. Morate definirati stupac znaฤajki, direktorij modela i usporediti s linearnim regresorom; morate definirati broj klase. Za logit regresiju, broj klase je jednak 2.
Model ฤe izraฤunati teลพine stupaca sadrลพanih u continuous_features i categorical_features.
model = tf.estimator.LinearClassifier(
n_classes = 2,
model_dir="ongoing/train",
feature_columns=categorical_features+ continuous_features)
Izlaz
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}
Sada kada je klasifikator definiran, moลพete kreirati funkciju unosa. Metoda je ista kao u vodiฤu za linearni regresor. Ovdje koristite veliฤinu serije od 128 i mijeลกate podatke.
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)
Kreirate funkciju s argumentima koje zahtijeva linearni procjenitelj, tj. broj epoha, broj serija i mijeลกate skup podataka ili biljeลกku. Buduฤi da koristite pande metodu za prosljeฤivanje podataka u model, trebate definirati X varijable kao pandas podatkovni okvir. Imajte na umu da prelazite preko svih podataka pohranjenih u FEATURES.
Uvjeลพbajmo model s objektnim modelom.vjeลพbati. Prethodno definiranu funkciju koristite za unos odgovarajuฤih vrijednosti u model. Imajte na umu da ste postavili veliฤinu serije na 128, a broj epoha na Niลกta. Model ฤe se trenirati preko tisuฤu koraka.
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>
Imajte na umu da se gubitak naknadno smanjio tijekom zadnjih 100 koraka, tj. s 901 na 1000.
Konaฤni gubitak nakon tisuฤu iteracija je 5444. Moลพete procijeniti svoj model na testnom setu i vidjeti performanse. Da biste procijenili izvedbu svog modela, morate koristiti objektnu ocjenu. Model napunite testnim skupom i postavite broj epoha na 1, tj. podaci ฤe iฤi u model samo jednom.
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 vraฤa sve metrike koje ste nauฤili u teoretskom dijelu. Bez iznenaฤenja, toฤnost je velika zbog neuravnoteลพene oznake. Zapravo, model ima malo bolju izvedbu od nasumiฤne pretpostavke. Zamislite da model predviฤa sva kuฤanstva s prihodom niลพim od 50 tisuฤa, tada model ima toฤnost od 70 posto. Pri bliลพoj analizi, moลพete vidjeti da su predviฤanje i prisjeฤanje priliฤno niski.
Korak 4) Poboljลกajte model
Sada kada imate benchmark model, moลพete ga pokuลกati poboljลกati, odnosno poveฤati toฤnost. U prethodnom vodiฤu nauฤili ste kako poboljลกati snagu predviฤanja pomoฤu pojma interakcije. U ovom ฤete vodiฤu ponovno razmotriti ovu ideju dodavanjem polinomskog ฤlana regresiji.
Polinomska regresija je korisna kada postoji nelinearnost podataka. Postoje dva naฤina za biljeลพenje nelinearnosti u podacima.
- Dodajte polinomski ฤlan
- Kontinuiranu varijablu pretvorite u kategoriฤku varijablu
Polinomski ฤlan
Na donjoj slici moลพete vidjeti ลกto je polinomska regresija. To je jednadลพba s X varijablama razliฤite snage. Polinomska regresija drugog stupnja ima dvije varijable, X i X na kvadrat. Treฤi stupanj ima tri varijable, X, X2, i X3

U nastavku smo konstruirali graf s dvije varijable, X i Y. Oฤito je da odnos nije linearan. Ako dodamo linearnu regresiju, moลพemo vidjeti da model ne moลพe uhvatiti uzorak (lijeva slika).
Sada, pogledajte lijevu sliku sa slike ispod, dodali smo pet ฤlanova regresiji (to je y=x+x2+x3+x4+x5. Model sada puno bolje biljeลพi uzorak. Ovo je moฤ polinomske regresije.
Vratimo se naลกem primjeru. Dob nije u linearnoj vezi s prihodom. Rana dob moลพe imati stalan prihod blizu nule jer djeca ili mladi ljudi ne rade. Zatim se poveฤava u radnoj dobi i smanjuje tijekom umirovljenja. Obiฤno je oblika obrnutog slova U. Jedan od naฤina da se uhvati ovaj uzorak je dodavanje snage dva regresiji.
Da vidimo hoฤe li to poveฤati toฤnost.
Morate dodati ovu novu znaฤajku u skup podataka i na popis kontinuiranih znaฤajki.
Novu varijablu dodajete u skup podataka treniranja i testiranja, tako da je prikladnije napisati funkciju.
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
Funkcija ima 3 argumenta:
- df_t: definirajte skup za obuku
- df_te: definirajte ispitni skup
- var_name = 'age': Definirajte varijablu za transformaciju
Moลพete koristiti objekt pow(2) za kvadriranje varijable starosti. Imajte na umu da je nova varijabla nazvana 'novo'
Sada kada je funkcija square_var napisana, moลพete stvoriti nove skupove podataka.
df_train_new, df_test_new = square_var(df_train, df_test, var_name = 'age')
Kao ลกto vidite, novi skup podataka ima joลก jednu znaฤajku.
print(df_train_new.shape, df_test_new.shape) (32561, 16) (16281, 16)
Kvadratna varijabla naziva se new u skupu podataka. Morate ga dodati na popis kontinuiranih znaฤajki.
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]
biljeลกke da ste promijenili direktorij Grafa. Ne moลพete trenirati razliฤite modele u istom direktoriju. To znaฤi da trebate promijeniti putanju argumenta model_dir. Ako to ne uฤinite, TensorFlow ฤe izbaciti pogreลกku.
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)
Sada kada je klasifikator dizajniran s novim skupom podataka, moลพete trenirati i procijeniti 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 = 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}
Kvadratna varijabla poboljลกala je toฤnost s 0.76 na 0.79. Da vidimo moลพete li uspjeti bolje kombiniranjem izraza bucketization i interakcije.
Bucketizacija i interakcija
Kao ลกto ste vidjeli prije, linearni klasifikator ne moลพe ispravno uhvatiti obrazac dobi i prihoda. To je zato ลกto uฤi jednu teลพinu za svaku znaฤajku. Kako biste klasifikatoru olakลกali posao, jednu stvar koju moลพete uฤiniti je izdvojiti znaฤajku. Bucketing transformira numeriฤku znaฤajku u nekoliko odreฤenih na temelju raspona u koji spada, a svaka od tih novih znaฤajki pokazuje spada li dob osobe u taj raspon.
S ovim novim znaฤajkama, linearni model moลพe uhvatiti odnos uฤenjem razliฤitih teลพina za svaku kantu.
U TensorFlowu se to radi s bucketized_column. Morate dodati raspon vrijednosti u granice.
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])
Veฤ znate da dob nije linearna s prihodom. Drugi naฤin poboljลกanja modela je interakcija. Rijeฤju TensorFlowa, to je kriลพanje znaฤajki. Kriลพanje znaฤajki naฤin je stvaranja novih znaฤajki koje su kombinacije postojeฤih, ลกto moลพe biti od pomoฤi za linearni klasifikator koji ne moลพe modelirati interakcije izmeฤu znaฤajki.
Dob moลพete raลกฤlaniti pomoฤu druge znaฤajke kao ลกto je obrazovanje. Odnosno, neke ฤe skupine vjerojatno imati visoke prihode, a druge niske (razmislite o doktoratu).
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)]
Da biste stvorili kriลพni stupac znaฤajki, koristite crossed_column s varijablama za kriลพanje u zagradi. Hash_bucket_size oznaฤava maksimalne moguฤnosti kriลพanja. Za stvaranje interakcije izmeฤu varijabli (barem jedna varijabla mora biti kategoriฤka), moลพete koristiti tf.feature_column.crossed_column. Da biste koristili ovaj objekt, morate u uglate zagrade dodati varijablu za interakciju i drugi argument, veliฤinu spremnika. Veliฤina spremnika je najveฤi moguฤi broj grupa unutar varijable. Ovdje ga postavljate na 1000 jer ne znate toฤan broj grupa
age_buckets potrebno je kvadrirati prije dodavanja u stupce znaฤajki. Takoฤer dodajete nove znaฤajke u stupce znaฤajki i pripremate procjenitelj
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)
Izlaz
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)
Spremni ste procijeniti novi model i vidjeti hoฤe li poboljลกati toฤnost.
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}
Nova razina toฤnosti je 83.58 posto. To je ฤetiri posto viลกe od prethodnog modela.
Na kraju, moลพete dodati termin za reguliranje kako biste sprijeฤili prekomjerno opremanje.
Korak 5) Hiperparametar: laso i greben
Vaลก model moลพe patiti od prekomjerno opremanje or nedovoljna opremljenost.
- Prekomjerno opremanje: model ne moลพe generalizirati predviฤanje na nove podatke
- Nedovoljno prilagoฤavanje: model ne moลพe uhvatiti uzorak podataka. tj. linearna regresija kada su podaci nelinearni
Kada model ima puno parametara i relativno malu koliฤinu podataka, to dovodi do loลกih predviฤanja. Zamislite, jedna grupa ima samo tri zapaลพanja; model ฤe izraฤunati teลพinu za ovu grupu. Teลพina se koristi za predviฤanje; ako se opaลพanja testnog skupa za ovu posebnu skupinu potpuno razlikuju od skupa za treniranje, tada ฤe model napraviti krivo predviฤanje. Tijekom evaluacije sa skupom za vjeลพbanje, toฤnost je dobra, ali nije dobra s testnim skupom jer izraฤunate teลพine nisu prave za generalizaciju uzorka. U ovom sluฤaju ne donosi razumno predviฤanje na temelju nevidljivih podataka.
Kako biste sprijeฤili prekomjerno prilagoฤavanje, regularizacija vam daje moguฤnosti kontrole takve sloลพenosti i da je uฤinite generaliziranijom. Postoje dvije tehnike regulacije:
- L1: Laso
- L2: Greben
U TensorFlowu moลพete dodati ova dva hiperparametra u optimizator. Na primjer, ลกto je viลกi hiperparametar L2, teลพina ima tendenciju da bude vrlo niska i blizu nule. Uklopljena linija bit ฤe vrlo ravna, dok L2 blizu nule implicira da su ponderi blizu regularne linearne regresije.
Moลพete sami isprobati razliฤite vrijednosti hiperparametara i vidjeti moลพete li poveฤati razinu toฤnosti.
biljeลกke da ako promijenite hiperparametar, trebate izbrisati mapu ongoing/train4 inaฤe ฤe model zapoฤeti s prethodno obuฤenim modelom.
Pogledajmo kakva je toฤnost s hypeom
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))
IZLAZ
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)
IZLAZ
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)
Izlaz
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}
Ovim hiperparametrom malo poveฤavate metriku toฤnosti. U sljedeฤem vodiฤu nauฤit ฤete kako poboljลกati linearni klasifikator pomoฤu kernel metode.
Rezime
Da biste obuฤili model, trebate:
- Definirajte znaฤajke: Neovisne varijable: X
- Definirajte oznaku: Zavisna varijabla: y
- Konstruirajte vlak/set za testiranje
- Definirajte poฤetnu teลพinu
- Definirajte funkciju gubitka: MSE
- Optimizirajte model: Gradijent spuลกtanja
- Definirati:
- Stopa uฤenja
- Broj epohe
- Veliฤina serije
- Broj razreda
U ovom vodiฤu ste nauฤili kako koristiti API visoke razine za klasifikator linearne regresije. Trebate definirati:
- Stupci znaฤajki. Ako je kontinuirano: tf.feature_column.numeric_column(). Popis moลพete popuniti razumijevanjem popisa u pythonu
- Procjenitelj: tf.estimator.LinearClassifier(feature_columns, model_dir, n_classes = 2)
- Funkcija za uvoz podataka, veliฤine serije i epohe: input_fn()
Nakon toga, spremni ste za obuku, procjenu i predviฤanje pomoฤu train(), evaluate() i predict()
Da biste poboljลกali performanse modela, moลพete:
- Koristite polinomsku regresiju
- Pojam interakcije: tf.feature_column.crossed_column
- Dodajte parametar regularizacije




