Gausa kodols mašīnmācībā: kodola metožu piemēri

Šīs apmācības mērķis ir padarīt datu kopu lineāri atdalāmu. Apmācība ir sadalīta divās daļās:

  1. Funkciju pārveidošana
  2. Apmāciet kodola klasifikatoru, izmantojot Tensorflow

Pirmajā daļā jūs sapratīsit kodola metodes ideju mašīnmācībā, bet otrajā daļā redzēsit, kā apmācīt kodola klasifikatoru ar Tensorflow. Jūs izmantosit pieaugušo datu kopu. Šīs datu kopas mērķis ir klasificēt ieņēmumus zem un virs 50 tūkstošiem, zinot katras mājsaimniecības uzvedību.

Šajā apmācībā jūs uzzināsit-

Kāpēc jums ir nepieciešamas kodola metodes?

Katra klasifikatora mērķis ir pareizi paredzēt klases. Šim nolūkam datu kopai jābūt atdalāmai. Paskaties uz sižetu zemāk; ir diezgan vienkārši redzēt, ka visi punkti virs melnās līnijas pieder pirmajai klasei, bet pārējie - otrajai klasei. Tomēr ārkārtīgi reti ir pieejama tik vienkārša datu kopa. Vairumā gadījumu dati nav atdalāmi. Kodola metodes mašīnmācībā piešķir naiviem klasifikatoriem, piemēram, loģistiskai regresijai, grūtības. | _+_ | | _+_ |

Zemāk redzamajā attēlā mēs uzzīmējam datu kopu, kas nav lineāri atdalāma. Ja mēs zīmēsim taisnu līniju, lielākā daļa punktu netiks klasificēti pareizajā klasē.

Viens veids, kā risināt šo problēmu, ir ņemt datu kopu un pārveidot datus citā objektu kartē. Tas nozīmē, ka jūs izmantosit funkciju, lai pārveidotu datus citā plānā, kuram vajadzētu būt linearējamam. | _+_ | | _+_ |

Dati no iepriekš redzamā attēla ir 2D Gausa kodola plānā, kas nav atdalāms. Jūs varat mēģināt pārveidot šos datus trīsdimensiju, tas nozīmē, ka jūs izveidojat skaitli ar 3 asīm.

Gausa kodola piemērā mēs izmantosim polinomu kartēšanu, lai mūsu dati nonāktu 3D dimensijā. Datu pārveidošanas formula ir šāda.

Jūs definējat funkciju Gausa kodola Python, lai izveidotu jaunas objektu kartes

Jūs varat izmantot numpy, lai kodētu iepriekš minēto formulu:

FormulaLīdzvērtīgs kodīgs kods
xx [:, 0] **
unx [:, 1]
x2x [:, 0] ** 2
np.sqrt (2)*
xyx [:, 0]*x [:, 1]
un2x [:, 1] ** 2
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D 

Jaunajai kartēšanai vajadzētu būt ar 3 dimensijām ar 16 punktiem | _+_ | | _+_ |

Izveidosim jaunu diagrammu ar attiecīgi 3 asīm, x, y un z. | _+_ |

Mēs redzam uzlabojumu, bet, ja mainām diagrammas orientāciju, ir skaidrs, ka datu kopa tagad ir atdalāma | _+_ |

Lai manipulētu ar lielu datu kopu un jums, iespējams, būs jāizveido vairāk nekā 2 kategorijas, jūs saskarsities ar lielu problēmu, izmantojot iepriekš minēto metodi. Patiesībā jums ir jāpārveido visi datu punkti, kas acīmredzami nav ilgtspējīgi. Tas prasīs daudz laika, un datoram var beigties atmiņa.

Visizplatītākais veids, kā atrisināt šo problēmu, ir izmantot kodols .

Kas ir kodols mašīnmācībā?

Ideja ir izmantot augstākas dimensijas funkciju telpu, lai padarītu datus gandrīz lineāri atdalāmus, kā parādīts attēlā iepriekš.

