Makine Öğreniminde Gauss Çekirdeği: Çekirdek Yöntem Örnekleri

İçindekiler:

Anonim

Bu öğreticinin amacı, bir veri kümesini doğrusal olarak ayrılabilir hale getirmektir. Eğitim iki bölüme ayrılmıştır:

  1. Özellik dönüşümü
  2. Tensorflow ile bir Kernel sınıflandırıcı eğitin

İlk bölümde, Makine Öğreniminde bir Kernel yönteminin arkasındaki fikri anlayacaksınız, ikinci bölümde ise Tensorflow ile bir çekirdek sınıflandırıcıyı nasıl eğiteceğinizi göreceksiniz. Yetişkin veri kümesini kullanacaksınız. Bu veri setinin amacı, her bir hanenin davranışını bilerek geliri 50.000'in altındaki ve üzerindeki geliri sınıflandırmaktır.

Bu eğitimde öğreneceksiniz-

  • Neden Çekirdek Yöntemlerine ihtiyacınız var?
  • Makine öğreniminde Çekirdek nedir?
  • Çekirdek Yöntem Türleri
  • TensorFlow ile Gauss Kernel sınıflandırıcısını eğitin

Neden Çekirdek Yöntemlerine ihtiyacınız var?

Her sınıflandırıcının amacı, sınıfları doğru tahmin etmektir. Bunun için veri setinin ayrılabilir olması gerekir. Aşağıdaki arsaya bakın; siyah çizginin üzerindeki tüm noktaların birinci sınıfa ve diğer noktaların ikinci sınıfa ait olduğunu görmek oldukça basittir. Bununla birlikte, bu kadar basit bir veri kümesine sahip olmak son derece nadirdir. Çoğu durumda, veriler ayrılamaz. Makine Öğrenimindeki çekirdek yöntemleri, lojistik regresyon gibi saf sınıflandırıcılara zor anlar yaşatır.

import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D 
x_lin = np.array([1,2,3,4,5,6,7,8,9,10])y_lin = np.array([2,2,3,2,2,9,6,8,8,9])label_lin = np.array([0,0,0,0,0,1,1,1,1,1])fig = plt.figure()ax=fig.add_subplot(111)plt.scatter(x_lin, y_lin, c=label_lin, s=60)plt.plot([-2.5, 10], [12.5, -2.5], 'k-', lw=2)ax.set_xlim([-5,15])ax.set_ylim([-5,15])plt.show() 

Aşağıdaki şekilde, doğrusal olarak ayrılamayan bir veri kümesi çiziyoruz. Düz bir çizgi çizersek, noktaların çoğu doğru sınıfta sınıflandırılmayacaktır.

Bu sorunu çözmenin bir yolu, veri kümesini almak ve verileri başka bir özellik haritasına dönüştürmektir. Bu, verileri başka bir planda dönüştürmek için doğrusal olması gereken bir işlev kullanacağınız anlamına gelir.

x = np.array([1,1,2,3,3,6,6,6,9,9,10,11,12,13,16,18])y = np.array([18,13,9,6,15,11,6,3,5,2,10,5,6,1,3,1])label = np.array([1,1,1,1,0,0,0,1,0,1,0,0,0,1,0,1]) 
fig = plt.figure()plt.scatter(x, y, c=label, s=60)plt.show() 

Yukarıdaki şekilden elde edilen veriler, ayrılabilir olmayan bir 2B Gauss Kernel planındadır. Bu verileri üç boyutlu olarak dönüştürmeyi deneyebilirsiniz, yani 3 eksenli bir şekil oluşturuyorsunuz.

Gauss Kernel örneğimizde, verilerimizi 3B boyuta getirmek için bir polinom eşleme uygulayacağız. Verileri dönüştürme formülü aşağıdaki gibidir.

Yeni özellik haritalarını oluşturmak için Gaussian Kernel Python'da bir işlev tanımlarsınız

