En yaygın iki denetimli öğrenme görevi doğrusal regresyon ve doğrusal sınıflandırıcıdır. Doğrusal regresyon bir değeri tahmin ederken, doğrusal sınıflandırıcı bir sınıfı tahmin eder. Bu eğitim, Doğrusal Sınıflandırıcıya odaklanmıştır.
Doğrusal Sınıflandırıcı nedir?
Bir Doğrusal Sınıflandırıcı Makine Öğrenmesi istatistiksel sınıflandırma için kendi özelliklerine göre bir nesnenin sınıfını bulmak için kullanılan bir yöntemdir. Bir nesnenin özelliklerinin doğrusal bir kombinasyonunun değerine dayalı olarak sınıflandırma kararı verir. Doğrusal sınıflandırıcı, belge sınıflandırması gibi pratik problemlerde ve çok değişkenli problemlerde kullanılır.
Sınıflandırma sorunları, makine öğrenimi görevinin yaklaşık yüzde 80'ini temsil ediyor. Sınıflandırma, bir girdi seti verilen her bir sınıfın olasılığını tahmin etmeyi amaçlamaktadır. Etiket (yani bağımlı değişken), sınıf adı verilen ayrı bir değerdir.
- Etikette yalnızca iki sınıf varsa, öğrenme algoritması bir İkili Sınıflandırıcıdır.
- Çok sınıflı sınıflandırıcı, ikiden fazla sınıf içeren etiketleri ele alır.
Örneğin, tipik bir ikili sınıflandırma problemi, bir müşterinin ikinci bir satın alma olasılığını tahmin etmektir. İkiden fazla hayvan türü olduğu için, bir resimde görüntülenen hayvanın türünü çok sınıflı bir sınıflandırma problemidir.
Bu öğreticinin teorik kısmı, birincil odak noktasını ikili sınıfa koyar. Gelecekteki bir eğitimde çok sınıflı çıktı işlevi hakkında daha fazla bilgi edineceksiniz.
Bu eğitimde öğreneceksiniz
- Doğrusal Sınıflandırıcı nedir?
- İkili sınıflandırıcı nasıl çalışır?
- Doğrusal Sınıflandırıcının performansı nasıl ölçülür?
- Doğruluk
- Karışıklık matrisi
- Hassasiyet ve Hassasiyet
- TensorFlow ile Doğrusal Sınıflandırıcı
- Adım 1) Verileri içe aktarın
- Adım 2) Veri Dönüştürme
- Adım 3) Sınıflandırıcıyı Eğit
- Adım 4) Modeli geliştirin
- Adım 5) Hiperparametre: Kement ve Sırt
İkili sınıflandırıcı nasıl çalışır?
Önceki eğitimde bir fonksiyonun iki tür değişkenden, bir bağımlı değişken ve bir dizi özellikten (bağımsız değişkenler) oluştuğunu öğrendiniz. Doğrusal regresyonda, bağımlı değişken, aralıksız gerçek bir sayıdır. Birincil amaç, ortalama hata karesini en aza indirerek değerini tahmin etmektir.
TensorFlow İkili Sınıflandırıcı için, etiketin iki olası tamsayı değeri olabilir. Çoğu durumda, [0,1] veya [1,2] 'dir. Örneğin amaç, bir müşterinin bir ürün alıp almayacağını tahmin etmektir. Etiket şu şekilde tanımlanır:
- Y = 1 (müşteri ürünü satın aldı)
- Y = 0 (müşteri ürünü satın almaz)
Model, her bir müşteriyi ait olduğu en olası sınıfa, yani potansiyel alıcıya göre sınıflandırmak için X özelliklerini kullanır.
Başarı olasılığı lojistik regresyon ile hesaplanır . Algoritma, X özelliğine dayalı bir olasılık hesaplayacak ve bu olasılık yüzde 50'nin üzerinde olduğunda bir başarıyı tahmin edecektir. Daha resmi olarak, olasılık aşağıdaki TensorFlow İkili Sınıflandırma örneğinde gösterildiği gibi hesaplanır:
0, ağırlık kümesidir, özellikler ve önyargı.
İşlev iki bölüme ayrılabilir:
- Doğrusal model
- Lojistik fonksiyon
Doğrusal model
Ağırlıkların nasıl hesaplandığını zaten biliyorsunuz. Ağırlıklar bir iç çarpım kullanılarak hesaplanır: Y, tüm x i özelliklerinin doğrusal bir fonksiyonudur . Modelin özellikleri yoksa, tahmin önyargıya eşittir, b.
Ağırlıkları x özellikleri arasında ilişki yönünü gösterir i ve etiket y. Pozitif bir korelasyon, pozitif sınıfın olasılığını artırırken, negatif bir korelasyon olasılığı 0'a yaklaştırır (yani, negatif sınıf).
Doğrusal model, yalnızca [0,1] aralığının olasılık ölçüsü ile tutarsız olan gerçek sayı döndürür. Doğrusal model çıktısını bir olasılığa dönüştürmek için lojistik fonksiyon gereklidir,
Lojistik fonksiyon
Lojistik fonksiyon veya sigmoid fonksiyon S-şekline sahiptir ve bu fonksiyonun çıktısı her zaman 0 ile 1 arasındadır.
Doğrusal regresyonun çıktısını sigmoid fonksiyonuna ikame etmek kolaydır. 0 ile 1 arasında olasılıkla yeni bir sayı ile sonuçlanır.
Sınıflandırıcı, olasılığı bir sınıfa dönüştürebilir
- 0 ile 0,49 arasındaki değerler, sınıf 0 olur
- 0,5 ile 1 arasındaki değerler sınıf 1 olur
Doğrusal Sınıflandırıcının performansı nasıl ölçülür?
Doğruluk
Bir sınıflandırıcının genel performansı, doğruluk ölçüsü ile ölçülür. Doğruluk, tüm doğru değerlerin toplam gözlem sayısına bölünmesiyle elde edilir. Örneğin, yüzde 80'lik bir doğruluk değeri, modelin vakaların yüzde 80'inde doğru olduğu anlamına gelir.
Bu metrikle, özellikle dengesizlik sınıfı için bir eksikliği not edebilirsiniz. Grup başına gözlem sayısı eşit olmadığında bir dengesizlik veri kümesi oluşur. Diyelimki; lojistik işlevi olan nadir bir olayı sınıflandırmaya çalışırsınız. Sınıflandırıcının, bir hastalığın ardından bir hastanın ölümünü tahmin etmeye çalıştığını düşünün. Verilerde hastaların yüzde 5'i hayatını kaybetti. Ölüm sayısını tahmin etmek için bir sınıflandırıcı eğitebilir ve performansları değerlendirmek için doğruluk ölçüsünü kullanabilirsiniz. Sınıflandırıcı, tüm veri kümesi için 0 ölüm öngörürse, vakanın yüzde 95'inde doğru olacaktır.
Karışıklık matrisi
Bir sınıflandırıcının performansını değerlendirmenin daha iyi bir yolu, kafa karışıklığı matrisine bakmaktır.
Karışıklık matrisi, yukarıdaki Doğrusal Sınıflandırıcı örneğinde gösterildiği gibi gerçek ve tahmin edilen sınıfları karşılaştırarak bir sınıflandırıcının doğruluğunu görselleştirir. İkili karışıklık matrisi karelerden oluşur:
- TP: Gerçek Pozitif: Öngörülen değerler, gerçek pozitif olarak doğru şekilde tahmin edilir
- FP: Öngörülen değerler yanlış bir şekilde gerçek bir pozitif öngördü. yani, pozitif olarak tahmin edilen Negatif değerler
- FN: Yanlış Negatif: Negatif olarak tahmin edilen pozitif değerler
- TN: Doğru Negatif: Öngörülen değerler, gerçek negatif olarak doğru şekilde tahmin edilir
Karışıklık matrisinden, gerçek sınıfı ve tahmin edilen sınıfı karşılaştırmak kolaydır.
Hassasiyet ve Hassasiyet
Karışıklık matrisi, gerçek pozitif ve yanlış pozitif hakkında iyi bir fikir verir. Bazı durumlarda, daha kısa bir metriğe sahip olmak tercih edilir.
Hassas
Hassasiyet ölçüsü, pozitif sınıfın doğruluğunu gösterir. Pozitif sınıfın tahmininin ne kadar doğru olduğunu ölçer.
Sınıflandırıcı tüm pozitif değerleri mükemmel bir şekilde sınıflandırdığında maksimum puan 1'dir. Negatif sınıfı görmezden geldiğinden tek başına hassasiyet pek yardımcı olmaz. Metrik genellikle Geri Çağırma metriğiyle eşleştirilir. Hatırlama aynı zamanda duyarlılık veya gerçek pozitif oran olarak da adlandırılır.
Duyarlılık
Hassasiyet, doğru şekilde tespit edilen pozitif sınıfların oranını hesaplar. Bu metrik, modelin pozitif bir sınıfı tanımada ne kadar iyi olduğunu gösterir.
TensorFlow ile Doğrusal Sınıflandırıcı
Bu eğitim için, nüfus sayımı veri setini kullanacağız. Amaç, gelir düzeyini tahmin etmek için nüfus sayımı veri setindeki değişkenleri kullanmaktır. Gelirin ikili bir değişken olduğuna dikkat edin
- gelir> 50k ise 1 değeri ile
- 0 gelir <50k ise.
Bu değişken sizin etiketinizdir
Bu veri kümesi sekiz kategorik değişken içerir:
- iş yeri
- Eğitim
- evlilik
- Meslek
- ilişki
- yarış
- seks
- ana vatan
dahası, altı sürekli değişken:
- yaş
- fnlwgt
- eğitim_sayısı
- Sermaye kazancı
- sermaye_ kaybı
- hours_week
Bu TensorFlow Sınıflandırma örneği aracılığıyla, TensorFlow tahmin aracıyla doğrusal TensorFlow Sınıflandırıcıları nasıl eğiteceğinizi ve doğruluk metriğini nasıl iyileştireceğinizi anlayacaksınız.
Aşağıdaki gibi ilerleyeceğiz:
- Adım 1) Verileri içe aktarın
- Adım 2) Veri Dönüştürme
- Adım 3) Sınıflandırıcıyı eğitin
- Adım 4) Modeli geliştirin
- Adım 5) Hiperparametre: Kement ve Sırt
Adım 1) Verileri içe aktarın
Önce eğitim sırasında kullanılan kitaplıkları içe aktarırsınız.
import tensorflow as tfimport pandas as pd
Ardından, verileri UCI arşivinden içe aktarırsınız ve sütun adlarını tanımlarsınız. Bir panda veri çerçevesindeki sütunları adlandırmak için SÜTUNLARI kullanacaksınız.
Sınıflandırıcıyı Pandas veri çerçevesi kullanarak eğiteceğinizi unutmayın.
## 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"
Çevrimiçi olarak depolanan veriler zaten bir tren seti ve test seti arasında bölünmüştür.
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)
Tren seti 32.561 gözlem ve test seti 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, sınıflandırıcıyı eğitmek için bir Boolean değeri gerektirir. Değerleri dizeden tam sayıya çevirmeniz gerekir. Etiket bir nesne olarak depolanır, ancak onu sayısal bir değere dönüştürmeniz gerekir. Aşağıdaki kod, sütun öğesi üzerinde dönüştürülecek ve döngü yapılacak değerlere sahip bir sözlük oluşturur. Bu işlemi, biri tren testi, biri test seti için olmak üzere iki kez gerçekleştirdiğinizi unutmayın.
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]
Tren verilerinde 24.720, 50.000'den düşük ve 7841'den düşük gelir var. Oran, test seti için hemen hemen aynıdır. Daha fazla bilgi için lütfen Facets'teki bu eğiticiye bakın.
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
Adım 2) Veri Dönüştürme
Tensorflow ile doğrusal bir sınıflandırıcı eğitmeden önce birkaç adım gereklidir. Modele dahil edilecek unsurları hazırlamanız gerekir. Karşılaştırmalı regresyonda, herhangi bir dönüşüm uygulamadan orijinal verileri kullanacaksınız.
Tahmincinin, modeli eğitmek için bir özellikler listesine sahip olması gerekir. Bu nedenle, sütunun verilerinin bir tensöre dönüştürülmesi gerekir.
Tiplerine göre iki özellik listesi tanımlamak ve ardından bunları tahmin edicinin özellik_sütunlarına aktarmak iyi bir uygulamadır.
Sürekli unsurları dönüştürerek başlayacaksınız, ardından kategorik verilerle bir grup tanımlayacaksınız.
Veri kümesinin özellikleri iki biçime sahiptir:
- Tamsayı
- Nesne
Her özellik, türlerine göre sonraki iki değişkende listelenir.
## 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, sürekli değişkenlerin tensöre dönüştürülmesine yardımcı olmak için bir numeric_column nesnesi ile donatılmıştır. Aşağıdaki kodda, CONTI_FEATURES öğesinden tüm değişkenleri sayısal değeri olan bir tensöre dönüştürüyorsunuz. Modeli oluşturmak için bu zorunludur. Tüm bağımsız değişkenlerin uygun tensöre dönüştürülmesi gerekir.
Aşağıda, feature_column.numeric_column arkasında neler olduğunu görmenizi sağlayacak bir kod yazıyoruz. Döndürülen değeri yaş için yazdıracağız Açıklayıcı amaçlıdır, bu nedenle python kodunu anlamaya gerek yoktur. Kodları anlamak için resmi belgelere bakabilirsiniz.
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.]]
Değerler df_train ile tamamen aynıdır
continuous_features = [tf.feature_column.numeric_column(k) for k in CONTI_FEATURES]
TensorFlow belgelerine göre, kategorik verileri dönüştürmenin farklı yolları vardır. Bir özelliğin kelime listesi biliniyorsa ve çok fazla değeri yoksa, kategorik sütunu categorical_column_with_vocabulary_list ile oluşturmak mümkündür. Tüm benzersiz kelime listesine bir kimlik atayacaktır.
Örneğin, bir değişken durumunun üç farklı değeri varsa:
- Koca
- Kadın eş
- Tek
Ardından üç kimlik ilişkilendirilecektir. Örneğin, Kocanın kimliği 1, Kadının kimliği 2 vb. Olacaktır.
Gösterim amacıyla, bu kodu bir nesne değişkenini TensorFlow'da kategorik bir sütuna dönüştürmek için kullanabilirsiniz.
Özellik cinsiyetinin yalnızca iki değeri olabilir: erkek veya kadın. Özellik cinsiyetini dönüştürdüğümüzde, Tensorflow biri erkek diğeri kadın olmak üzere 2 yeni sütun oluşturacak. Cinsiyet erkeğe eşitse, yeni sütun erkek 1'e ve kadın 0'a eşit olacaktır. Bu örnek aşağıdaki tabloda gösterilmektedir:
satırlar |
seks |
dönüşümden sonra |
erkek |
kadın |
1 |
erkek |
=> |
1 |
0 |
2 |
erkek |
=> |
1 |
0 |
3 |
kadın |
=> |
0 |
1 |
Tensorflow'da:
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'])
Kodlamayı yazdırmak için aşağıya Python kodunu ekledik. Yine, kodu anlamanıza gerek yok, amaç dönüşümü görmektir.
Ancak, verileri dönüştürmenin daha hızlı bir yolu categorical_column_with_hash_bucket yöntemini kullanmaktır. Seyrek bir matriste dize değişkenlerini değiştirmek faydalı olacaktır. Seyrek bir matris, çoğunlukla sıfır olan bir matristir. Yöntem her şeyi halleder. Yalnızca paket sayısını ve anahtar sütununu belirtmeniz gerekir. Paket sayısı, Tensorflow'un oluşturabileceği maksimum grup miktarıdır. Anahtar sütun, dönüştürülecek sütunun adıdır.
Aşağıdaki kodda, tüm kategorik unsurların üzerinde bir döngü oluşturursunuz.
categorical_features = [tf.feature_column.categorical_column_with_hash_bucket(k, hash_bucket_size=1000) for k in CATE_FEATURES]
Adım 3) Sınıflandırıcıyı Eğit
TensorFlow şu anda doğrusal regresyon ve doğrusal sınıflandırma için bir tahminci sağlamaktadır.
- Doğrusal regresyon: LinearRegressor
- Doğrusal sınıflandırma: LinearClassifier
Doğrusal sınıflandırıcının sözdizimi, bir bağımsız değişken olan n_class haricinde doğrusal regresyon öğreticisindeki ile aynıdır. Özellik sütununu, model dizinini tanımlamanız ve doğrusal regresörle karşılaştırmanız gerekir; sınıf numarasını tanımladınız. Bir logit regresyonu için, sınıf sayısı 2'ye eşittir.
Model, sürekli_özellikler ve kategorik_özellikler içinde bulunan sütunların ağırlıklarını hesaplayacaktır.
model = tf.estimator.LinearClassifier(n_classes = 2,model_dir="ongoing/train",feature_columns=categorical_features+ continuous_features)
ÇIKTI:
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}
Artık sınıflandırıcı tanımlandığına göre, girdi işlevini oluşturabilirsiniz. Yöntem, doğrusal regresör öğreticisindeki ile aynıdır. Burada, 128 toplu iş boyutunu kullanırsınız ve verileri karıştırırsınız.
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)
Doğrusal tahmincinin gerektirdiği argümanlarla bir işlev yaratırsınız, yani dönem sayısı, parti sayısı ve veri kümesini veya notu karıştırırsınız. Verileri modele aktarmak için Pandas yöntemini kullandığınızdan, X değişkenlerini pandalar veri çerçevesi olarak tanımlamanız gerekir. ÖZELLİKLER'de depolanan tüm verilerin üzerinde döngü oluşturduğunuzu unutmayın.
Modeli model.train nesnesi ile eğitelim. Modeli uygun değerlerle beslemek için önceden tanımlanan işlevi kullanırsınız. Toplu iş boyutunu 128 ve dönem sayısını Yok olarak ayarladığınızı unutmayın. Model bin adımdan fazla eğitilecek.
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.
Kaybın daha sonra son 100 adımda, yani 901'den 1000'e düştüğünü unutmayın.
Bin yineleme sonrası nihai kayıp 5444'tür. Modelinizi test seti üzerinde tahmin edebilir ve performansını görebilirsiniz. Modelinizin performansını değerlendirmek için, nesne değerlendirme kullanmanız gerekir. Modeli test setiyle beslersiniz ve dönem sayısını 1 olarak ayarlarsınız, yani veriler modele yalnızca bir kez gidecektir.
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, teorik bölümde öğrendiğiniz tüm ölçümleri döndürür. Şaşırtıcı olmayan bir şekilde, dengesiz etiket nedeniyle doğruluk büyüktür. Aslında, model rastgele bir tahminden biraz daha iyi performans gösteriyor. Modelin 50K'dan daha düşük gelire sahip tüm haneleri öngördüğünü ve modelin yüzde 70 doğruluğa sahip olduğunu hayal edin. Daha yakından bir analizde, tahmin ve geri çağırmanın oldukça düşük olduğunu görebilirsiniz.
Adım 4) Modeli geliştirin
Artık bir kıyaslama modeliniz olduğuna göre, onu iyileştirmeyi deneyebilir, yani doğruluğu artırabilirsiniz. Önceki eğitimde, bir etkileşim terimi ile tahmin gücünü nasıl geliştireceğinizi öğrendiniz. Bu eğitimde, regresyona bir polinom terimi ekleyerek bu fikri yeniden gözden geçireceksiniz.
Polinom regresyon, verilerde doğrusal olmama durumunda yararlıdır. Verilerdeki doğrusal olmayışı yakalamanın iki yolu vardır.
- Polinom terim ekleyin
- Sürekli değişkeni kategorik bir değişkene ayırın
Polinom terimi
Aşağıdaki resimden polinom regresyonunun ne olduğunu görebilirsiniz. Farklı güçlere sahip X değişkenli bir denklemdir. İkinci derece polinom regresyonunun iki değişkeni vardır, X ve X'in karesi. Üçüncü derecenin üç değişkeni vardır, X, X 2 ve X 3
Aşağıda, X ve Y olmak üzere iki değişkenli bir grafik oluşturduk. İlişkinin doğrusal olmadığı açıktır. Doğrusal bir regresyon eklersek, modelin modeli yakalayamadığını görebiliriz (soldaki resim).
Şimdi, aşağıdaki resimden soldaki resme bakın, regresyona beş terim ekledik (yani y = x + x 2 + x 3 + x 4 + x 5. Model şimdi modeli çok daha iyi yakalıyor. polinom regresyonunun gücü.
Örneğimize geri dönelim. Yaş, gelirle doğrusal bir ilişki içinde değildir. Erken yaşta, çocuklar veya gençler çalışmadığı için sıfıra yakın bir sabit gelire sahip olabilir. Daha sonra çalışma yaşı artmakta ve emeklilikte azalmaktadır. Tipik olarak bir Ters U şeklidir. Bu kalıbı yakalamanın bir yolu, regresyona bir kuvvet ikilisi eklemektir.
Doğruluğu artırıp artırmadığını görelim.
Bu yeni özelliği veri kümesine ve sürekli özellik listesine eklemeniz gerekir.
Yeni değişkeni tren ve test veri kümesine eklersiniz, bu nedenle bir işlev yazmak daha uygundur.
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
İşlevin 3 bağımsız değişkeni vardır:
- df_t: eğitim setini tanımlayın
- df_te: test kümesini tanımlayın
- var_name = 'age': Dönüştürülecek değişkeni tanımlayın
Age değişkeninin karesini almak için pow (2) nesnesini kullanabilirsiniz. Yeni değişkenin 'yeni' olarak adlandırıldığını unutmayın.
Artık square_var işlevi yazıldığına göre, yeni veri kümelerini oluşturabilirsiniz.
df_train_new, df_test_new = square_var(df_train, df_test, var_name = 'age')
Gördüğünüz gibi, yeni veri kümesinin bir özelliği daha var.
print(df_train_new.shape, df_test_new.shape)(32561, 16) (16281, 16)
Veri kümesinde kare değişkeni yeni olarak adlandırılır. Sürekli özellikler listesine eklemeniz gerekir.
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]
Grafiğin dizinini değiştirdiğinizi unutmayın . Aynı dizinde farklı modeller eğitemezsiniz. Bu, model_dir bağımsız değişkeninin yolunu değiştirmeniz gerektiği anlamına gelir. Bunu yapmazsanız TensorFlow bir hata verir.
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)
Artık sınıflandırıcı yeni veri kümesiyle tasarlandığına göre, modeli eğitebilir ve değerlendirebilirsiniz.
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}
Kare değişkeni, doğruluğu 0,76'dan 0,79'a yükseltti. Bakalım gruplama ve etkileşim terimini bir araya getirerek daha iyisini yapabilecek misiniz?
Bölüm oluşturma ve etkileşim
Daha önce gördüğünüz gibi, doğrusal bir sınıflandırıcı yaş-gelir modelini doğru bir şekilde yakalayamaz. Bunun nedeni, her özellik için tek bir ağırlık öğrenmesidir. Sınıflandırıcının işini kolaylaştırmak için yapabileceğiniz bir şey, özelliği gruplamaktır. Gruplama, sayısal bir özelliği, içine düştüğü aralığa bağlı olarak birkaç belirli özelliğe dönüştürür ve bu yeni özelliklerin her biri, bir kişinin yaşının bu aralıkta olup olmadığını gösterir.
Bu yeni özelliklerle doğrusal model, her bir kova için farklı ağırlıklar öğrenerek ilişkiyi yakalayabilir.
TensorFlow'da, buckized_column ile yapılır. Sınırlara değer aralığını eklemeniz gerekir.
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])
Yaşın gelirle doğrusal olmadığını zaten biliyorsunuz. Modeli geliştirmenin bir başka yolu da etkileşimdir. TensorFlow kelimesine göre, özellik geçişidir. Özellik geçişi, mevcut özelliklerin kombinasyonları olan ve özellikler arasındaki etkileşimleri modelleyemeyen doğrusal bir sınıflandırıcı için yararlı olabilecek yeni özellikler oluşturmanın bir yoludur.
Yaşı eğitim gibi başka bir özellikle ayırabilirsiniz. Yani, bazı grupların yüksek bir gelire sahip olması ve bazılarının düşük olması muhtemeldir (Doktora öğrencisini düşünün).
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)]
Bir çapraz özellik sütunu oluşturmak için, köşeli ayraç içinde kesişecek değişkenlerle çapraz_sütun kullanırsınız. Hash_bucket_size, maksimum geçiş olasılıklarını belirtir. Değişkenler arasında etkileşim oluşturmak için (en az bir değişkenin kategorik olması gerekir), tf.feature_column.crossed_column'u kullanabilirsiniz. Bu nesneyi kullanmak için, etkileşime girecek değişkeni köşeli parantez içine ve ikinci bağımsız değişken olan kova boyutunu eklemeniz gerekir. Kova boyutu, bir değişken içinde mümkün olan maksimum grup sayısıdır. Tam grup sayısını bilmediğiniz için burada 1000 olarak ayarladınız.
age_buckets, özellik sütunlarına eklenmeden önce karesinin alınması gerekir. Ayrıca yeni özellikleri özellikler sütunlarına eklersiniz ve tahmin ediciyi hazırlarsınız
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)
ÇIKTI
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)
Yeni modeli tahmin etmeye ve doğruluğunu iyileştirip iyileştirmediğini görmeye hazırsınız.
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}
Yeni doğruluk seviyesi yüzde 83,58'dir. Önceki modelden yüzde dört daha yüksek.
Son olarak, aşırı uyumu önlemek için bir düzenleme terimi ekleyebilirsiniz.
Adım 5) Hiperparametre: Kement ve Sırt
Modeliniz gereğinden fazla veya yetersiz uyumluluktan muzdarip olabilir .
- Aşırı uyum: Model, tahmini yeni verilere genelleyemez
- Yetersiz uyum: Model, verilerin modelini yakalayamıyor. yani, veriler doğrusal olmadığında doğrusal regresyon
Bir model çok sayıda parametreye ve nispeten düşük miktarda veriye sahip olduğunda, kötü tahminlere yol açar. Bir grubun yalnızca üç gözlemi olduğunu hayal edin; model bu grup için bir ağırlık hesaplayacaktır. Ağırlık bir tahmin yapmak için kullanılır; Bu belirli grup için test setinin gözlemleri eğitim setinden tamamen farklıysa, model yanlış bir tahmin yapacaktır. Eğitim seti ile değerlendirme sırasında, doğruluk iyidir, ancak test setiyle iyi değildir çünkü hesaplanan ağırlıklar modeli genellemek için doğru değildir. Bu durumda, görünmeyen veriler üzerinde makul bir tahmin yapmaz.
Aşırı uyumu önlemek için, düzenleme size bu tür karmaşıklığı kontrol etme ve daha genelleştirilebilir hale getirme olanakları sunar. İki düzenlileştirme tekniği vardır:
- L1: Kement
- L2: Sırt
TensorFlow'da, bu iki hiperparametreyi optimize ediciye ekleyebilirsiniz. Örneğin, hiperparametre L2 ne kadar yüksekse, ağırlık çok düşük ve sıfıra yakın olma eğilimindedir. Yerleştirilen çizgi çok düz olurken, sıfıra yakın bir L2, ağırlıkların normal doğrusal regresyona yakın olduğunu gösterir.
Hiperparametrelerin farklı değerlerini kendi kendinize deneyebilir ve doğruluk düzeyini artırıp artıramayacağınızı görebilirsiniz.
Not Eğer hyperparameter değiştirirseniz,, devam eden klasörü silmek gerektiğini / train4 aksi modeli önceden eğitilmiş model ile başlayacaktır.
Hype ile doğruluğun nasıl olduğunu görelim
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))
ÇIKIŞ
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)
ÇIKIŞ
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)
ÇIKTI
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}
Bu hiperparametre ile doğruluk metriklerini biraz artırırsınız. Bir sonraki eğitimde, bir çekirdek yöntemi kullanarak bir doğrusal sınıflandırıcıyı nasıl geliştireceğinizi öğreneceksiniz.
Özet
Bir modeli eğitmek için yapmanız gerekenler:
- Özellikleri tanımlayın: Bağımsız değişkenler: X
- Etiketi tanımlayın: Bağımlı değişken: y
- Bir tren / test seti oluşturun
- Başlangıç ağırlığını tanımlayın
- Kayıp işlevini tanımlayın: MSE
- Modeli optimize edin: Gradyan inişi
- Tanımlamak:
- Öğrenme oranı
- Dönem sayısı
- Parti boyutu
- Sınıf sayısı
Bu eğiticide, doğrusal bir regresyon sınıflandırıcı için üst düzey API'nin nasıl kullanılacağını öğrendiniz. Şunları tanımlamanız gerekir:
- Özellik sütunları. Sürekli ise: tf.feature_column.numeric_column (). Python liste anlama ile bir listeyi doldurabilirsiniz
- Tahminci: tf.estimator.LinearClassifier (feature_columns, model_dir, n_classes = 2)
- Verileri, toplu iş boyutunu ve dönemi içe aktarmak için bir işlev: input_fn ()
Bundan sonra, train (), eval () ve tahmin () ile eğitmeye, değerlendirmeye ve tahmin yapmaya hazırsınız.
Modelin performansını iyileştirmek için şunları yapabilirsiniz:
- Polinom regresyonu kullanın
- Etkileşim terimi: tf.feature_column.crossed_column
- Düzenli hale getirme parametresi ekle