Ir daudz augstāku dimensiju telpu, lai padarītu datu punktus atdalāmus. Piemēram, mēs esam parādījuši, ka polinomu kartēšana ir lielisks sākums.

Mēs arī esam pierādījuši, ka ar daudziem datiem šī pārveidošana nav efektīva. Tā vietā mašīnmācībā varat izmantot kodola funkciju, lai modificētu datus, nemainoties uz jaunu funkciju plānu.

Kodola burvība ir atrast funkciju, kas novērš visas problēmas, ko rada augstdimensiju aprēķins. Kodola rezultāts ir skalārs vai, citādi sakot, mēs esam atgriezušies viendimensijas telpā

Kad esat atradis šo funkciju, varat to pievienot standarta lineārajam klasifikatoram.

Apskatīsim piemēru, lai saprastu kodola mašīnmācīšanās jēdzienu. Jums ir divi vektori x1 un x2. Mērķis ir izveidot augstāku dimensiju, izmantojot polinomu kartēšanu. Rezultāts ir vienāds ar jauno objektu kartes punktu reizinājumu. No iepriekš minētās metodes jums ir nepieciešams:

  1. Pārveidojiet x1 un x2 jaunā dimensijā
  2. Aprēķiniet punktu produktu: kopīgs visiem kodoliem
  3. Pārveidojiet x1 un x2 jaunā dimensijā

Lai aprēķinātu augstāko dimensiju, varat izmantot iepriekš izveidoto funkciju. | _+_ |

Izeja

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

Aprēķiniet punktu produktu

Varat izmantot objekta punktu no numpy, lai aprēķinātu punktu reizinājumu starp pirmo un otro vektoru, kas saglabāts x_1. | _+_ |

Izeja ir 8100. Redzot problēmu, jums ir jāsaglabā atmiņā jauna funkciju karte, lai aprēķinātu punktu produktu. Ja jums ir datu kopa ar miljoniem ierakstu, tā ir skaitļošanas ziņā neefektīva.

Tā vietā varat izmantot polinomu kodols lai aprēķinātu punktu reizinājumu, nepārveidojot vektoru. Šī funkcija aprēķina x1 un x2 punktu reizinājumu tā, it kā šie divi vektori būtu pārveidoti augstākajā dimensijā. Citiem vārdiem sakot, kodola funkcija aprēķina punktu produkta rezultātus no citas funkciju telpas.

Jūs varat uzrakstīt polinomu kodola funkciju programmā Python šādi. | _+_ |

Tā ir divu vektoru punktu reizinājuma jauda. Zemāk jūs atgriežat polinomu kodola otro pakāpi. Rezultāts ir vienāds ar citu metodi. Tā ir kodola maģija. | _+_ |

Kodola metožu veidi

Ir pieejamas daudzas dažādas kodola tehnikas. Vienkāršākais ir lineārais kodols. Šī funkcija diezgan labi darbojas teksta klasifikācijā. Otrs kodols ir:

  • Polinomu kodols
  • Gausa kodols

TensorFlow piemērā mēs izmantosim izlases Furjē. TensorFlow ir iebūvēts novērtētājs, lai aprēķinātu jauno funkciju telpu. Gausa filtra funkcija ir tuvināta Gausa kodola funkcijai.

Gausa filtrēšanas funkcija aprēķina datu punktu līdzību daudz augstākas dimensijas telpā.

Trenējiet Gausa kodola klasifikatoru ar TensorFlow

Algoritma mērķis ir klasificēt mājsaimniecību, kas nopelna vairāk vai mazāk par 50 tūkstošiem.

Jūs novērtēsit loģistikas kodola regresijas mašīnmācīšanos, lai iegūtu etalonmodeli. Pēc tam jūs apmācīsit kodola klasifikatoru, lai redzētu, vai varat iegūt labākus rezultātus.