Yukarıdaki formülü kodlamak için numpy kullanabilirsiniz:

Formül Eşdeğer Uykulu Kod
x x [:, 0] **
y x [:, 1]
x 2 x [:, 0] ** 2
np.sqrt (2) *
xy x [:, 0] * x [:, 1]
y 2 x [:, 1] ** 2
### illustration purposedef mapping(x, y):x = np.c_[(x, y)]if len(x) > 2:x_1 = x[:,0]**2x_2 = np.sqrt(2)*x[:,0]*x[:,1]x_3 = x[:,1]**2else:x_1 = x[0]**2x_2 = np.sqrt(2)*x[0]*x[1]x_3 = x[1]**2trans_x = np.array([x_1, x_2, x_3])return trans_x

Yeni haritalama 3 boyutlu ve 16 noktalı olmalıdır

x_1 = mapping(x, y)x_1.shape 
(3, 16) 

Sırasıyla 3 eksen, x, y ve z ile yeni bir çizim yapalım.

# plotfig = plt.figure()ax = fig.add_subplot(111, projection='3d')ax.scatter(x_1[0], x_1[1], x_1[2], c=label, s=60)ax.view_init(30, 185)ax.set_xlabel('X Label')ax.set_ylabel('Y Label')ax.set_zlabel('Z Label')plt.show() 

Bir gelişme görüyoruz ancak arsanın yönünü değiştirirsek, veri setinin artık ayrılabilir olduğu açıktır.

# plotfig = plt.figure()ax = fig.add_subplot(111, projection='3d')ax.scatter(x_1[0], x_1[1], x_1[1], c=label, s=60)ax.view_init(0, -180)ax.set_ylim([150,-50])ax.set_zlim([-10000,10000])ax.set_xlabel('X Label')ax.set_ylabel('Y Label')ax.set_zlabel('Z Label')plt.show() 

Büyük bir veri kümesini işlemek için 2'den fazla boyut oluşturmanız gerekebilir, yukarıdaki yöntemi kullanarak büyük bir sorunla karşılaşacaksınız. Aslında, açıkça sürdürülebilir olmayan tüm veri noktalarını dönüştürmeniz gerekiyor. Yaşınızı alır ve bilgisayarınızın belleği yetersiz kalabilir.

Bu sorunun üstesinden gelmenin en yaygın yolu bir çekirdek kullanmaktır .

Makine öğreniminde Çekirdek nedir?

Buradaki fikir, yukarıdaki şekilde gösterildiği gibi verileri neredeyse doğrusal olarak ayrılabilir hale getirmek için daha yüksek boyutlu bir özellik alanı kullanmaktır.

Veri noktalarını ayrılabilir hale getirmek için çok sayıda yüksek boyutlu boşluk vardır. Örneğin, polinom haritalamanın harika bir başlangıç ​​olduğunu gösterdik.

Ayrıca birçok veriyle bu dönüşümün verimli olmadığını da gösterdik. Bunun yerine, yeni bir özellik planına geçmeden verileri değiştirmek için Makine Öğreniminde bir Çekirdek işlevi kullanabilirsiniz.

Çekirdeğin büyüsü, yüksek boyutlu hesaplamanın ima ettiği tüm sıkıntıları ortadan kaldıran bir işlev bulmaktır. Bir çekirdeğin sonucu bir skalerdir veya başka bir deyişle tek boyutlu uzaya geri döndük

Bu işlevi bulduktan sonra, onu standart doğrusal sınıflandırıcıya bağlayabilirsiniz.

Çekirdek Makine Öğrenimi kavramını anlamak için bir örnek görelim. İki vektörünüz var, x1 ve x2. Amaç, bir polinom eşleme kullanarak daha yüksek bir boyut yaratmaktır. Çıktı, yeni özellik haritasının iç çarpımına eşittir. Yukarıdaki yöntemden yapmanız gerekenler:

  1. X1 ve x2'yi yeni bir boyuta dönüştürün
  2. Nokta ürünü hesaplayın: tüm çekirdekler için ortak
  3. X1 ve x2'yi yeni bir boyuta dönüştürün

