Hva Er En Varm Koding Og Hvordan Du Gjør Det
hvis du er i maskinlæring, vil du uunngåelig komme over denne tingen kalt «En Varm Koding». Det er imidlertid en av de tingene som er vanskelig å forstå som nybegynner til maskinlæring, siden du trenger å vite noen ting om maskinlæring for å forstå det. For å hjelpe, jeg skjønte jeg ville forsøke å gi en nybegynner forklaring.
det første du gjør når du lager noen form for maskinlæringsprogram, er vanligvis forbehandling. Med det mener jeg å forberede data som skal analyseres av programmet ditt. Tross alt kan du ikke bare kaste et regneark eller noen bilder i programmet ditt og forvente at det skal vite hva du skal gjøre. Vi er ikke på DET NIVÅET AV AI ennå.
en stor del av forbehandlingen er noe koding. Dette betyr å representere hvert stykke data på en måte som datamaskinen kan forstå, derav navnet kode, som bokstavelig talt betyr «konverter til kode». Det er mange forskjellige måter å kode som Etikettkoding, eller Som du kanskje gjettet, En Varm Koding. Etikettkoding er intuitiv og lett å forstå, så jeg skal forklare det først. Forhåpentligvis derfra vil du være i stand til å fullt ut forstå en varm koding.
la oss anta at vi jobber med kategoriske data, som katter og hunder. Når du ser på navnet på etikettkoding, kan du kanskje gjette at det koder etiketter, hvor etikett bare er en kategori (dvs.katt eller hund), og kode betyr bare å gi dem et nummer for å representere den kategorien (1 for katt og 2 for hund). Ved å gi hver kategori et nummer, vet datamaskinen nå hvordan de skal representere dem, siden datamaskinen vet hvordan man skal jobbe med tall. Og nå er vi allerede ferdig med å forklare etikettkoding. Men det er et problem som gjør at det ofte ikke fungerer for kategoriske data.
problemet er at med etikettkoding har kategoriene nå naturlige bestilte relasjoner. Datamaskinen gjør dette fordi den er programmert til å behandle høyere tall som høyere tall; det vil naturlig gi høyere tall høyere vekter. Vi kan se problemet med dette i et eksempel:
- Tenk deg om du hadde 3 kategorier av matvarer: epler, kylling og brokkoli. Ved hjelp av etikettkoding vil du tildele hver av disse et tall for å kategorisere dem: epler = 1, kylling = 2 og brokkoli = 3. Men nå, hvis modellen internt må beregne gjennomsnittet på tvers av kategorier, kan det gjøre 1 + 3 = 4/2 = 2. Dette betyr at ifølge modellen er gjennomsnittet av epler og kylling sammen brokkoli.
Åpenbart at tankegangen av modellen din kommer til å føre til at det blir korrelasjoner helt feil, så vi må introdusere en-varm koding.
I Stedet for å merke ting som et tall som starter fra 1 og deretter øker for hver kategori, går vi for mer av en binær stil med kategorisering. Du har kanskje tenkt at hvis du visste hva en-hot er (det gjelder binær koding, men ikke bekymre deg for det). La meg gi en visualisert forskjell mellom etikett og en-varm koding. Se om du kan regne ut forskjellen:
hva er forskjellen? Vel, våre kategorier var tidligere rader, men nå er de kolonner. Vår numeriske variabel, kalorier, har imidlertid forblitt den samme. En 1 i en bestemt kolonne vil fortelle datamaskinen riktig kategori for radens data. Med andre ord har vi opprettet en ekstra binær kolonne for hver kategori.
det er ikke umiddelbart klart hvorfor dette er bedre (bortsett fra problemet jeg nevnte tidligere), og det er fordi det ikke er en klar grunn. Som mange ting i maskinlæring, vil vi ikke bruke dette i alle situasjoner; det er ikke helt bedre enn etikettkoding. Det løser bare et problem som du møter med etikettkoding når du arbeider med kategoriske data
En Varm Koding I Kode(Få det ? Det er et ordspill)
Det er alltid nyttig å se hvordan dette gjøres i kode, så la oss gjøre et eksempel. Normalt er jeg fast tro på at vi skal gjøre noe uten biblioteker for å lære det, men bare for denne kjedelige forbehandlingen, trenger vi egentlig ikke. Bibliotekene kan gjøre det så enkelt. Vi skal bruke numpy, sklearn og pandas, da du finner deg selv ved å bruke de 3 bibliotekene i mange av prosjektene dine
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
import numpy as np
import pandas as pd
Nå som vi har verktøyene, la oss komme i gang. Vi vil jobbe med et ferdig datasett. Skriv inn datasettet med pandas.read_csv-funksjonen:
dataset = pd.read_csv('made_up_thing.csv')
Forhåpentligvis er det selvforklarende. Neste opp er litt vanskeligere. Saken om regneark er at du kanskje eller kanskje ikke bryr seg om noen av kolonnene. For enkelhets skyld, la oss si at vi bryr oss om alt unntatt den siste kolonnen. Vi skal bruke pandas funksjon .iloc, som får dataene i hvilken kolonne (r) du forteller det til:
X = dataset.iloc.values
.iloc tar faktisk inn, så vi inputted . Den: er fordi vi vil ha alle radene i disse kolonnene , og: er akkurat slik du gjør det. Vi legger til .verdier til, vel, få verdiene på hvilke segmenter vi har valgt. Med andre ord velger den første delen verdiene, den andre delen får verdiene.
la Oss nå gjøre den faktiske kodingen. Sklearn gjor det utrolig enkelt, men det er en fangst. Du har kanskje lagt merke til at vi importerte både labelencoder og one hot encoder. Sklearns one hot encoder vet faktisk ikke hvordan man konverterer kategorier til tall, det vet bare hvordan man konverterer tall til binær. Vi må bruke labelencoder først.
Først setter vi opp en labelencoder akkurat som du ville ha et normalt objekt:
le = LabelEncoder()
Deretter må vi bruke sklearn .fit_transform funksjon. La oss si at vi må kode bare den første kolonnen. Vi ville gjøre:
X = le.fit_transform(X)
denne funksjonen er bare en kombinasjon av den .passer og .transform kommandoer. .fit tar X (i dette tilfellet den første kolonnen Av X på Grunn Av Vår X) og konverterer alt til numeriske data. .transform gjelder da denne konverteringen.
Alt som er igjen er å bruke den ene varme koderen. Heldigvis er det nesten det samme som det vi nettopp gjorde:
ohe = OneHotEncoder(categorical_features = )
X = ohe.fit_transform(X).toarray()
Categorical_feartures er en parameter som angir hvilken kolonne vi vil ha en varm kode, og siden vi vil kode den første kolonnen, legger vi . Til slutt, vi fit_transform i binær, og slå den inn i en matrise slik at vi kan jobbe med det lett fremover.
Og det er det! Det er ganske enkelt. Et siste notat skjønt, hvis du trenger å gjøre mer enn bare den første kolonnen, gjør du det vi nettopp gjorde, men i stedet for 0 legger du hvilken kolonne du vil ha. For mange kolonner, kan du sette den i en for loop:
le = LabelEncoder()#for 10 columns
for i in range(10):
X = le.fit_transform(X)
Lykke til på deg maskinlæring eventyr!