Jūs izmantojat šādus pieaugušo datu kopas mainīgos:

  • vecums
  • darba klase
  • fnlwgt
  • izglītība
  • education_num
  • laulības
  • nodarbošanās
  • attiecības
  • skrējiens
  • sekss
  • kapitāla pieaugums
  • kapitāla_zaudējums
  • hours_week
  • dzimtā valsts
  • etiķete

Pirms apmācāt un novērtējat modeli, rīkojaties šādi:

  • 1. solis) Importējiet bibliotēkas
  • 2. darbība. Importējiet datus
  • 3. solis) Sagatavojiet datus
  • 4. solis) Izveidojiet input_fn
  • 5. solis) Izveidojiet loģistikas modeli: bāzes modelis
  • 6. solis) Novērtējiet modeli
  • 7. solis) Izveidojiet kodola klasifikatoru
  • 8. solis) Novērtējiet kodola klasifikatoru

1. darbība) Importējiet bibliotēkas

Lai importētu un apmācītu kodola modeļus mākslīgajā intelektā, jums jāimportē tensorflow, pandas un numpy | _+_ |

2. darbība) Importējiet datus

Jūs lejupielādējat datus no tālāk norādītā mājas lapā un jūs importējat to kā pandas datu rāmi. | _+_ |

Tagad, kad vilciens un testa kopa ir definēti, varat mainīt kolonnas etiķeti no virknes uz veselu skaitli. tensorflow etiķetei nepieņem virknes vērtību. | _+_ |

3. darbība) Sagatavojiet datus

Datu kopā ir gan nepārtrauktas, gan kategoriskas iezīmes. Laba prakse ir standartizēt nepārtraukto mainīgo vērtības. Jūs varat izmantot funkciju StandardScaler no sci-kit learning. Jūs arī izveidojat lietotāja definētu funkciju, lai atvieglotu vilciena un testa komplekta pārveidošanu. Ņemiet vērā, ka nepārtrauktos un kategoriskos mainīgos jūs apvienojat kopējā datu kopā, un masīvam jābūt šāda veida: float32 | _+_ |

Transformatora funkcija ir gatava, jūs varat pārvērst datu kopu un izveidot funkciju input_fn. | _+_ |

Nākamajā solī jūs apmācīsit loģistisko regresiju. Tas sniegs jums sākotnējo precizitāti. Mērķis ir pārspēt bāzes līniju ar citu algoritmu, proti, ar kodola klasifikatoru.

4. darbība) Izveidojiet loģistikas modeli: bāzes modelis

Jūs veidojat objektu kolonnu ar objektu real_valued_column. Tas nodrošinās, ka visi mainīgie ir blīvi skaitliski dati. | _+_ |

Novērtētājs tiek definēts, izmantojot TensorFlow Estimator, jūs norādāt funkciju kolonnas un diagrammas saglabāšanas vietu. | _+_ | | _+_ |

Jūs apmācīsit logisitc regresiju, izmantojot 200 sērijas mini sērijas. | _+_ |

Jūs varat apmācīt modeli ar 1000 atkārtojumiem | _+_ | | _+_ |

6. darbība) Novērtējiet modeli

Jūs definējat aprēķinātāju, lai novērtētu modeli. Jūs izmantojat visu datu kopu novērtēšanai | _+_ | | _+_ | | _+_ |

Jūsu precizitāte ir 82 procenti. Nākamajā sadaļā jūs mēģināsit pārspēt loģistikas klasifikatoru ar kodola klasifikatoru

7. darbība) Izveidojiet kodola klasifikatoru

Kodola novērtētājs vismaz uzbūves ziņā neatšķiras no tradicionālā lineārā klasifikatora. Aiz idejas ir izmantot kodola jaudu ar lineāro klasifikatoru.

Lai apmācītu kodola klasifikatoru, jums ir nepieciešami divi iepriekš definēti TensorFlow aplēses:

  • RandomFourierFeatureMapper
  • KernelLinearClassifier