Daha yüksek boyutu hesaplamak için yukarıda oluşturulan işlevi kullanabilirsiniz.

## Kernelx1 = np.array([3,6])x2 = np.array([10,10])x_1 = mapping(x1, x2)print(x_1) 

Çıktı

[[ 9. 100. ][ 25.45584412 141.42135624][ 36. 100. ]] 

İç çarpımı hesaplayın

X_1'de depolanan birinci ve ikinci vektör arasındaki nokta çarpımını hesaplamak için numpy'deki nesne noktasını kullanabilirsiniz.

print(np.dot(x_1[:,0], x_1[:,1]))8100.0 

Çıktı 8100'dür. Problemi görüyorsunuz, nokta ürünü hesaplamak için bellekte yeni bir özellik haritası kaydetmeniz gerekiyor. Milyonlarca kayıt içeren bir veri kümeniz varsa, hesaplama açısından etkisizdir.

Bunun yerine, vektörü dönüştürmeden nokta çarpımı hesaplamak için polinom çekirdeğini kullanabilirsiniz . Bu fonksiyon, x1 ve x2'nin iç çarpımını, bu iki vektör daha yüksek boyuta dönüştürülmüş gibi hesaplar. Başka bir deyişle, bir çekirdek işlevi, başka bir özellik uzayından iç çarpımın sonuçlarını hesaplar.

Polinom çekirdek fonksiyonunu Python'da aşağıdaki gibi yazabilirsiniz.

def polynomial_kernel(x, y, p=2):return (np.dot(x, y)) ** p 

İki vektörün iç çarpımının gücüdür. Aşağıda, polinom çekirdeğinin ikinci derecesini döndürüyorsunuz. Çıktı diğer yönteme eşittir. Bu, çekirdeğin büyüsüdür.

polynomial_kernel(x1, x2, p=2)8100 

Çekirdek Yöntem Türleri

Çok sayıda farklı Kernel tekniği mevcuttur. En basit olanı doğrusal çekirdektir. Bu işlev, metin sınıflandırması için oldukça iyi çalışır. Diğer çekirdek:

  • Polinom çekirdek
  • Gauss Çekirdeği

TensorFlow örneğinde, Random Fourier kullanacağız. TensorFlow, yeni özellik alanını hesaplamak için yerleşik bir tahminciye sahiptir. Gauss filtresi işlevi, Gauss çekirdek işlevinin yaklaşık bir değeridir.

Gauss filtreleme işlevi, çok daha yüksek boyutlu bir uzaydaki veri noktaları arasındaki benzerliği hesaplar.

TensorFlow ile Gauss Kernel sınıflandırıcısını eğitin

Algoritmanın amacı, 50 binden az veya çok kazanan hanehalkını sınıflandırmaktır.

Bir kıyaslama modeline sahip olmak için bir lojistik Çekirdek Regresyon Makine Öğrenimini değerlendireceksiniz. Bundan sonra, daha iyi sonuçlar alıp alamayacağınızı görmek için bir Kernel sınıflandırıcısı eğiteceksiniz.

Yetişkin veri kümesindeki aşağıdaki değişkenleri kullanırsınız:

  • yaş
  • çalışma sınıfı
  • fnlwgt
  • Eğitim
  • eğitim_sayısı
  • evlilik
  • Meslek
  • ilişki
  • yarış
  • seks
  • Sermaye kazancı
  • sermaye_ kaybı
  • hours_week
  • ana vatan
  • etiket

