Flytte Gjennomsnittet Nan Matlab
Denne opplæringen diskuterer hvordan du bruker MATLAB til bildebehandling. Noen kjennskap til MATLAB antas (du bør vite hvordan du bruker matriser og skrive en M-fil). Det er nyttig å ha MATLAB Image Processing Toolbox, men heldigvis behøver ingen verktøykasser for de fleste operasjoner. Kommandoer som krever Image Toolbox er angitt med Image Toolbox. Bilderepresentasjon Det finnes fem typer bilder i MATLAB. Gråtoner. Et gråtonebilde M piksler høy og N piksler bredt er representert som en matrise av dobbel datatype av størrelse M N. Elementverdier (for eksempel MyImage (m, n)) angir pixelgråskalaintensiteter i 0,1 med 0 svart og 1 hvitt. Truecolor RGB. Et truecolor rød-grønt-blå (RGB) bilde er representert som en tredimensjonal M N 3 dobbeltmatrise. Hver piksel har røde, grønne, blå komponenter langs den tredje dimensjonen med verdier i 0,1, for eksempel er fargekomponentene i piksel (m, n) MyImage (m, n, 1) rød, MyImage (m, n, 2) grønn, MyImage (m, n, 3) blue. Indexed. Indekserte (palettede) bilder er representert med en indeksmatrise av størrelse M N og en kolormapmatrise av størrelse K 3. Colormapet inneholder alle fargene som brukes i bildet, og indeksmatrisen representerer pikslene ved å referere til farger i colormap. For eksempel, hvis den 22. fargen er magenta MyColormap (22, :) 1,0,1. så er MyImage (m, n) 22 en magenta-farget pixel. Binary. Et binært bilde representeres av en M N logisk matrise hvor pikselverdier er 1 (sant) eller 0 (false). Uint8. Denne typen bruker mindre minne, og noen operasjoner beregner raskere enn med dobbelte typer. For enkelhets skyld diskuterer ikke denne opplæringen uint8 videre. Gråskala er vanligvis det foretrukne formatet for bildebehandling. I tilfeller som krever farge, kan et RGB-fargebilde dekomponeres og håndteres som tre separate gråtonebilder. Indekserte bilder må konverteres til gråtoner eller RGB for de fleste operasjoner. Nedenfor er noen vanlige manipulasjoner og konverteringer. Noen få kommandoer krever Image Toolbox og er angitt med Image Toolbox. Lese og skrive bildefiler MATLAB kan lese og skrive bilder med kommandoerene imread og imwrite. Selv om et rettferdig antall filformater støttes, er noen ikke. Bruk imformater for å se hva installasjonen din støtter: Når du leser bilder, er et uheldig problem at imaterialet returnerer bildedataene i uint8 datatype, som må konverteres til dobbel og rescaled før bruk. Så i stedet for å kalle imread direkte, bruker jeg følgende M-fil-funksjon for å lese og konvertere bilder: Høyreklikk og lagre getimage. m for å bruke denne M-funksjonen. Hvis bildet baboon. png er i den nåværende katalogen (eller et sted i MATLAB søkeveien), kan du lese det med MyImage getimage (baboon. png). Du kan også bruke delvise baner, for eksempel hvis bildet er i lt nåværende katalog gtimages med getimage (imagesbaboon. png). Hvis du vil skrive et gråskala eller RGB-bilde, må du passe på at MyImage er en dobbel matrise med elementer i 0,1if feil skalert, den lagrede filen vil trolig være tom. Når jeg skriver bildefiler, anbefaler jeg at du bruker PNG-filformatet. Dette formatet er et pålitelig valg fordi det er lossless, støtter truecolor RGB, og komprimerer ganske bra. Bruk andre formater med forsiktighet. Grunnleggende operasjoner Nedenfor er noen grunnleggende operasjoner på et gråtonebilde u. Kommandoer som krever Image Toolbox er angitt med Image Toolbox. (Merk: For en rekkefølge betyr syntaksen u (:) at du ruller inn i en kolonnevektor. For eksempel hvis du er 1,50,2, så er du (:) 1052.) For eksempel brukes bildesignalstyrken i Beregning av signal / støyforhold (SNR) og toppsignal / støyforhold (PSNR). Gitt rent bilde uclean og støyreduktet bilde du, Vær forsiktig med normen. Oppførselen er norm (v) på vektor v beregner sqrt (sum (v.2)). men norm (A) på matrise A beregner den induserte L 2 matrisen normen, så normen (A) er absolutt ikke sqrt (sum (A (:). 2)). Det er likevel en lett feil å bruke norm (A) der den skulle ha vært norm (A (:)). Lineære filtre Linjær filtrering er hjørnesteinsteknikken for signalbehandling. For kort introduksjon er et lineært filter en operasjon hvor ved hver piksel x m, n av et bilde, blir en lineær funksjon evaluert på piksel og naboene for å beregne en ny pikselverdi y m, n. Et lineært filter i to dimensjoner har den generelle formen hvor x er inngangen, y er utgangen, og h er filterimpulsresponsen. Ulike valg av h fører til filtre som glatter, skjerper og oppdager kanter, for å nevne noen få applikasjoner. Høyre side av ligningen ovenfor er betegnet konsistent som h x og kalles konvolusjonen av h og x. Spatial-domain-filtrering To-dimensjonell lineær filtrering er implementert i MATLAB med conv2. Dessverre kan conv2 bare håndtere filtrering nær bildegrenser ved nullpoling, noe som betyr at filtreringsresultater vanligvis ikke er upassende for piksler nær grensen. For å omgå dette kan vi legge inn bilde og bruke det gyldige alternativet når du ringer conv2. Følgende M-funksjon gjør dette. Høyreklikk og lagre conv2padded. m for å bruke denne M-funksjonen. Her er noen eksempler: Et 2D filter h sies å være separerbart hvis det kan uttrykkes som ytterproduktet av to 1D-filtre h1 og h2. det er, h h1 (:) h2 (:). Det er raskere å passere h1 og h2 enn h. som det er gjort over for det glidende gjennomsnittsvinduet og det gaussiske filteret. Faktisk er Sobel filtre hx og han også separablewhat er h1 og h2 Fourier-domene filtrering. Spatial-domene filtrering med conv2 er lett en kostnadseffektiv drift. For et K K filter på et M N bilde koster conv2 O (MNK 2) tillegg og multiplikasjoner, eller O (N 4) antar M N K. For store filtre er filtrering i Fourier-domenet raskere siden beregningskostnaden reduseres til O (N 2 log N). Ved bruk av convolution-multiplikasjonsegenskapen til Fourier-transformasjonen beregnes konvolusjonen tilsvarende. Resultatet er ekvivalent med conv2padded (x, h) unntatt nær grensen, hvor den ovennevnte beregningen benytter periodisk grenseutvidelse. Fourier-basert filtrering kan også gjøres med symmetrisk grenseforlengelse ved å reflektere inngangen i hver retning: (Merk: En enda mer effektiv metode er FFT overlap-add filtrering. Signal Processing Toolbox implementerer FFT overlap-add i en dimensjon i fftfilt .) Ikke-lineære filtre Et ikke-lineært filter er en operasjon der hver filtrert piksel ym, n er en ikke-lineær funksjon av xm, n og naboene. Her diskuteres kort noen få typer av ikke-lineære filtre. Ordne statistikkfiltre Hvis du har Image Toolbox, kan ordningsstatistikkfiltre utføres med ordfilt2 og medfilt2. Et ordningsstatistikkfilter sorterer pikselverdiene over et nabolag og velger den største verdi. Min-, max - og medianfiltrene er spesielle tilfeller. Morfologiske filtre Hvis du har Image Toolbox, implementerer bwmorph ulike morfologiske operasjoner på binære bilder, som erosjon, utvidelse, åpning, lukking og skjelett. Det er også kommandoer tilgjengelig for morfologi på gråtonebilder: imerode. imdilat og imtophat. blant andre. Bygg ditt eget filter Av og til vil vi bruke et nytt filter som MATLAB ikke har. Koden nedenfor er en mal for å implementere filtre. (Merk: En hyppig feilaktig påstand er at sløyfer i MATLAB er treg og bør unngås. Dette var en gang sant, tilbake i MATLAB 5 og tidligere, men sløyfer i moderne versjoner er rimelig raske.) For eksempel er det alfa-trimmet gjennomsnittet filter ignorerer d 2 laveste og d 2 høyeste verdier i vinduet, og gjennomsnittlig gjenværende (2 r 1) 2 d-verdier. Filteret er en balanse mellom et medianfilter og et middelfilter. Det alfa-trimmet gjennomsnittet filteret kan implementeres i malen som Som et annet eksempel er det bilaterale filteret1.2 Innebygde datatyper En datatype er et sett med verdier og et sett av operasjoner som er definert på dem. For eksempel er vi kjent med tall og med operasjoner definert på dem som tillegg og multiplikasjon. Det finnes åtte forskjellige innebygde typer data i Java, for det meste forskjellige typer tall. Vi bruker systemtypen for strekninger av tegn så ofte at vi også anser det her. Terminologi. Vi bruker følgende kodefragment for å introdusere en terminologi: Den første linjen er en deklarasjonserklæring som deklarerer navnene på tre variabler ved hjelp av identifikasjonene a. b. og c og deres type å være int. De neste tre linjene er oppgaveoppgavene som endrer verdiene av variablene, ved hjelp av bokstavene 1234 og 99. og uttrykket a b. med sluttresultatet at c har verdien 1333. Tegn og strenge. Et karbon er en alfanumerisk karakter eller et symbol, som de du skriver. Vi utfører vanligvis ikke operasjoner på andre tegn enn å tildele verdier til variabler. En streng er en sekvens av tegn. Den vanligste operasjonen vi utfører på strenger er kjent som sammenkobling. gitt to strenger, kjede dem sammen for å lage en ny streng. For eksempel, vurder følgende Java-programfragment: Den første setningen erklærer at tre variabler er av typen String. De neste tre setningene tilordner verdier til dem, med sluttresultatet at c har verdien Hei, Bob. Ruler. java skriver ut de relative lengdene av underdelingene på en linjal ved å bruke strengkonsentrasjon. Heltall. En int er et heltall (hele tall) mellom minus2 31 og 2 31 minus 1 (minus2,147,483,648 til 2,147,483,647). Vi bruker ofte ikke bare fordi de forekommer ofte i den virkelige verden, men de oppstår også naturlig når de uttrykker algoritmer. Standard aritmetiske operatører for tillegg, multiplikasjon og deling, for heltall er innebygd i Java, som illustrert i IntOps. java og følgende tabell: Flytende punktnumre. Dobbelttypen er for å representere flytende punktnumre, f. eks. for bruk i vitenskapelige applikasjoner. Den interne representasjonen er som en vitenskapelig notasjon, slik at vi kan beregne med ekte tall i et stort utvalg. Vi kan spesifisere et flytende punktnummer med enten en streng med sifre med et desimaltegn, f. eks. 3,14159 for en sekssifret tilnærming til matematisk konstant pi, eller med en notasjon som vitenskapelig notasjon, f. eks. 6,022E23 for Avogadros konstant 6,022 ganger 10 23. Standard aritmetiske operatører for tillegg, multiplikasjon og divisjon, for dobbeltrom er innebygd i Java, som illustrert i DoubleOps. java og følgende tabell: Quadratic. java viser bruken av dobler i databehandling de to røttene til en kvadratisk ligning ved hjelp av kvadratisk formel. Booleans. Den boolske typen har bare to verdier: true eller false. Den tilsynelatende enkelheten er deceivingmdashbooleans løgn på grunnlag av datavitenskap. De viktigste operatørene definert for boolsk er for og. eller. og ikke . og. en b er sant hvis både a og b er sanne og falske ellers. eller. en b er sant hvis enten a eller b er sant (eller begge er sanne), og falske ellers ikke. a er sant hvis a er falsk og falsk ellers. Selv om disse definisjonene er intuitive og enkle å forstå, er det verdt å spesifisere hver mulighet for hver operasjon i en sannhetstabell. Sammenligninger. Sammenligningsoperatørene er blandetype operasjoner som tar operander av en type (for eksempel int eller dobbelt) og produserer et resultat av typen boolsk. Disse operasjonene spiller en kritisk rolle i prosessen med å utvikle mer sofistikerte programmer. LeapYear. java tester om et heltall tilsvarer et sprangår i den gregorianske kalenderen. Biblioteksmetoder og APIer. Mange programmeringsoppgaver involverer bruk av Java-biblioteksmetoder i tillegg til de innebygde operatørene. Et program programmeringsgrensesnitt er en tabell som oppsummerer metodene i et bibliotek. Skriver ut strenger til terminalvinduet. Konvertering av strenger til primitive typer. Matematiske funksjoner. Du kan ringe en metode ved å skrive navnet sitt etterfulgt av argumenter. Vedlagt i parentes og adskilt av kommaer. Her er noen eksempler: Vi finner ofte oss å konvertere data fra en type til en annen ved hjelp av en av følgende tilnærminger. Typekonvertering. Vi finner ofte oss å konvertere data fra en type til en annen ved hjelp av en av følgende tilnærminger. Eksplisitt type konvertering. Anropsmetoder som Math. round (). Integer. parseInt (). og Double. parseDouble (). Automatisk type konvertering. For primitive numeriske typer utfører systemet automatisk type konvertering når vi bruker en verdi som har en større verdi enn forventet. Eksplisitte kaster. Java har også noen innebygde typer konvertering metoder for primitive typer som du kan bruke når du er klar over at du kan miste informasjon, men du må gjøre intensjonen med å bruke noe som kalles en cast. RandomInt. java leser et heltall kommandolinje argument n og skriver ut et tilfeldig heltall mellom 0 og n minus1. Automatiske konverteringer for strenger. Den innebygde typen String overholder spesielle regler. En av disse spesielle reglene er at du enkelt kan konvertere alle typer data til en streng ved å bruke operatøren. Anta at a og b er int-verdier. Hva gjør følgende sekvens av setninger Løsning. setter a. b. og t lik den opprinnelige verdien av a. Anta at a og b er int-verdier. Forenkle følgende uttrykk: ((a b)) Løsning. (a b) Den eksklusive eller operatøren for boolske operander er definert som sant hvis de er forskjellige, falske hvis de er de samme. Gi en sannhetstabell for denne funksjonen. Hvorfor gir 103 3 og ikke 3.33333333. Løsning . Siden både 10 og 3 er heltallige bokstaver, ser Java ikke behov for typekonvertering og bruker heltalldivisjon. Du bør skrive 10.03.0 hvis du mener tallene skal være dobbel bokstav. Hvis du skriver 103,0 eller 10,03. Java gjør implisitt konvertering for å få det samme resultatet. Hva skriver hver av følgende utskrift System. out. println (2 bc): 2bc System. out. println (2 3 bc) utskrifter: 5bc System. out. println ((23) bc) utskrifter: 5bc System. out. println (bc (23)) utskrifter: bc5 System. out. println (bc 2 3) utskrifter: bc23 Forklar hvert utfall. Forklar hvordan du bruker Quadratic. java for å finne kvadratroten til et tall. Løsning . for å finne kvadratroten til c, finn røttene til x2 0x - c. En fysikkstudent får uventede resultater når du bruker koden til å beregne verdier i henhold til formelen F G m 1 m 2 r 2. Forklar problemet og korrigér koden. Løsning . Det deler med r. Multiplikerer deretter med r (i stedet for å dividere med r r). Bruk parenteser: Skriv et program Distance. java som tar to heltall kommandolinjeparametere x og y og skriver ut den euklidiske avstanden fra punktet (x. Y) til opprinnelsen (0, 0). Skriv et program SumOfTwoDice. java som skriver summen av to tilfeldige heltall mellom 1 og 6 (som du kanskje får når du ruller terninger). Skriv et program SpringSeason. java som tar to int-verdier m og d fra kommandolinjen og skriver ut sann hvis dag d i måned m er mellom 20. mars (m 3, d 20) og 20. juni (m 6, d 20), falsk noe annet. Kreative øvelser Vind chill. På grunn av temperaturen t (i Fahrenheit) og vindhastigheten v (i miles per time) definerer National Weather Service den effektive temperaturen (vindkjølingen): w 35.74 0.6215 t (0.4275 t - 35.75) v 0.16 Skriv en program WindChill. java som tar to doble kommandolinjeparametere t og v og skriver ut vindkjølingen. Bruk Math. pow (a, b) for å beregne en b. Merk: Formelen er ikke gyldig hvis t er større enn 50 i absolutt verdi, eller hvis v er større enn 120 eller mindre enn 3 (du kan anta at verdiene du får er i dette området). Polar koordinater. Skriv et program CartesianToPolar. java som konverterer fra kartesisk til polarkoordinater. Programmet ditt bør ta to reelle tall x og y på kommandolinjen og skrive ut polarkoordinatene r og theta. Bruk Java-metoden Math. atan2 (y, x). som beregner arktangentverdien til yx som ligger i området fra - pi til pi. Ukens dag. Skriv et program DayOfWeek. java som tar en dato som input og skriver ut dagen i uken den datoen faller på. Programmet ditt bør ta tre kommandolinjeparametere: m (måned), d (dag) og y (år). For m bruker 1 for januar, 2 for februar og så videre. For utskrift skriv ut 0 for søndag, 1 for mandag, 2 for tirsdag og så videre. Bruk følgende formler, for den gregorianske kalenderen (hvor den betyr heltall divisjon): y 0 y minus (14 minus m) 12 xy 0 y 0 4 minus y 0 100 y 0 400 m 0 m 12 ganger ((14 min m) 12 ) minus 2 d 0 (dx 31 m 0 12) mod 7 For eksempel, hvilken ukesdag var 2. august 1953 Uniform tilfeldige tall. Skriv et program Stats5.java som skriver ut fem ensartede tilfeldige verdier mellom 0 og 1, deres gjennomsnittlige verdi og deres minimums - og maksimumsverdi. Bruk Math. random (). Math. min (). og Math. max (). Tre-slag. Skriv et program ThreeSort. java som tar tre int verdier fra kommandolinjen og skriver dem i stigende rekkefølge. Bruk Math. min () og Math. max (). Dragon kurver. Skriv et program Dragon. java for å skrive ut instruksjonene for tegning av dragekurver i rekkefølge 0 til 5. Instruksjonene er strenger av tegnene F. L. og R. hvor F betyr trekklinje mens du beveger 1 enhet fremover, betyr L dreie til venstre, og R betyr sving til høyre. En drakekurve av ordre n dannes når du bretter en papirstrimmel i halv n ganger, og deretter utvikles til rette vinkler. Nøkkelen til å løse dette problemet er å merke seg at en kurve av ordre n er en kurve av ordre n minus1 etterfulgt av en L etterfulgt av en kurve av ordre n minus1 traversert i omvendt rekkefølge, og deretter å finne ut en lignende beskrivelse av omvendt kurve. Web-øvelser Skriv et program Swap. java som tar to integer-kommandolinjeprinsipper a og b og bytter sine verdier ved hjelp av bytte-idiomet som er beskrevet på s. 17. Etter hver oppgaveoppgave bruker du System. out. println () for å skrive ut et spor av variablene. Hva gjør følgende erklæring hvor klasse er en variabel av type int. Løsning . Syntaksfeil sinceDocumentation idx kmeans (X, k) utfører k-means clustering for å partisjonere observasjonene av n-by-p datamatrisen X i k-klynger, og returnerer en n-by-1 vektor (idx) som inneholder klyngeindekser av hver observasjon. Rader av X svarer til punkter og kolonner tilsvarer variabler. Som standard bruker kmeans den kvadratiske euklidiske avstandsmålet og k-means algoritmen for initiering av klyngesenter. idx kmeans (X, k, Name, Value) returnerer klyngenes indekser med tilleggsalternativer angitt av ett eller flere Navn, Value pair-argumenter. For eksempel angi cosinusavstanden, antall ganger for å gjenta klustringen ved å bruke nye innledende verdier, eller for å bruke parallell databehandling. idx, C kmeans () returnerer k cluster centroid steder i k-by-matrixen C. Klusterdata ved bruk av parallellcomputing Clustering store datasett kan ta tid, spesielt hvis du bruker elektroniske oppdateringer (sett som standard). Hvis du har en Parallell Computing Toolboxx2122-lisens, og du påberoper et basseng av arbeidere, kjører kmeans hver sammenleggingsoppgave (eller replikere) parallelt. Derfor, hvis Replikerer gt 1, reduserer parallell databehandling tiden til konvergens. Tilfeldig generere et stort datasett fra en Gauss-blandemodell. Mdl er en 30-dimensjonal gmdistribusjonsmodell med 20 komponenter. X er en 10000-by-30 matrise av data generert fra Mdl. Invoke en parallell pool av arbeidere. Angi alternativer for parallell databehandling. Inngangsargumentet mlfg633164 av RandStream angir å bruke den multiplikative lagrede Fibonacci-generatoralgoritmen. Alternativer er en strukturgruppe som inneholder felt som angir alternativer for å kontrollere estimering. Kommandovinduet indikerer at fire arbeidere er tilgjengelige. Antall arbeidere kan variere på systemet ditt. Klyp dataene ved hjelp av k-means clustering. Angi at det er k 20 klynger i dataene og øk antallet iterasjoner. Normalt inneholder objektivfunksjonen lokale minima. Angi 10 replikater for å finne et lavere, lokalt minimum. Kommandovinduet viser antall iterasjoner og terminalmålfunksjonsverdien for hvert replikat. Utgangsargumentene inneholder resultatene av replikat 9 fordi det har den laveste totale summen av avstander. Name-Value Par Arguments Angi valgfrie kommaseparerte par Navn, Verdi argumenter. Navnet er argumentnavnet og verdien er den tilsvarende verdien. Navn må vises i enkelt anførselstegn (). Du kan angi flere navn og verdi par argumenter i hvilken som helst rekkefølge som Name1, Value1. NameN, ValueN. Eksempel: Avstand, cosinus, replikater, 10, Alternativer, statistikk (UseParallel, 1) spesifiserer cosinusavstanden, 10 replikatklynger ved forskjellige startverdier, og for å bruke parallell databehandling. Skjerm 8212 Utgangsnivå for visning av (standard) siste iter Nivå på utdata som skal vises i kommandovinduet, spesifisert som det kommaseparerte paret består av Skjerm og ett av følgende alternativer: endelig 8212 Viser resultater av den endelige iterasjonshereren 8212 Viser resultater av hver iterasjon av 8212 Viser ingenting En RandStream-objekt eller cellegruppe av slike objekter. Hvis du ikke angir strømmer. kmeans bruker standardstrømmen eller strømmer. Hvis du angir strømmer. bruk et enkelt objekt bortsett fra når: Du har en åpen parallellbasseng BrukParallel er sant. UseSubstreams er feil. I så fall må du bruke en celleoppstilling med samme størrelse som parallellpolen. Hvis en parallell pool ikke er åpen, må Streams levere en enkelt tilfeldig talestrøm. Hvis sant. Replikerer gt 1, og hvis en parallell pool av arbeidere fra Parallell Computing Toolbox er åpen, implementerer programvaren k-means på hver replik parallelt. Hvis parallellcomputing Toolbox ikke er installert, eller hvis en parallellboks av arbeidere ikke er åpen, utføres beregning i seriell modus. Standard er standard. noe som betyr seriell beregning. Sett til sann for å beregne parallelt på en reproduserbar måte. Standard er false. For å beregne reproduserbart, sett Strømmer til en type som tillater understrømmer: mlfg633164 eller mrg32k3a. For å sikre mer forutsigbare resultater, bruk parpool og opprett eksplisitt et parallelt basseng før du anroper kmeans og angi Valg, statistikk (UseParallel, 1). Replikerer 8212 Antall ganger for å gjenta clustering ved hjelp av nye initialklynge-centroidposisjoner 1 (standard) positivt heltall Antall ganger for å gjenta clustering ved å bruke nye initialklynge-centroidposisjoner, spesifisert som det kommaseparerte paret som består av Replikater og et heltall. kmeans returnerer løsningen med laveste sumd. Du kan angi Replikater implisitt ved å levere en 3-D-array som verdien for argumentet Start navn-verdi par. Datatyper: dobbelt enkelt Start 8212 Metode for å velge initial klynge sentroid posisjoner pluss (standard) klyngeprøve ensartet numerisk matrise numerisk array Metode for å velge initial klynge centroid posisjoner (eller frø), spesifisert som det kommaseparerte paret som består av Start og klynge. i tillegg til. prøve. uniform. en numerisk matrise, eller en numerisk matrise. Denne tabellen oppsummerer de tilgjengelige alternativene for valg av frø. k - Means Clustering k-betyr clustering. eller Lloyds-algoritmen 2. er en iterativ datadisisjoneringsalgoritme som tilordner n observasjoner til nøyaktig en av k-klynger definert av sentroider, hvor k velges før algoritmen starter. Algoritmen fortsetter som følger: Velg k innledende klyngesentre (sentroid). For eksempel, velg k observasjoner tilfeldig (ved å bruke Start, prøve) eller bruk k-means algoritmen for initialisering av klyngesenter (standard). Beregn punkt-til-cluster-centroid avstander av alle observasjoner til hver sentroid. Det er to måter å fortsette (spesifisert av OnlinePhase): Batchoppdatering 8212 Tilordne hver observasjon til klyngen med nærmeste sentroid. Nettoppdatering 8212 Tilordne observasjoner individuelt til en annen sentroid hvis omplasseringen reduserer summen av inter-cluster, sum-of-squares punkt-til-cluster-centroid avstander. Beregn gjennomsnittet av observasjonene i hver klynge for å skaffe k nye sentroidsteder. Gjenta trinn 2 til og med 4 til klusteroppgaver ikke endres, eller det maksimale antall iterasjoner er nådd. k-means algoritme K-means algoritmen bruker en heuristisk å finne sentroid frø for k-men clustering. Ifølge Arthur og Vassilvitskii forbedrer 1. k-means kjøretiden til Lloyds algoritmen og kvaliteten på den endelige løsningen. K-means algoritmen velger frø som følger, forutsatt at antall klynger er k. Velg en observasjon jevnt tilfeldig fra datasettet, X. Den valgte observasjonen er den første sentroid, og er betegnet c 1. Beregn avstander fra hver observasjon til c 1. Angi avstanden mellom c j og observasjonen m som d (x m. C j). Velg neste sentroid, c 2 tilfeldig fra X med sannsynlighet d 2 (x m. C 1) x2211 j 1 n d 2 (x j. C 1). Å velge senter j: Beregn avstandene fra hver observasjon til hver sentroid, og tilordne hver observasjon til nærmeste sentroid. For m 1. n og p 1. j 8211 1, velg sentroid j tilfeldig fra X med sannsynlighet d 2 (x m. C p) x2211 x007B h x h x2208 C p x007D d 2 (x h. C p). hvor C p er settet av alle observasjoner nærmest sentroid c p og x m tilhører C p. Det vil si, velg hvert etterfølgende senter med en sannsynlighet proporsjonal med avstanden fra seg selv til nærmeste sentrum som du allerede har valgt. Gjenta trinn 4 til k centroider er valgt. Arthur og Vassilvitskii 1 demonstrerer, ved hjelp av en simuleringsstudie for flere klyngeorientasjoner, at k-means oppnår raskere konvergens til en lavere sum innen-cluster, sum-of-squares punkt-til-cluster-centroid avstander enn Lloyds-algoritmen. Støtte for høy array Denne funksjonen støtter høye arrays for data uten minne, med noen begrensninger. Bare stikkprøveinitialisering støttes. Støttede syntaxer: idx kmeans (X, k) utfører klassisk k-betyr clustering. idx, C kmeans (X, k) returnerer også k cluster centroid steder. idx, C, sumd kmeans (X, k) returnerer i tillegg k-klyngesummene av punkt-til-centroid avstander. kmeans (, Name, Value) angir tilleggsnavnparametre med noen av de andre syntaksene. Gyldige alternativer er: Start 8212 Metode som brukes til å velge de første klyngesentroideposisjonene. Verdien kan være: pluss (standard) 8212 Velg k observasjoner fra X ved hjelp av en variant av kmeansalgoritmen tilpasset høye data. prøve 8212 Velg k observasjoner fra X tilfeldig. Numerisk matrise 8212 En k-ved-p-matrise for å spesifisere startstedene eksplisitt. Alternativer 8212 En opsjonsstruktur opprettet ved hjelp av statistikkfunksjonen. For høye arrays bruker kmeans feltene som er oppført her, og ignorerer alle andre felt i opsjonsstrukturen: Display 8212 Visningsnivå. Valg er iter (standard), av. og endelig. MaxIter 8212 Maks antall antall iterasjoner. Standard er 100. TolFun 8212 Konvergeringstoleranse for de interne klyngesummene av punkt-til-sentroid avstander. Standard er 1e-4. Dette alternativfeltet fungerer bare med høye arrays. For mer informasjon, se Tall Arrays. Algoritmer kmeans bruker en tofaset iterativ algoritme for å minimere summen av punkt-til-centroid avstander, summert over alle k-klynger. Denne første fasen bruker batchoppdateringer. hvor hver iterasjon består av omfordeling av poeng til deres nærmeste klyngesenter, alt etter en gang, etterfulgt av omregning av klyngesentroider. Denne fasen av og til konvergerer seg ikke til løsning som er et lokalt minimum. Det vil si at en partisjon av dataene som flytter et enkelt punkt til en annen gruppe, øker den totale summen av avstander. Dette er mer sannsynlig for små datasett. Batchfasen er rask, men potensielt bare omtrentlig en løsning som utgangspunkt for den andre fasen. Denne andre fasen bruker nettopp oppdateringer. hvor poeng er individuelt tilordnet dersom det reduserer summen av avstander, og klyngesentroider omdannes etter hver omplassering. Hver iterasjon i denne fasen består av ett pass, men alle poengene. Denne fasen konvergerer til et lokalt minimum, selv om det kan være andre lokale minima med lavere total sum av avstander. Generelt er å finne det globale minimumet løst ved et uttømmende utvalg av startpunkter, men bruk av flere replikater med tilfeldige startpunkter resulterer vanligvis i en løsning som er et globalt minimum. Hvis Replikerer r gt 1 og Start er pluss (standard), velger programvaren r muligens forskjellige sett av frø i henhold til k-means algoritmen. Hvis du aktiverer alternativet UseParallel i Alternativer og Replikerer gt 1, velger hver arbeidstaker frø og klynger parallelt. Referanser 1 Arthur, David og Sergi Vassilvitskii. K-betyr: Fordelene med forsiktig sådd. SODA 821607: Forløp av det attende årlige ACM-SIAM Symposium på diskrete algoritmer. 2007, s. 102782111035. 2 Lloyd, Stuart P. Least Squares Quantization i PCM. IEEE Transaksjoner på informasjonsteori. Vol. 28, 1982, s. 1298211137. 3 Seber, G. A. F. multivariate observasjoner. Hoboken, NJ: John Wiley ampsons, Inc. 1984. 4 Spath, H. Cluster Dissection and Analysis: Teori, FORTRAN Programmer, Eksempler. Oversatt av J. Goldschmidt. New York: Halsted Press, 1985. Velg ditt land
Comments
Post a Comment