Pirmajā sadaļā jūs uzzinājāt, ka zemā dimensija ir jāpārveido par augstu dimensiju, izmantojot kodola funkciju. Precīzāk, jūs izmantosit izlases Furjē, kas ir Gausa funkcijas tuvinājums. Par laimi, Tensorflow bibliotēkā ir funkcija: RandomFourierFeatureMapper. Modeli var apmācīt, izmantojot aprēķinātāju KernelLinearClassifier.

Lai izveidotu modeli, jums jāveic šādas darbības:

  1. Iestatiet augstas dimensijas kodola funkciju
  2. Iestatiet hiperparametru L2
  3. Izveidojiet modeli
  4. Apmācīt modeli
  5. Novērtējiet modeli

Solis A) Iestatiet augstas dimensijas kodola funkciju

Pašreizējā datu kopā ir 14 funkcijas, kuras jūs pārveidosit jaunā 5000 dimensiju vektora augstā dimensijā. Lai panāktu transformāciju, jūs izmantojat nejaušās Furjē funkcijas. Ja atceraties Gausa kodola formulu, ņemiet vērā, ka ir jānosaka standarta novirzes parametrs. Šis parametrs kontrolē klasifikācijas laikā izmantoto līdzības mēru.

Jūs varat noregulēt visus RandomFourierFeatureMapper parametrus, izmantojot:

  • input_dim = 14
  • output_dim = 5000
  • stddev = 4
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]) 

Jums ir jāizveido kodola kartētājs, izmantojot funkciju kolonnas, kas izveidotas iepriekš: feat_column | _+_ |

B solis) Iestatiet hiperparametru L2

Lai novērstu pārmērīgu uzstādīšanu, jūs sodāt zaudējuma funkciju ar L2 regulētāju. Jūs iestatāt L2 hiperparametru uz 0,1 un mācīšanās ātrumu uz 5 | _+_ |

C solis) Izveidojiet modeli

Nākamais solis ir līdzīgs lineārajai klasifikācijai. Jūs izmantojat iebūvēto novērtētāju KernelLinearClassifier. Ņemiet vērā, ka pievienojat iepriekš definēto kodola kartētāju un maināt modeļa direktoriju. | _+_ | | _+_ |

D solis) Apmācīt modeli

Tagad, kad ir izveidots kodola klasifikators, jūs esat gatavs to apmācīt. Jūs izvēlaties atkārtot modeli 2000 reizes | _+_ | | _+_ |

E solis) Novērtējiet modeli

Visbeidzot, jūs novērtējat sava modeļa veiktspēju. Jums vajadzētu spēt pārspēt loģistikas regresiju. | _+_ | | _+_ |

Galīgā precizitāte ir 84%, tas ir 2% uzlabojums salīdzinājumā ar loģistisko regresiju. Pastāv kompromiss starp precizitātes uzlabošanu un skaitļošanas izmaksām. Jums ir jādomā, vai 2% uzlabojums ir tā laika vērts, ko patērē atšķirīgais klasifikators, un vai tam ir pārliecinoša ietekme uz jūsu biznesu.

Kopsavilkums

Kodols ir lielisks līdzeklis nelineāru datu pārveidošanai (gandrīz) lineārā. Šīs metodes trūkums ir skaitļošanas ziņā laikietilpīgs un dārgs.

Zemāk ir atrodams vissvarīgākais kodola klasificētāja apmācības kods

Iestatiet augstas dimensijas kodola funkciju

  • input_dim = 14
  • output_dim = 5000
  • stddev = 4
fig = plt.figure() plt.scatter(x, y, c=label, s=60) plt.show() 

Iestatiet hiperparametru L2 | _+_ |

Izveidojiet modeli | _+_ |

Apmācīt modeli | _+_ |

Novērtējiet modeli | _+_ |