Modeli eğitmeden ve değerlendirmeden önce aşağıdaki gibi ilerleyeceksiniz:

  • Adım 1) Kitaplıkları içe aktarın
  • Adım 2) Verileri içe aktarın
  • Adım 3) Verileri hazırlayın
  • Adım 4) input_fn'yi oluşturun
  • Adım 5) Lojistik modeli oluşturun: Temel model
  • Adım 6) Modeli değerlendirin
  • Adım 7) Kernel sınıflandırıcısını oluşturun
  • Adım 8) Kernel sınıflandırıcısını değerlendirin

Adım 1) Kitaplıkları içe aktarın

Kernel modellerini Yapay Zekada içe aktarmak ve eğitmek için tensorflow, pandalar ve numpy'yi içe aktarmanız gerekir.

#import numpy as npfrom sklearn.model_selectionimport train_test_splitimport tensorflow as tfimport pandas as pdimport numpy as np

Adım 2) Verileri içe aktarın

Verileri aşağıdaki web sitesinden indirirsiniz ve bir panda veri çerçevesi olarak içe aktarırsınız.

## 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"## Importdf_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 ve test kümesi tanımlandığına göre, sütun etiketini dizeden tam sayıya değiştirebilirsiniz. tensorflow, etiket için dize değerini kabul etmez.

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]df_train.shape(32561, 15)

Adım 3) Verileri hazırlayın

Veri kümesi hem sürekli hem de kategorik özellikler içerir. Sürekli değişkenlerin değerlerini standartlaştırmak iyi bir uygulamadır. Sci-kit learn'den StandardScaler işlevini kullanabilirsiniz. Tren ve test setini dönüştürmeyi kolaylaştırmak için kullanıcı tanımlı bir işlev de oluşturursunuz. Sürekli ve kategorik değişkenleri ortak bir veri kümesiyle birleştirdiğinizi ve dizinin şu türde olması gerektiğini unutmayın: float32

COLUMNS_INT = ['age','fnlwgt','education_num','capital_gain', 'capital_loss', 'hours_week']CATE_FEATURES = ['workclass', 'education', 'marital', 'occupation', 'relationship', 'race', 'sex', 'native_country']from sklearn.preprocessing import StandardScalerfrom sklearn import preprocessingdef prep_data_str(df):scaler = StandardScaler()le = preprocessing.LabelEncoder()df_toscale = df[COLUMNS_INT]df_scaled = scaler.fit_transform(df_toscale.astype(np.float64))X_1 = df[CATE_FEATURES].apply(le.fit_transform)y = df['label'].astype(np.int32)X_conc = np.c_[df_scaled, X_1].astype(np.float32)return X_conc, y 

Transformatör işlevi hazırdır, veri kümesini dönüştürebilir ve input_fn işlevini oluşturabilirsiniz.

X_train, y_train = prep_data_str(df_train)X_test, y_test = prep_data_str(df_test)print(X_train.shape)(32561, 14) 

Bir sonraki adımda, lojistik regresyon eğitimi alacaksınız. Size temel bir doğruluk verecektir. Amaç, temeli farklı bir algoritma, yani bir Kernel sınıflandırıcısı ile yenmektir.

Adım 4) Lojistik modeli oluşturun: Temel model

Özellik sütununu real_valued_column nesnesiyle oluşturursunuz. Tüm değişkenlerin yoğun sayısal veriler olmasını sağlayacaktır.

feat_column = tf.contrib.layers.real_valued_column('features', dimension=14) 

Tahminci, TensorFlow Estimator kullanılarak tanımlanır, siz özellik sütunlarını ve grafiğin nereye kaydedileceğini belirtirsiniz.

