Denna handledning diskuterar hur man använder MATLAB för bildbehandling. Viss kunskap om MATLAB antas (du borde veta hur man använder matriser och skriver en M-fil). Det är bra att ha MATLAB Image Processing Toolbox, men lyckligtvis behövs inga verktygslådor för de flesta operationer. Kommandon som kräver bildverktygslådan anges med Image Toolbox. Bildrepresentation Det finns fem typer av bilder i MATLAB. Gråskala. En gråskalebild M pixlar lång och N pixlar bred representeras som en matris av dubbel datatyp av storlek M N. Elementvärden (t. ex. MyImage (m, n)) betecknar pixelgråskalaintensiteterna i 0,1 med 0black och 1white. Truecolor RGB. En truecolor röd-grönblå (RGB) bild representeras som en tredimensionell M N 3 dubbelmatris. Varje pixel har röda, gröna, blåa komponenter längs den tredje dimensionen med värden i 0,1, till exempel är färgkomponenterna i pixeln (m, n) MyImage (m, n, 1) röd, MyImage (m, n, 2) grön, MyImage (m, n, 3) blue. Indexed. Indexerade (palettade) bilder representeras med en indexmatris med storlek M N och en kolormapmatris med storlek K 3. Colormapet innehåller alla färger som används i bilden och indexmatrisen representerar pixlarna genom att hänvisa till färger i colormap. Till exempel, om den 22: e färgen är magenta MyColormap (22, :) 1,0,1. då är MyImage (m, n) 22 en magenta-färgad pixel. Binary. En binär bild representeras av en M N logisk matris där pixelvärden är 1 (sann) eller 0 (falsk).uint8. Denna typ använder mindre minne och vissa operationer beräknar snabbare än med dubbla typer. För enkelhetens skull diskuterar inte denna handledning uint8 ytterligare. Gråskala är vanligtvis det föredragna formatet för bildbehandling. I fall som kräver färg kan en RGB-färgbild sönderföras och hanteras som tre separata gråskala bilder. Indexerade bilder måste konverteras till gråskala eller RGB för de flesta operationer. Nedan följer några vanliga manipuleringar och omvandlingar. Några kommandon kräver Image Toolbox och anges med Image Toolbox. Läsa och skriva bildfiler MATLAB kan läsa och skriva bilder med kommandona imread och imwrite. Även om ett rättvist antal filformat stöds, är vissa inte. Använd imformats för att se vad din installation stöder: När du läser bilder är ett olyckligt problem att imaterialet returnerar bilddata i uint8 datatyp, som måste konverteras till dubbel och återkalverad före användning. Så istället för att ringa direkt img använder jag följande M-fil-funktion för att läsa och konvertera bilder: Högerklicka och spara getimage. m för att använda denna M-funktion. Om bilden baboon. png finns i den aktuella katalogen (eller någonstans i MATLAB sökvägen) kan du läsa den med MyImage getimage (baboon. png). Du kan också använda partiella sökvägar, till exempel om bilden är i lt aktuella katalog gtimages med getimage (imagesbaboon. png). För att skriva en gråskala eller RGB-bild, använd försiktigt att MyImage är en dubbelmatris med element i 0,1if felaktigt skalad, den sparade filen kommer troligen att vara tom. När du skriver bildfiler rekommenderar jag starkt att använda PNG-filformatet. Detta format är ett pålitligt val eftersom det är förlustfritt, stöder truecolor RGB och komprimerar ganska bra. Använd andra format med försiktighet. Grundläggande operationer Nedan följer några grundläggande funktioner på en gråskalebild u. Kommandon som kräver bildverktygslådan anges med Image Toolbox. (Obs! För varje array betyder syntaxen u (:) att du rullar in i en kolumnvektor. Om du till exempel är 1,50,2, då är du (:) 1052.) Till exempel används bildsignalstyrka i beräkningssignal / brusförhållande (SNR) och toppsignal / brusförhållande (PSNR). Givet ren bild oclean och buller-förorenad bild du, Var försiktig med normen. beteendet är norm (v) på vektor v beräknar sqrt (summa (v.2)). men norm (A) på matris A beräknar den inducerade L 2 matrisnormen, så normen (A) är verkligen inte sqrt (summa (A (:). 2)). Det är ändå ett lätt misstag att använda norm (A) där det borde ha varit norm (A (:)). Linjära filter Linjär filtrering är hörnstenstekniken för signalbehandling. För att kort introducera är ett linjärt filter en operation där vid varje pixel x m, n av en bild, en linjär funktion utvärderas på pixeln och dess grannar för att beräkna ett nytt pixelvärde y m, n. Ett linjärt filter i två dimensioner har den allmänna formen där x är ingången, y är utgången och h är filterimpulssvaret. Olika val av h leder till filter som släpper, skärper och upptäcker kanter, för att nämna några applikationer. Den högra sidan av ovanstående ekvation betecknas kortfattat som hx och kallas konvolutionen av h och x. Spatial-domänfiltrering Tvådimensionell linjär filtrering implementeras i MATLAB med conv2. Tyvärr kan conv2 bara hantera filtrering nära bildgränserna med nollpolning, vilket innebär att filtreringsresultat vanligen är olämpligt för pixlar nära gränsen. För att arbeta runt detta kan vi padda inmatningsbilden och använda det giltiga alternativet när vi ringer conv2. Följande M-funktion gör detta. Högerklicka och spara conv2padded. m för att använda denna M-funktion. Här är några exempel: Ett 2D-filter h sägs vara separerbart om det kan uttryckas som ytterprodukten av två 1D-filter h1 och h2. det vill säga h h1 (:) h2 (:). Det är snabbare att passera h1 och h2 än h. som görs ovan för det glidande medelfönstret och det gaussiska filtret. Faktum är att filtret Sobel hx och han också är separablewhat är h1 och h2 Fourier-domänfiltrering. Spatial-domänfiltrering med conv2 är enkelt en komplementärt dyr operation. För ett K K-filter på en M N-bild kostar conv2 kostnader O (MNK 2) tillägg och multiplikationer, eller O (N 4) förutsätter M N K. För stora filter är filtrering i Fourier-domänen snabbare eftersom beräkningskostnaden reduceras till O (N 2 log N). Med användning av fultionsfördelningsegenskapen för Fouriertransformen beräknas konvolutionen likvärdigt av resultatet. Resultatet motsvarar conv2padded (x, h) utom nära gränsen, där ovanstående beräkning använder periodisk gränsvärde. Fourier-baserad filtrering kan också göras med symmetrisk gränsvärde genom att reflektera ingången i varje riktning: (Obs! En ännu effektivare metod är FFT-överlappningsfiltrering. Signalbehandlingsverktygslådan implementerar FFT-överlappning i en dimension i fftfilt .) Icke-linjära filter Ett icke-linjärt filter är en operation där varje filtrerad pixel ym, n är en olinjär funktion av xm, n och dess grannar. Här diskuteras kortfattat några typer av olinjära filter. Beställ statistikfilter Om du har bildverktygslåda kan ordningsstatistikfilter utföras med ordfilt2 och medfilt2. Ett orderstatistikfilter sorterar pixelvärdena över ett grannskap och väljer det största värdet. Min-, max - och medianfiltret är speciella fall. Morfologiska filter Om du har bildverktygslådan implementerar bwmorph olika morfologiska operationer på binära bilder, som erosion, utvidgning, öppning, stängning och skelett. Det finns också kommandon tillgängliga för morfologi på gråskalebilder: imerode. imdilat och imtophat. bland andra. Bygg ditt eget filter Ibland vill vi använda ett nytt filter som MATLAB inte har. Koden nedan är en mall för att implementera filter. (Obs! Ett vanligt felaktigt påstående är att slingorna i MATLAB är långsamma och bör undvikas. Det var en gång sant, tillbaka i MATLAB 5 och tidigare, men slingor i moderna versioner är relativt snabba.) Exempelvis är det alfa-trimmade medelfiltret ignorerar de d 2 lägsta och d 2 högsta värdena i fönstret och medlar de återstående (2 r 1) 2 d-värdena. Filtret är en balans mellan ett medianfilter och ett medelfilter. Det alfa-trimmade medelfiltret kan implementeras i mallen som Som ett annat exempel är det bilaterala filtret1.2 Inbyggda datatyper En datatyp är en uppsättning värden och en uppsättning operationer som definieras på dem. Till exempel är vi bekanta med siffror och med operationer definierade på dem som tillägg och multiplikation. Det finns åtta olika inbyggda datatyper i Java, mestadels olika typer av nummer. Vi använder systemtypen för strängar av tecken så ofta att vi också anser det här. Terminologi. Vi använder följande kodfragment för att införa en terminologi: Den första raden är ett deklarationsdeklaration som deklarerar namnen på tre variabler med hjälp av identifierarna a. b. och c och deras typ att vara int. De följande tre raderna är uppdragsinställningar som ändrar värdena för variablerna med hjälp av bokstäverna 1234 och 99. och uttrycket a b. med slutresultatet att c har värdet 1333. Tecken och strängar. En karaktär är en alfanumerisk karaktär eller symbol, som de du skriver. Vi utför vanligtvis inte några operationer på andra tecken än att tilldela värden till variabler. En sträng är en sekvens av tecken. Den vanligaste operationen som vi utför på strängar är känd som sammankoppling. ges två strängar, kedja dem tillsammans för att skapa en ny sträng. Tänk på följande Java-programfragment: Det första uttalandet deklarerar tre variabler som är av typen String. De följande tre påståenden tilldelar värden till dem, med slutresultatet att c har värdet Hej, Bob. Ruler. java skriver med hjälp av strängkonstruktion de relativa längderna på underavdelningarna på en linjal. Heltal. En int är ett heltal (heltal) mellan minus2 31 och 2 31 minus 1 (minus2,147,483,648 till 2,147,483,647). Vi använder int s ofta inte bara för att de förekommer ofta i den verkliga världen, men också de uppstår naturligtvis när man uttrycker algoritmer. Standardräkningsoperatörer för addition, multiplicering och division, för heltal är inbyggda i Java, som illustreras i IntOps. java och följande tabell: Flytande punktnummer. Dubbeltypen är för att representera flytande punkter, t. ex. för användning i vetenskapliga tillämpningar. Den interna representationen är som en vetenskaplig notation, så att vi kan beräkna med reella tal i ett stort utbud. Vi kan ange ett flytpunktsnummer med hjälp av en sträng av siffror med en decimal, t. ex. 3,14159 för en sexsiffrig approximation till den matematiska konstanten pi eller med en notation som vetenskaplig notation, t. ex. 6,022E23 för Avogadros-konstant 6,022 gånger 10 23. Standardräkningshanterare för addition, multiplikation och division, för dubblar, är inbyggda i Java, som illustreras i DoubleOps. java och följande tabell: Quadratic. java visar användningen av dubblerade datorer de två rötterna i en kvadratisk ekvation med den kvadratiska formeln. Booleans. Den booleska typen har bara två värden: true eller false. Den uppenbara enkelheten är att deceivingmdashbooleans ligger på grundval av datavetenskap. De viktigaste operatörerna definierade för den booleska är för och. eller. och inte . och. a b är sant om både a och b är sanna och falska annars. eller. a b är sant om antingen a eller b är sant (eller båda är sanna) och falska annars inte. a är sant om a är falskt och falskt annars. Även om dessa definitioner är intuitiva och lätta att förstå, är det värt att fullständigt ange varje möjlighet för varje operation i en sannhetstabell. Jämförelser. Jämförelseoperatörerna är blandade operationer som tar operander av en typ (t ex int eller dubbel) och producerar ett resultat av booleskt typ. Dessa operationer spelar en viktig roll i utvecklingen av mer sofistikerade program. LeapYear. java testa om ett heltal motsvarar ett språngår i den gregorianska kalendern. Biblioteksmetoder och API. Många programmeringsuppgifter innefattar att använda Java-biblioteksmetoder utöver de inbyggda operatörerna. Ett applikationsprogrammeringsgränssnitt är en tabell som sammanfattar metoderna i ett bibliotek. Skrivar strängar till terminalfönstret. Konvertera strängar till primitiva typer. Matematiska funktioner. Du kan ringa en metod genom att skriva sitt namn följt av argument. omsluten inom parentes och åtskilda av kommatecken. Här är några exempel: Vi finner ofta oss att konvertera data från en typ till en annan med en av följande metoder. Typkonvertering. Vi befinner oss ofta om att konvertera data från en typ till en annan med hjälp av någon av följande metoder. Explicit typkonvertering. Samtalsmetoder som Math. round (). Integer. parseInt (). och Double. parseDouble (). Automatisk typkonvertering. För primitiva numeriska typer utför systemet automatiskt typkonvertering när vi använder ett värde vars typ har ett större antal värden än förväntat. Explicit gjutningar. Java har också vissa inbyggda typomvandlingsmetoder för primitiva typer som du kan använda när du är medveten om att du kan förlora information, men du måste göra din avsikt med något som kallas en cast. RandomInt. java läser ett heltal kommandoradsargument n och skriver ut ett slumpmässigt heltal mellan 0 och n minus1. Automatiska omvandlingar för strängar. Den inbyggda typen String lyder speciella regler. En av dessa speciella regler är att du enkelt kan konvertera vilken typ av data som helst till en sträng genom att använda operatören. Antag att a och b är int värden. Vad gör följande sekvens av uttalanden Lösning. sätter a. b. och t lika med det ursprungliga värdet av a. Antag att a och b är int värden. Förenkla följande uttryck: ((a b)) Lösning. (a b) Den exklusiva eller operatören för booleska operander definieras vara sant om de är olika, falska om de är desamma. Ge en sanningstabell för denna funktion. Varför ger 103 3 och inte 3.33333333. Lösning. Eftersom både 10 och 3 är heltal bokstäver, ser Java inget behov av typkonvertering och använder heltal. Du borde skriva 10.03.0 om du menar att siffrorna är dubbla bokstäver. Om du skriver 103,0 eller 10,03. Java gör implicit konvertering för att få samma resultat. Vad skriver varje av följande 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 Förklara varje utfall. Förklara hur du använder Quadratic. java för att hitta kvadratroten av ett nummer. Lösning. för att hitta kvadratroten av c, hitta rötterna på x2 0x - c. En fysikstudent får oväntade resultat när man använder koden för att beräkna värden enligt formeln F G m 1 m 2 r 2. Förklara problemet och korrigera koden. Lösning. Den delar upp med r. multiplicerar sedan med r (istället för att dividera med r r). Använd parentes: Skriv ett program Distance. java som tar två heltal kommandoradsargument x och y och skriver ut det euklidiska avståndet från punkten (x. Y) till ursprunget (0, 0). Skriv ett program SumOfTwoDice. java som skriver summan av två slumpartar mellan 1 och 6 (som du kanske får när du rullar tärningar). Skriv ett program SpringSeason. java som tar två int värden m och d från kommandoraden och skriver sant om dag d i månaden m är mellan 20 mars (m 3, d 20) och 20 juni (m 6, d 20), falskt annat. Kreativa övningar Vind chill. Med tanke på temperaturen t (i Fahrenheit) och vindhastigheten v (i miles per timme) definierar National Weather Service den effektiva temperaturen (vindkylan): w 35.74 0.6215 t (0.4275 t - 35.75) v 0.16 Skriv en program WindChill. java som tar två dubbla kommandoradsargument t och v och skriver ut vindkylan. Använd Math. pow (a, b) för att beräkna en b. Obs: Formeln är inte giltig om t är större än 50 i absolut värde eller om v är större än 120 eller mindre än 3 (du kan anta att värdena du får är i det området). Polära koordinater. Skriv ett program CartesianToPolar. java som konverterar från kartesiska till polära koordinater. Ditt program borde ta två reella tal x och y på kommandoraden och skriva ut polarkoordinaterna r och theta. Använd Java-metoden Math. atan2 (y, x). som beräknar arktangentvärdet för yx som ligger i intervallet från - pi till pi. Veckodag. Skriv ett program DayOfWeek. java som tar ett datum som inmatning och skriver ut veckodagen det datumet faller på. Ditt program ska ta tre kommandoradsargument: m (månad), d (dag) och y (år). För m använder 1 för januari, 2 för februari och så vidare. För utskrift 0 för söndag, 1 för måndag, 2 för tisdag och så vidare. Använd följande formler för den gregorianska kalendern (där den betecknar heltalsdelningen): y 0 y minus (14 minus m) 12 xy 0 y 0 4 minus y 0 100 y 0 400 m 0 m 12 gånger ((14 min m) 12 ) minus 2 d 0 (dx 31 m 0 12) mod 7 Till exempel, vilken veckodag var 2 augusti 1953 Uniform slumptal. Skriv ett program Stats5.java som skriver ut fem likformiga slumpmässiga värden mellan 0 och 1, deras genomsnittliga värde och deras lägsta och maximala värde. Använd Math. random (). Math. min (). och Math. max (). Tre slag. Skriv ett program ThreeSort. java som tar tre int värden från kommandoraden och skriver dem i stigande ordning. Använd Math. min () och Math. max (). Dragon curves. Skriv ett program Dragon. java för att skriva ut instruktionerna för att dra drakurvorna i ordning 0 till 5. Instruktionerna är strängar av tecknen F. L. och R. där F betyder rita linje medan du flyttar 1 enhet framåt, L betyder sväng vänster och R betyder sväng höger. En drakkurva av order n bildas när du vikar en pappersremsa i halv n gånger och sedan viks ut i rät vinkel. Nyckeln till att lösa detta problem är att notera att en kurva för ordern n är en kurva för ordningen n minus1 följt av en L följd av en kurva av ordningen n minus1 traversad i omvänd ordning och sedan att finna en liknande beskrivning av omvänden kurva. Webben övningar Skriv ett program Swap. java som tar två heltal kommandoradsargument a och b och byter ut sina värden med hjälp av det swapping-idiom som beskrivs på sid. 17. Efter varje uppdragsförklaring använder du System. out. println () för att skriva ut ett spår av variablerna. Vad gör följande uttalande där betyg är en variabel av typ int. Lösning. Syntaxfel sinceDocumentation idx kmeans (X, k) utför k-means-gruppering för att dela observationerna av n-by-p-datamatrisen X i k-kluster och returnerar en n-by-1-vektor (idx) innehållande klusterindex av varje observation. Rader av X motsvarar punkter och kolumner som motsvarar variabler. Som standard använder kmeans den kvadratiska euklidiska distansmåttet och k-meansalgoritmen för initiering av klustercentraler. idx kmeans (X, k, Name, Value) returnerar klusterindexen med ytterligare alternativ som anges av en eller flera namnparametrar. Ange till exempel cosinusavståndet, antalet gånger för att upprepa klustret med nya initialvärden eller för att använda parallell databehandling. idx, C kmeans () returnerar k-cluster-centroid-platserna i k-by-matrixen C. Cluster Data Använda Parallell Computing Clustering stora dataset kan ta tid, särskilt om du använder online-uppdateringar (som standard). Om du har en Parallell Computing Toolboxx2122-licens och du anropar en pool av arbetstagare, kör kmeans varje klustringsuppgift (eller replikera) parallellt. Därför, om Replicerar gt 1, minskar parallellberäkningen tiden till konvergens. Slumpmässigt generera en stor dataset från en Gauss-blandningsmodell. Mdl är en 30-dimensionell gmdistributionsmodell med 20 komponenter. X är en 10000-by-30-matris av data genererad från Mdl. Invoke en parallell pool av arbetare. Ange alternativ för parallell databehandling. Inmatningsargumentet mlfg633164 av RandStream specificerar att använda den multiplicativa lagrade Fibonacci-generatoralgoritmen. alternativ är en strukturuppsättning som innehåller fält som anger alternativ för kontroll av uppskattning. Kommandofönstret anger att fyra arbetstagare är tillgängliga. Antalet anställda kan variera på ditt system. Kluster data med hjälp av k-means clustering. Ange att det finns k 20 kluster i data och öka antalet iterationer. Normalt innehåller objektivfunktionen lokala minima. Ange 10 replikat för att hitta ett lägre, lokalt minimum. Kommandofönstret visar antalet iterationer och terminalvärdesfunktionsvärdet för varje replikat. Utgångsargumenten innehåller resultaten från replik 9 eftersom den har den lägsta totala summan av avstånd. Namnvärdesparargument Ange eventuella kommaseparerade par Namn, Värdesargument. Namnet är argumentnamnet och värdet är motsvarande värde. Namnet måste visas inuti enkla citat (). Du kan ange flera namn och värdeparargument i vilken ordning som helst Namn1, Värde1. NameN, ValueN. Exempel: Avstånd, cosinus, replikerar, 10, alternativ, statistik (UseParallel, 1) specificerar cosinusavståndet, 10 replikat kluster vid olika startvärden och för parallell databehandling. Display 8212 Utmatningsnivå för visning av (standard) slutlig iter Nivå av utmatning som ska visas i kommandofönstret, specificerat som det kommaseparerade paret som består av Display och ett av följande alternativ: slutlig 8212 Visar resultat av slutlig iteration iter 8212 Visar resultat av varje iteration av 8212 Visar ingenting Ett RandStream-objekt eller cellmatris av sådana objekt. Om du inte anger strömmar. kmeans använder standardströmmen eller strömmarna. Om du anger strömmar. använd ett enda objekt utom när: Du har en öppen parallellpool AnvändParallel är sant. UseSubstreams är falskt. Använd i så fall en cellmatris med samma storlek som parallellpoolen. Om en parallellpool inte är öppen måste Streams tillhandahålla en enda slumpmässig talström. Om sant. Replicerar gt 1, och om en parallellpool av arbetstagare från Parallell Computing Toolbox är öppen, implementerar programvaran k - means på varje replik parallellt. Om parallelldatorns verktygslåda inte är installerad, eller om en parallellpool av arbetare inte är öppen, sker beräkning i serieläge. Standard är standard. vilket betyder seriell beräkning. Ange till sant att beräkna parallellt på ett reproducerbart sätt. Standard är false. För att beräkna reproducerbart sätt sätta strömmar till en typ som tillåter underströmmar: mlfg633164 eller mrg32k3a. För att säkerställa mer förutsägbara resultat, använd parpool och uttryckligen skapa en parallellpool innan du anropar kmeans och ställer in Options, statset (UseParallel, 1). Replicerar 8212 Antal gånger för att repetera kluster med nya initiala klustercentroidpositioner 1 (standard) Positivt heltal Antal gånger för att upprepa kluster med nya initiala klustercentroidpositioner, specificerade som det kommaseparerade paret som består av Replikerar och ett heltal. kmeans returnerar lösningen med lägsta sumd. Du kan ställa in Replikerar implicit genom att leverera en 3-D-array som värdet för argumentet Start namnvärdepar. Datatyper: dubbel singel Start 8212 Metod för att välja initiala klyvningscentroidpositioner plus (standard) klyvprov enhetlig numerisk matris numerisk array Metod för att välja initiala klyvningscentroidpositioner (eller fröer), specificerade som det kommaseparerade paret som består av Start och kluster. plus. prov. enhetlig. en numerisk matris eller en numerisk matris. I tabellen sammanfattas de tillgängliga alternativen för att välja frön. k - Means Clustering k-betyder klustring. eller Lloyds algoritm 2. är en iterativ datadisitionsalgoritm som tilldelar n observationer till exakt en av k-kluster definierade av centroider, där k väljs innan algoritmen startar. Algoritmen fortsätter enligt följande: Välj k initiala klyngcentraler (centroid). Välj till exempel k-observationer slumpmässigt (med hjälp av Start, prov) eller använd k-means algoritmen för initiering av klustercentral (standard). Beräkna punkt-till-kluster-centroid avstånd av alla observationer till varje centroid. Det finns två sätt att fortsätta (anges av OnlinePhase): Batchuppdatering 8212 Tilldela varje observation till klustret med närmaste centroid. Online-uppdatering 8212 Tilldela enskilda observationer till en annan centroid om omfördelningen minskar summan av inter-cluster, sum-of-squares punkt-till-cluster-centroid avstånd. Beräkna medelvärdet av observationerna i varje kluster för att få k nya centroid platser. Upprepa steg 2 till 4 tills klusteruppdrag inte ändras eller det maximala antalet iterationer uppnås. k-means algoritm K-means algoritmen använder en heuristisk för att hitta centroid frön för k-menans clustering. Enligt Arthur och Vassilvitskii förbättrar 1. k-means löptiden för Lloyds-algoritmen och kvaliteten på den slutliga lösningen. K-meansalgoritmen väljer frön enligt följande, förutsatt att antalet kluster är k. Välj en observation som är likformigt slumpmässig från datasatsen, X. Den valda observationen är den första centroiden och betecknas c 1. Beräkna avstånd från varje observation till c 1. Ange avståndet mellan cj och observationen m som d (x m. C j). Välj nästa centroid, c 2 slumpmässigt från X med sannolikhet d 2 (x m. C 1) x2211 j 1 n d 2 (x j. C 1). Att välja centrum j: Beräkna avstånden från varje observation till varje centroid och tilldela varje observation till dess närmaste centroid. För m 1. n och p 1. j 8211 1, välj centroid j slumpmässigt från X med sannolikhet d 2 (x m. C p) x2211 x007B h x h x2208 C p x007D d 2 (x h. C p). där Cp är uppsättningen av alla observationer närmast centroid cp och xm tillhör Cp. Det vill säga välj varje efterföljande center med en sannolikhet som är proportionell mot avståndet från sig till närmsta centrum som du redan har valt. Upprepa steg 4 tills k centroider väljs. Arthur och Vassilvitskii 1 demonstrerar, genom att använda en simuleringsstudie för flera klusterorienteringar, att k-menar uppnår snabbare konvergens till en lägre summa av inter-cluster, sum-of-squares punkt-till-cluster-centroid avstånd än Lloyds-algoritmen. Stöd för hög array Denna funktion stöder höga uppsättningar för data utan minne med vissa begränsningar. Endast slumpmässig provinitiering stöds. Syntaxer som stöds: idx kmeans (X, k) utför klassisk k-means clustering. idx, C kmeans (X, k) returnerar också k cluster centroid platser. idx, C, sumd kmeans (X, k) returnerar dessutom k-klyngsbeloppen av punkt-till-centroid avstånd. kmeans (, Name, Value) anger ytterligare parametrar för namnvärdepar med någon av de andra syntaxerna. Giltiga alternativ är: Starta 8212 Metod som används för att välja de ursprungliga klustercentroidpositionerna. Värdet kan vara: plus (standard) 8212 Välj k-observationer från X med en variant av kmeansalgoritmen anpassad för långa data. prov 8212 Välj k observationer från X slumpmässigt. Numerisk matris 8212 En k-by-p-matris för att uttryckligen ange startplatser. Alternativ 8212 En alternativstruktur skapad med hjälp av statistikfunktionen. För långa arrays använder kmeans de fält som anges här och ignorerar alla andra fält i alternativstrukturen: Display 8212 Visningsnivå. Valet är iter (standard), avstängt. och sista. MaxIter 8212 Maximalt antal iterationer. Standard är 100. TolFun 8212 Konvergeringstolerans för inklusterbeloppet från punkt-till-centroid avstånd. Standard är 1e-4. Det här alternativfältet fungerar bara med långa arrays. Mer information finns i Tall Arrays. Algoritmer kmeans använder en tvåfas-iterativ algoritm för att minimera summan av punkt-till-centroid avstånd, summerad över alla k-klyftor. Denna första fasen använder batchuppdateringar. där varje iteration består av att omplacera poäng till deras närmaste klustercentroide, allt på en gång följt av omräkning av klustercentroider. Denna fas konvergerar inte ibland till en lösning som är ett lokalt minimum. Det vill säga, en uppdelning av data där en enskild punkt flyttas till ett annat kluster ökar den totala summan av avstånd. Detta är mer sannolikt för små dataset. Batchfasen är snabb, men potentiellt bara approximerar en lösning som utgångspunkt för den andra fasen. Den andra fasen använder online-uppdateringar. där poängen individuellt omfördelas om så reduceras summan av avstånd, och klustercentroider omräknas efter varje omplacering. Varje iteration under denna fas består av ett pass, men alla punkter. Denna fas konvergerar till ett lokalt minimum, även om det kan finnas andra lokala minima med lägre totala summa avstånd. I allmänhet löses det globala läget genom ett uttömmande val av utgångspunkter, men med hjälp av flera replikat med slumpmässiga utgångspunkter resulterar det vanligtvis i en lösning som är ett globalt minimum. Om Replicerar r gt 1 och Start är plus (standard), väljer programvaran r eventuellt olika uppsättningar frön enligt k-means algoritmen. Om du aktiverar alternativet UseParallel i Alternativ och Replicerar gt 1, väljer varje arbetare frön och kluster parallellt. Referenser 1 Arthur, David och Sergi Vassilvitskii. K-betyder: Fördelarna med noggrann sådd. SODA 821607: Förlopp av det artonde årliga ACM-SIAM-symposiet om diskreta algoritmer. 2007, s. 102782111035. 2 Lloyd, Stuart P. Minsta kvadratkvantisering i PCM. IEEE Transaktioner på Informationsteori. Vol. 28, 1982, s. 1298211137. 3 Seber, G. A. F. Multivariate Observations. Hoboken, NJ: John Wiley amponsons, Inc. 1984. 4 Spath, H. Cluster Dissection and Analysis: Theory, FORTRAN Programs, Examples. Översatt av J. Goldschmidt. New York: Halsted Press, 1985. Välj ditt land
No comments:
Post a Comment