estimator = tf.estimator.LinearClassifier(feature_columns=[feat_column],n_classes=2,model_dir = "kernel_log")
INFO:tensorflow:Using default config.INFO:tensorflow:Using config: {'_model_dir': 'kernel_log', '_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} 

Logisitc regresyonunu, 200 boyutundaki mini gruplar kullanarak eğiteceksiniz.

# Train the modeltrain_input_fn = tf.estimator.inputs.numpy_input_fn(x={"features": X_train},y=y_train,batch_size=200,num_epochs=None,shuffle=True) 

Modeli 1.000 iterasyon ile eğitebilirsiniz

estimator.train(input_fn=train_input_fn, 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 kernel_log/model.ckpt.INFO:tensorflow:loss = 138.62949, step = 1INFO:tensorflow:global_step/sec: 324.16INFO:tensorflow:loss = 87.16762, step = 101 (0.310 sec)INFO:tensorflow:global_step/sec: 267.092INFO:tensorflow:loss = 71.53657, step = 201 (0.376 sec)INFO:tensorflow:global_step/sec: 292.679INFO:tensorflow:loss = 69.56703, step = 301 (0.340 sec)INFO:tensorflow:global_step/sec: 225.582INFO:tensorflow:loss = 74.615875, step = 401 (0.445 sec)INFO:tensorflow:global_step/sec: 209.975INFO:tensorflow:loss = 76.49044, step = 501 (0.475 sec)INFO:tensorflow:global_step/sec: 241.648INFO:tensorflow:loss = 66.38373, step = 601 (0.419 sec)INFO:tensorflow:global_step/sec: 305.193INFO:tensorflow:loss = 87.93341, step = 701 (0.327 sec)INFO:tensorflow:global_step/sec: 396.295INFO:tensorflow:loss = 76.61518, step = 801 (0.249 sec)INFO:tensorflow:global_step/sec: 359.857INFO:tensorflow:loss = 78.54885, step = 901 (0.277 sec)INFO:tensorflow:Saving checkpoints for 1000 into kernel_log/model.ckpt.INFO:tensorflow:Loss for final step: 67.79706.

Adım 6) Modeli değerlendirin

Modeli değerlendirmek için numpy tahmincisini tanımlarsınız. Veri kümesinin tamamını değerlendirme için kullanırsınız

# Evaluationtest_input_fn = tf.estimator.inputs.numpy_input_fn(x={"features": X_test},y=y_test,batch_size=16281,num_epochs=1,shuffle=False)estimator.evaluate(input_fn=test_input_fn, steps=1)
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-07-12-15:58:22INFO:tensorflow:Graph was finalized.INFO:tensorflow:Restoring parameters from kernel_log/model.ckpt-1000INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.INFO:tensorflow:Evaluation [1/1]INFO:tensorflow:Finished evaluation at 2018-07-12-15:58:23INFO:tensorflow:Saving dict for global step 1000: accuracy = 0.82353663, accuracy_baseline = 0.76377374, auc = 0.84898686, auc_precision_recall = 0.67214864, average_loss = 0.3877216, global_step = 1000, label/mean = 0.23622628, loss = 6312.495, precision = 0.7362797, prediction/mean = 0.21208474, recall = 0.39417577
{'accuracy': 0.82353663,'accuracy_baseline': 0.76377374,'auc': 0.84898686,'auc_precision_recall': 0.67214864,'average_loss': 0.3877216,'global_step': 1000,'label/mean': 0.23622628,'loss': 6312.495,'precision': 0.7362797,'prediction/mean': 0.21208474,'recall': 0.39417577}

Yüzde 82'lik bir doğruluğa sahipsiniz. Bir sonraki bölümde, lojistik sınıflandırıcıyı bir Kernel sınıflandırıcısı ile yenmeye çalışacaksınız.

Adım 7) Kernel sınıflandırıcısını oluşturun

Çekirdek tahmincisi, geleneksel doğrusal sınıflandırıcıdan, en azından yapım açısından çok farklı değildir. Arkasındaki fikir, doğrusal sınıflandırıcı ile açık çekirdeğin gücünü kullanmaktır.

Çekirdek Sınıflandırıcıyı eğitmek için TensorFlow'da bulunan önceden tanımlanmış iki tahminciye ihtiyacınız var:

  • RandomFourierFeatureMapper
  • KernelLinearClassifier

İlk bölümde, bir çekirdek işlevi kullanarak düşük boyutu yüksek bir boyuta dönüştürmeniz gerektiğini öğrendiniz. Daha doğrusu, Gauss fonksiyonunun bir yaklaşımı olan Rastgele Fourier'i kullanacaksınız. Neyse ki, Tensorflow'un kütüphanesinde şu işlev var: RandomFourierFeatureMapper. Model, KernelLinearClassifier tahmincisi kullanılarak eğitilebilir.

Modeli oluşturmak için şu adımları takip edeceksiniz:

  1. Yüksek boyutlu Çekirdek işlevini ayarlayın
  2. L2 hiperparametresini ayarlayın
  3. Modeli oluşturun
  4. Modeli eğitin
  5. Modeli değerlendirin

Adım A) Yüksek boyutlu Kernel işlevini ayarlayın

Mevcut veri seti, 5.000 boyutlu vektörün yeni bir yüksek boyutuna dönüştürebileceğiniz 14 özellik içerir. Dönüşümü gerçekleştirmek için rastgele Fourier özelliklerini kullanırsınız. Gauss Kernel formülünü hatırlarsanız, tanımlanacak standart sapma parametresi olduğunu unutmayın. Bu parametre, sınıflandırma sırasında kullanılan benzerlik ölçüsünü kontrol eder.

RandomFourierFeatureMapper'daki tüm parametreleri şununla ayarlayabilirsiniz:

  • input_dim = 14
  • output_dim = 5000
  • stddev = 4
### Prep Kernelkernel_mapper = tf.contrib.kernel_methods.RandomFourierFeatureMapper(input_dim=14, output_dim=5000, stddev=4, name='rffm') 

Çekirdek eşleyicisini, daha önce oluşturulmuş özellik sütunlarını kullanarak oluşturmanız gerekir: feat_column

### Map Kernelkernel_mappers = {feat_column: [kernel_mapper]} 

Adım B) L2 hiperparametresini ayarlayın

Fazla takmayı önlemek için, kayıp işlevini L2 düzenleyici ile cezalandırırsınız. L2 hiper parametresini 0,1'e ve öğrenme oranını 5'e ayarladınız

optimizer = tf.train.FtrlOptimizer(learning_rate=5, l2_regularization_strength=0.1) 

Adım C) Modeli oluşturun

Bir sonraki adım, doğrusal sınıflandırmaya benzer. Yerleşik tahminci KernelLinearClassifier'ı kullanırsınız. Önceden tanımlanan çekirdek eşleyicisini eklediğinizi ve model dizinini değiştirdiğinizi unutmayın.

### Prep estimatorestimator_kernel = tf.contrib.kernel_methods.KernelLinearClassifier(n_classes=2,optimizer=optimizer,kernel_mappers=kernel_mappers,model_dir="kernel_train")
WARNING:tensorflow:From /Users/Thomas/anaconda3/envs/hello-tf/lib/python3.6/site-packages/tensorflow/contrib/kernel_methods/python/kernel_estimators.py:305: multi_class_head (from tensorflow.contrib.learn.python.learn.estimators.head) is deprecated and will be removed in a future version.Instructions for updating:Please switch to tf.contrib.estimator.*_head.WARNING:tensorflow:From /Users/Thomas/anaconda3/envs/hello-tf/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py:1179: BaseEstimator.__init__ (from tensorflow.contrib.learn.python.learn.estimators.estimator) is deprecated and will be removed in a future version.Instructions for updating:Please replace uses of any Estimator from tf.contrib.learn with an Estimator from tf.estimator.*WARNING:tensorflow:From /Users/Thomas/anaconda3/envs/hello-tf/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py:427: RunConfig.__init__ (from tensorflow.contrib.learn.python.learn.estimators.run_config) is deprecated and will be removed in a future version.Instructions for updating:When switching to tf.estimator.Estimator, use tf.estimator.RunConfig instead.INFO:tensorflow:Using default config.INFO:tensorflow:Using config: {'_task_type': None, '_task_id': 0, '_cluster_spec': , '_master': '', '_num_ps_replicas': 0, '_num_worker_replicas': 0, '_environment': 'local', '_is_chief': True, '_evaluation_master': '', '_train_distribute': None, '_tf_config': gpu_options {per_process_gpu_memory_fraction: 1.0}, '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_secs': 600, '_log_step_count_steps': 100, '_session_config': None, '_save_checkpoints_steps': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_model_dir': 'kernel_train'}

Adım D) Modeli eğitin

Artık Kernel sınıflandırıcı oluşturulduğuna göre, onu eğitmeye hazırsınız. Modelin 2000 katını yinelemeyi seçersiniz

### estimateestimator_kernel.fit(input_fn=train_input_fn, steps=2000)
WARNING:tensorflow:Casting 
 labels to bool.WARNING:tensorflow:Casting 
 labels to bool.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.WARNING:tensorflow:From /Users/Thomas/anaconda3/envs/hello-tf/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/estimators/head.py:678: ModelFnOps.__new__ (from tensorflow.contrib.learn.python.learn.estimators.model_fn) is deprecated and will be removed in a future version.Instructions for updating:When switching to tf.estimator.Estimator, use tf.estimator.EstimatorSpec. You can use the `estimator_spec` method to create an equivalent one.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 kernel_train/model.ckpt.INFO:tensorflow:loss = 0.6931474, step = 1INFO:tensorflow:global_step/sec: 86.6365INFO:tensorflow:loss = 0.39374447, step = 101 (1.155 sec)INFO:tensorflow:global_step/sec: 80.1986INFO:tensorflow:loss = 0.3797774, step = 201 (1.247 sec)INFO:tensorflow:global_step/sec: 79.6376INFO:tensorflow:loss = 0.3908726, step = 301 (1.256 sec)INFO:tensorflow:global_step/sec: 95.8442INFO:tensorflow:loss = 0.41890752, step = 401 (1.043 sec)INFO:tensorflow:global_step/sec: 93.7799INFO:tensorflow:loss = 0.35700393, step = 501 (1.066 sec)INFO:tensorflow:global_step/sec: 94.7071INFO:tensorflow:loss = 0.35535482, step = 601 (1.056 sec)INFO:tensorflow:global_step/sec: 90.7402INFO:tensorflow:loss = 0.3692882, step = 701 (1.102 sec)INFO:tensorflow:global_step/sec: 94.4924INFO:tensorflow:loss = 0.34746957, step = 801 (1.058 sec)INFO:tensorflow:global_step/sec: 95.3472INFO:tensorflow:loss = 0.33655524, step = 901 (1.049 sec)INFO:tensorflow:global_step/sec: 97.2928INFO:tensorflow:loss = 0.35966292, step = 1001 (1.028 sec)INFO:tensorflow:global_step/sec: 85.6761INFO:tensorflow:loss = 0.31254214, step = 1101 (1.167 sec)INFO:tensorflow:global_step/sec: 91.4194INFO:tensorflow:loss = 0.33247527, step = 1201 (1.094 sec)INFO:tensorflow:global_step/sec: 82.5954INFO:tensorflow:loss = 0.29305756, step = 1301 (1.211 sec)INFO:tensorflow:global_step/sec: 89.8748INFO:tensorflow:loss = 0.37943482, step = 1401 (1.113 sec)INFO:tensorflow:global_step/sec: 76.9761INFO:tensorflow:loss = 0.34204718, step = 1501 (1.300 sec)INFO:tensorflow:global_step/sec: 73.7192INFO:tensorflow:loss = 0.34614792, step = 1601 (1.356 sec)INFO:tensorflow:global_step/sec: 83.0573INFO:tensorflow:loss = 0.38911164, step = 1701 (1.204 sec)INFO:tensorflow:global_step/sec: 71.7029INFO:tensorflow:loss = 0.35255936, step = 1801 (1.394 sec)INFO:tensorflow:global_step/sec: 73.2663INFO:tensorflow:loss = 0.31130585, step = 1901 (1.365 sec)INFO:tensorflow:Saving checkpoints for 2000 into kernel_train/model.ckpt.INFO:tensorflow:Loss for final step: 0.37795097.KernelLinearClassifier(params={'head': , 'feature_columns': {_RealValuedColumn(column_name='features_MAPPED', dimension=5000, default_value=None, dtype=tf.float32, normalizer=None)}, 'optimizer': , 'kernel_mappers': {_RealValuedColumn(column_name='features', dimension=14, default_value=None, dtype=tf.float32, normalizer=None): []}}) 

Adım E) Modeli değerlendirin

Son olarak, modelinizin performansını değerlendirirsiniz. Lojistik regresyonu yenebilmelisiniz.

# Evaluate and report metrics.eval_metrics = estimator_kernel.evaluate(input_fn=test_input_fn, steps=1)
WARNING:tensorflow:Casting 
 labels to bool.WARNING:tensorflow:Casting 
 labels to bool.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:Starting evaluation at 2018-07-12-15:58:50INFO:tensorflow:Graph was finalized.INFO:tensorflow:Restoring parameters from kernel_train/model.ckpt-2000INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.INFO:tensorflow:Evaluation [1/1]INFO:tensorflow:Finished evaluation at 2018-07-12-15:58:51INFO:tensorflow:Saving dict for global step 2000: accuracy = 0.83975184, accuracy/baseline_label_mean = 0.23622628, accuracy/threshold_0.500000_mean = 0.83975184, auc = 0.8904007, auc_precision_recall = 0.72722375, global_step = 2000, labels/actual_label_mean = 0.23622628, labels/prediction_mean = 0.23786618, loss = 0.34277728, precision/positive_threshold_0.500000_mean = 0.73001117, recall/positive_threshold_0.500000_mean = 0.5104004

Nihai doğruluk% 84'tür, lojistik regresyona kıyasla% 2'lik bir gelişmedir. Doğruluk iyileştirme ve hesaplama maliyeti arasında bir denge vardır. Farklı sınıflandırıcılar tarafından harcanan zamana değip değmeyeceğini ve işiniz üzerinde ikna edici bir etkisinin olup olmadığını düşünmeniz gerekir.

Özet

Çekirdek, doğrusal olmayan verileri (neredeyse) doğrusal hale getirmek için harika bir araçtır. Bu yöntemin eksikliği, hesaplama açısından zaman alıcı ve maliyetli olmasıdır.

Aşağıda, bir çekirdek sınıflayıcıyı eğitmek için en önemli kodu bulabilirsiniz.

Yüksek boyutlu Çekirdek işlevini ayarlayın

  • input_dim = 14
  • output_dim = 5000
  • stddev = 4
### Prep Kernelkernel_mapper = tf.contrib.kernel_methods.RandomFourierFeatureMapper(input_dim=14, output_dim=5000, stddev=4, name='rffm') 

L2 hiperparametresini ayarlayın

optimizer = tf.train.FtrlOptimizer(learning_rate=5, l2_regularization_strength=0.1) 

Modeli oluşturun

estimator_kernel = tf.contrib.kernel_methods.KernelLinearClassifier( n_classes=2,optimizer=optimizer,kernel_mappers=kernel_mappers,model_dir="kernel_train") 

Modeli eğitin

estimator_kernel.fit(input_fn=train_input_fn, steps=2000) 

Modeli değerlendirin

eval_metrics = estimator_kernel.evaluate(input_fn=test_input_fn, steps=1)