Når man arbejder med fuzzy logic systemer i MATLAB, er en af de første opgaver at oprette et Fuzzy Inference System (FIS), som kan anvendes til kontrolsystemer som for eksempel aircondition (AC). Der findes mange funktioner i MATLAB, som gør det muligt at bygge og evaluere et sådant system. For at forstå de grundlæggende funktioner og metoder, der anvendes til at oprette et FIS, vil vi gennemgå de vigtigste trin og funktioner, der er nødvendige for at bygge et FIS.
Først og fremmest er det nødvendigt at generere et FIS ved hjælp af MATLAB-funktionerne. Dette gøres ved at bruge mamfis()-funktionen til at oprette en Type-1 FIS, som er baseret på Mamdani-modellen. Når systemet er oprettet, kan man begynde at tilføje input- og outputvariabler ved hjælp af funktioner som addInput() og addOutput(). For eksempel kan inputvariabler som "Temp" (temperatur) og "Temp_Rate" (temperaturændringshastighed) samt outputvariabler som "Motor_Speed" (motorhastighed) tilføjes til FIS'en.
Når de relevante input- og outputvariabler er defineret, skal man tilføje medlemsfunktioner (MF'er) for hver af disse variabler. En medlemsfunktion beskriver, hvordan en variabel skal fortolkes i fuzzy logik-systemet. Forskellige typer af medlemsfunktioner kan anvendes, f.eks. den generaliserede bell-funktion (gbellmf) eller Gauss-funktionen (gaussmf). Funktionen addMF() anvendes til at tilføje disse medlemsfunktioner til de enkelte variabler.
Efter at have defineret de nødvendige input- og outputvariabler og deres tilhørende medlemsfunktioner, kan man benytte sig af funktioner som gensurf() og plotfis() til at visualisere systemets struktur og forudse output for givet input. Disse funktioner hjælper med at sikre, at det FIS, der er oprettet, opfører sig som forventet, og de giver en grafisk repræsentation af de logiske regler og forhold i systemet.
Når et FIS er bygget, og man ønsker at anvende det til beregning af output, kan man bruge funktionen evalfis(). Denne funktion tager et givent input og beregner det tilsvarende output ved hjælp af de fuzzy regler, der er defineret i systemet. Endvidere kan man gemme det oprettede FIS til senere brug ved hjælp af writeFIS() og hente det ved hjælp af readfis().
Der er også en række funktioner, der giver mulighed for at ændre og finjustere et eksisterende FIS. Funktionen removeInput(), removeOutput() og removeMF() giver mulighed for at fjerne inputvariabler, outputvariabler og medlemsfunktioner, mens convertfis() kan bruges til at konvertere et gammelt FIS til et nyt format. Desuden giver convertToSugeno(), convertToType1() og convertToType2() funktioner mulighed for at konvertere mellem forskellige typer af FIS’er, for eksempel fra Mamdani til Sugeno-modellen.
I et konkret projekt som et AC-system, er det vigtigt at definere de rette variabler og deres intervaller. For eksempel kan temperaturintervallerne for "Temp" variere fra 30°C til 90°C, mens "Temp_Rate" kan variere fra 0 til 5 grader pr. sekund. Outputtet, "Motor_Speed", kan have et interval fra 100 til 1000 omdrejninger pr. minut. Det er vigtigt at have et klart billede af disse intervaller, da de bestemmer, hvordan systemet reagerer på input.
Desuden er det vigtigt at forstå, hvordan de valgte medlemsfunktioner (som bell- og Gauss-funktioner) fungerer, og hvordan de påvirker de fuzzy regler. For eksempel vil en "LOW" medlemsfunktion med en bell-type funktion definere et lavt temperaturinterval, mens en "MID" medlemsfunktion med en Gauss-type funktion kan bruges til at definere et melleminterval. Dette valg af funktionstype afhænger af det specifikke behov i det system, man bygger.
Når alle funktioner og variabler er defineret, kan man anvende MATLAB’s plotværktøjer, som f.eks. plotmf() og subplot(), til at visualisere de definerede medlemsfunktioner og deres relation til hinanden. Dette giver et klart billede af, hvordan systemet fungerer, og hvordan de forskellige input påvirker output.
For at sikre, at systemet er korrekt opbygget og fungerer effektivt, er det vigtigt at validere FIS’en med forskellige testinput. Ved at bruge evalfis() kan man hurtigt få en forståelse af, hvordan systemet vil reagere på nye input. Desuden kan man justere medlemsfunktionerne og intervallerne for at optimere systemets ydeevne.
Hvordan bygge og evaluere et Interval Type-2 Fuzzy Inference System (IT2 FIS)
I denne del af bogen vil vi udforske, hvordan man bygger et Interval Type-2 Fuzzy Inference System (IT2 FIS) ved hjælp af MATLAB-kode, og hvordan man implementerer et praktisk tilfælde for anvendelsen af dette system. IT2 FIS-systemer er specielt nyttige, når der er usikkerhed i data, som ikke kan beskrives af traditionelle, skarpe systemer, hvilket gør dem ideelle til komplekse, usikre eller vage scenarier.
For at opbygge et IT2 FIS starter vi med at definere input- og outputvariablerne. For eksempel har vi her to inputvariabler, "ex" og "dex", og en outputvariabel, "yit2". Hver variabel har et interval for sine værdier, og vi bruger forskellige medlemskabsfunktioner (MF’er) for at definere fuzzy sætninger, der beskrev disse input og output.
Kodeeksempel for oprettelse af et IT2 FIS:
I dette eksempel opretter vi en FIS, tilføjer input- og outputvariabler og definerer flere medlemskabsfunktioner for inputvariablen "ex". Hver af disse funktioner har forskellige parametre og beskriver forskellige fuzzy tilstande som "LN", "SN", "ZE", "SP" og "LP".
En vigtig del af arbejdet med IT2 FIS er at definere regler, der beskriver relationerne mellem input og output. Da vi har fem medlemskabsfunktioner for både input- og outputvariablerne, resulterer dette i et regelsæt med 25 kombinationer af input og output.
Kode for at tilføje regler til FIS:
Når reglerne er defineret og tilføjet til systemet, kan vi gemme FIS’en til disk og bruge den til at evaluere output for bestemte inputværdier.
Kode til evaluering af IT2 FIS:
Når du har evalueret dit system, vil du kunne se, hvordan inputvariablerne ("ex" og "dex") påvirker outputvariablen ("yit2"). Denne proces giver dig mulighed for at analysere og teste systemets ydeevne i praksis.
Når du anvender IT2 FIS i praktiske situationer, er det vigtigt at forstå, at systemet kan håndtere usikkerhed i inputdata ved at bruge intervalbaserede medlemskabsfunktioner. Denne tilgang giver en mere fleksibel og præcis model, når der er ufuldstændige eller vage data. Det betyder, at IT2 FIS kan bruges til at forbedre beslutningstagning i situationer, hvor traditionelle skarpe logiske systemer måske ikke er tilstrækkelige.
Endvidere er det værd at bemærke, at den valgte form af medlemskabsfunktioner (f.eks. sigmf eller gaussmf) og antallet af regler kan have en betydelig indvirkning på systemets nøjagtighed og ydeevne. Det er derfor vigtigt at eksperimentere med forskellige konfigurationer for at finde den bedste model for dit specifikke anvendelsesområde.
Praktisk anvendelse og overvejelser:
I virkelige applikationer er det ikke altid muligt at få perfekte, støjsvage data. IT2 FIS hjælper med at modelere systemer, der ikke kun tager højde for variation i dataene, men også for de usikkerheder, der er uundgåelige i mange typer beslutningstagning. Det er derfor en fordel at anvende denne tilgang i applikationer som klimamodellering, økonomiske forudsigelser, eller når man arbejder med komplekse tekniske systemer som f.eks. robotstyring og automatisering, hvor præcision og fleksibilitet er nødvendige.
Hvordan man arbejder med KNN og Random Forest i maskinlæring
Når man arbejder med maskinlæring, er det vigtigt at forstå de grundlæggende algoritmer og teknikker, der kan anvendes på forskellige typer af data. KNN (K-Nearest Neighbors) og Random Forest er to af de mest populære metoder til både klassifikation og regression, og de har hver deres unikke fordele afhængigt af problemets natur.
KNN-algoritmen bruger en tilgang, hvor outputtet for et givet datapunkt bestemmes ved at kigge på de nærmeste naboer i træningssættet. Som standard anvender KNN en naboindstilling på 5, hvilket er et udgangspunkt, vi også holder fast i for dette projekt. Metrikken, der anvendes til at beregne afstand mellem punkterne, er normalt den euklidiske afstand. Men i nogle tilfælde er det nyttigt at eksperimentere med forskellige vægtmetoder for at analysere, hvordan resultaterne ændres. I vores projekt arbejder vi med to vægtmetoder: ensartet og afstand. Denne opdeling giver os mulighed for at sammenligne de to metoder ved at plotte begge modeller og se forskellene i tilpasningen af dataene.
En vigtig del af at arbejde med KNN er at kunne analysere de resultater, der genereres, og dette kan gøres effektivt med en løkke. Ved at bruge en for()-løkke bygger vi to modeller baseret på de forskellige vægtmetoder og plotter begge resultaterne, så vi kan visualisere forskellene. Den funktion, der er blevet bygget til dette formål, kaldes kNNeighborsRegressor(), og den modtager tre argumenter, som bruges til at estimere modelstrukturen. Denne model kan derefter bruges til at forudsige nye data ved hjælp af predict()-funktionen. Efter at have estimeret modellen og forudsagt resultaterne for nye data, kan vi plotte disse data sammen med de oprindelige input-output data for at få et klart billede af præstationen af vores model.
For at plotte flere grafer på samme figur kan vi bruge subplot()-funktionen. Denne funktion gør det muligt at dele en figur op i flere sektioner, hvor hver sektion kan vise en forskellig graf. Når begge modeller er plotteret, kan vi også tilføje legender og labels for at gøre resultaterne lettere at forstå. For dem, der ønsker at gemme deres visualiseringer, er det muligt at eksportere billederne i forskellige formater som PNG, JPG eller TIFF. Dette kan gøres ved hjælp af saveas()-funktionen, hvor du kan definere det ønskede filformat og filnavn. Det er også vigtigt at gemme den brugerdefinerede funktion kNNeighborsRegressor.m i samme mappe som din script-fil for at sikre, at koden kan køres korrekt.
Når vi ser på Random Forest-algoritmen, ser vi en metode, der bygger på en samling af beslutningstræer, som bruges til at forudsige et kontinuerligt resultat i regression eller klassifikation. Random Forest er et eksempel på en ensemble-læringsmetode, der kombinerer flere beslutningstræer for at opnå et mere robust og præcist resultat. Ideen bag Random Forest er, at ved at bruge flere træer, der er trænet på forskellige subset af dataene, reduceres modellens varians, hvilket kan føre til en bedre generalisering.
En grundlæggende komponent i Random Forest er bagging, eller bootstrap aggregation, som indebærer gentagen tilfældig prøvetagning med tilbageførsel. Hver træningstabel får et tilfældigt udvalg af træningsdata, og et træ trænes på dette udvalg. Dette kan føre til træer, der ikke er stærkt korrelerede, hvilket forbedrer modellens præcision. Når der er dannet flere træer, kan de forudsagte resultater fra hver af træerne gennemsnitliggøres for at få et mere præcist endeligt resultat.
En anden vigtig aspekt ved Random Forest er brugen af feature-bagging. I stedet for blot at bruge hele datasættet til at træne hvert træ, anvender Random Forest en metode, hvor kun et tilfældigt udvalg af funktioner (eller features) bruges til at træne træerne. Dette hjælper med at reducere korrelationen mellem træerne og forbedrer dermed modelens præstation.
Random Forest-algoritmen har flere hyperparametre, som skal justeres, før træningen kan begynde. De vigtigste af disse omfatter størrelsen på træerne (node size), antallet af træer i skovene og antallet af funktioner, der bruges ved hver split i træningsprocessen. Ved at justere disse parametre kan man finde den bedste model for et givent datasæt.
I MATLAB kan Random Forest implementeres ved hjælp af Toolboxen for Statistik og Maskinlæring. Denne toolbox indeholder funktioner som fitcensemble() for klassifikation og fitrensemble() for regression. Ved at bruge disse funktioner kan man hurtigt opbygge Random Forest-modeller og bruge dem til at løse komplekse klassifikations- eller regressionsproblemer.
Det er vigtigt at forstå, at både KNN og Random Forest har deres styrker og svagheder, og det er ofte en god idé at eksperimentere med begge metoder for at finde den bedste løsning for et givent problem. Desuden er det vigtigt at huske, at valg af hyperparametre, som antallet af naboer i KNN eller antallet af træer i Random Forest, kan have en stor indvirkning på modellens præstation. En systematisk tilgang til at vælge og finjustere disse parametre er afgørende for at opnå de bedste resultater.
Hvordan fungerer klassificering af diabetespatienter ved hjælp af Bayesiansk statistik og ECOC-algoritmen?
Når man arbejder med klassificering af diabetespatienter ved hjælp af statistiske metoder som Bayesiansk klassificering, er det essentielt at forstå, hvordan man håndterer de relevante data og beregninger. Dette omfatter beregning af gennemsnit, varians, og anvendelse af Bayesianske principper for at kunne forudsige, om en given person lider af diabetes eller ej. I denne sammenhæng bruges en række teknikker til at håndtere både diabetes- og non-diabetesdata og derefter klassificere en patient baseret på deres specifikke målte værdier, såsom alder, glukoseniveau, blodtryk og BMI.
For at begynde med, lad os se på de indledende beregninger, som er nødvendige for at forstå datasættet. Vi har et datasæt med flere rækker og kolonner, der repræsenterer forskellige faktorer for både patienter med diabetes (Diabetes = 1) og uden diabetes (Diabetes = 0). Hver række indeholder værdier som alder, glukose, blodtryk og BMI for en individuel patient.
Beregning af gennemsnit og varians
Første skridt i enhver statistisk analyse er at beregne gennemsnittet og variansen for de forskellige parametre for både diabetes- og non-diabetesgrupperne. Gennemsnittene for hver gruppe kan beregnes ved hjælp af funktioner som mean() i MATLAB, mens variansen kan beregnes ved at tage summen af de kvadrerede afvigelser fra gennemsnittet og derefter dividere med antallet af observationer.
For at illustrere dette, hvis vi betragter diabetikernes data (Diabetes = 1) og non-diabetikernes data (Diabetes = 0), kan vi beregne gennemsnit og varians for hver parameter. For eksempel, for diabetespatienterne (Diabetes = 1), får vi gennemsnittet af hver parameter (f.eks. alder, glukose, BP, BMI) og derefter beregner vi variansen for hver parameter. Dette giver os vigtige statistiske mål, som vil blive brugt til at forudsige sandsynligheden for diabetes baseret på en ny patientdata.
Bayesiansk Klassifikation
Når gennemsnit og varians er beregnet, kan vi bruge Bayes' teorem til at klassificere en patient. Bayes' teorem giver os en metode til at beregne den betingede sandsynlighed, dvs. sandsynligheden for en given parameter givet, at en person har diabetes (Diabetes = 1) eller ikke har diabetes (Diabetes = 0). For hver parameter som alder, glukose, blodtryk og BMI, beregnes sandsynligheden for, at en patient har diabetes, ved at bruge den relevante normalfordelingsfunktion.
For eksempel, ved at bruge en normalfordeling med de tidligere beregnede gennemsnit og varians, kan vi beregne sandsynligheden for en given værdi for hver parameter, som det ses i formlerne:
Dette gentages for hver af de andre parametre: glukose, blodtryk og BMI. Derefter multipliceres de beregnede sandsynligheder for at få den samlede sandsynlighed for, at en patient har diabetes eller ikke har diabetes. Ved at sammenligne sandsynlighederne for begge scenarier (Diabetes = 1 og Diabetes = 0), kan vi forudsige, hvilken tilstand den pågældende patient sandsynligvis befinder sig i.
Klassificering og Test af Modellen
Når modellerne er oprettet og parametrene beregnet, kan vi teste dem ved at anvende dem på et nyt datasæt, som ikke er blevet brugt til træning. Denne test viser os, om de forudsigelser, som modellen laver, er korrekte. Ved at anvende formlerne og koden, som beskrevet tidligere, kan vi evaluere, om den beregnede sandsynlighed for diabetes er højere end for non-diabetes. Hvis sandsynligheden for Diabetes = 1 er højere, klassificeres personen som diabetiker.
I det specifikke eksempel, vi har gennemgået, viser testresultaterne, at sandsynligheden for diabetes (8.6421e-08) er højere end for non-diabetes (4.6333e-08), hvilket betyder, at patienten sandsynligvis har diabetes.
ECOC (Error-Correcting Output Code)
For mere komplekse klassifikationsproblemer, som f.eks. multiklasseklassifikation, hvor der er flere mulige udgangsklasser, kan en metode som ECOC (Error-Correcting Output Code) anvendes. ECOC opdeler et multiclass-problem i flere binære klassifikationsopgaver. Dette gør det muligt at bruge simple binære klassifikatorer, som f.eks. den tidligere beskrevne Bayesianske klassifikator, til at håndtere mere komplekse situationer.
ECOC anvender to hovedmetoder til at omdanne multiklasseklassifikationer til binære klassifikationer: One-vs-Rest (OvR) og One-vs-One (OvO). I OvR tages hvert klasseproblem separat og sammenlignes mod resten af klasserne, mens OvO fokuserer på at sammenligne hver par af klasser.
Konklusion
For at opsummere: klassificering af diabetespatienter ved hjælp af statistiske metoder som Bayesiansk statistik og ECOC kræver nøje beregning af gennemsnit, varians og sandsynligheder for hver parameter. Gennem en systematisk proces, der anvender Bayes' teorem, kan vi præcist forudsige, om en given patient har diabetes eller ej. I tilfælde af multiklasseklassifikationer kan teknikker som ECOC anvendes for at omdanne problemet til flere binære opgaver, hvilket gør det muligt at anvende en simpel klassifikationsmetode effektivt på komplekse datasæt.
Hvordan behandles og klassificeres lyde i maskinlæring?
I arbejdet med lydsignaler i maskinlæring og signalbehandling er det ofte nødvendigt at forstå, hvordan vi kan analysere og udtrække nyttige funktioner fra lyden, så den kan klassificeres korrekt. Lydsignaler, især talesignaler, er ikke stationære, hvilket betyder, at deres spektrum ændrer sig over tid. For at gøre maskinlæringsopgaver lettere og mere overskuelige kan disse ikke-stationære signaler dog ofte tilnærmes som stationære, når de analyseres over små tidsintervaller. Typisk anses talesignaler for at være stationære, når de ses over tidsintervaller på omkring 30 ms. Dette gør det muligt at karakterisere talen ved at udtrække funktioner fra analysevinduer på 30 ms, som ændres over tid.
En vigtig metode til behandling af lyde er at konvertere de analoge signaler til et format, der er lettere at analysere. Analoge signaler betyder, at lydens amplitude er en kontinuerlig funktion over tid. Dog er det ikke altid nemt at analysere disse signaler direkte i tidsdomænet. I stedet omdannes de til frekvensdomænet, hvor de repræsenteres som et spektrum. Flere populære algoritmer anvendes til at foretage denne konvertering, herunder Fourier Transformation (FT), Fast Fourier Transformation (FFT), Short-Time Fourier Transformation (STFT) og Discrete Fourier Transformation (DFT). Disse algoritmer gør det muligt at forstå og analysere signalets indhold i forhold til de forskellige frekvenser, der er til stede i lyden.
Ud over disse konverteringsalgoritmer er der også andre velkendte metoder til at behandle lydsignaler, som Mel-Frequency Cepstral Coefficients (MFCCs) og Band Energy Ratio (BER). Begge disse metoder anvendes bredt i talegenkendelse og musikklassifikation, og de fortjener en nærmere undersøgelse.
Mel-Frequency Cepstral Coefficients (MFCCs)
Mel-Frequency Cepstrum (MFC) er en repræsentation af det kortvarige powerspektrum af en lyd baseret på en lineær cosinustransformation af et logaritmisk powerspektrum, hvor frekvenserne er omdannet til en ikke-lineær mel-skala. Mennesker opfatter lyd logaritmisk, hvilket betyder, at vi er bedre til at skelne forskelle i lavere frekvenser end i højere frekvenser. For eksempel vil vi let kunne adskille 500 Hz fra 1000 Hz, men vi vil næppe kunne skelne mellem 10.000 Hz og 10.500 Hz, selvom afstanden mellem de to par er den samme. Dette fænomen er grunden til, at mel-skalaen blev introduceret, som er en logaritmisk skala, hvor lige store afstande på skalaen repræsenterer de samme perceptuelle afstande. Omregningen fra frekvens (f) til mel-skala (m) er givet ved formlen:
Når et spektrum omdannes til mel-skalaen, opnår vi det, der kaldes en mel-spektrogram. Cepstrum, som er et spektrum af logaritmen af et spektrum i tidsdomænet, afslører, hvordan spektralbånd ændrer sig over tid. Dette spektrum befinder sig i en ny domæne, der kaldes quefrency (en omdannelse af ordet frequency), og de koefficienter, der udgør dette spektrum, kaldes Mel-Frequency Cepstral Coefficients (MFCCs).
Band Energy Ratio (BER)
Band Energy Ratio (BER) er et mål for forholdet mellem energien i forskellige frekvensbånd, som for eksempel mellem lavere og højere frekvenser. Dette forhold bruges til at beskrive styrken af oscillationer i signalet og bruges ofte til at skelne mellem musik og tale. BER beregnes som:
BER bruges især i musik-tale-diskrimination og musikklassifikation, hvor det giver information om, hvordan dominansen af de lavere frekvenser kan hjælpe med at klassificere signalet korrekt.
MATLAB Klasser og Funktioner til Lydsignal Klassifikation
MATLAB tilbyder et væld af klasser og funktioner, der understøtter klassifikation af lydsignaler, især inden for Deep Learning Toolbox™ og Audio Toolbox™. Nogle af de mest populære funktioner og apps inkluderer:
-
classifySound(): Denne funktion bruges til at klassificere ukendte lydsignaler baseret på en trænet model, som YAMNet. Det er vigtigt, at de ukendte lydsignaler er en del af de signaler, der blev brugt til at træne modellen.
-
audioFeatureExtractor: En klasse, som bruges til at udtrække og organisere funktioner fra lydsignaler. Denne klasse opretter et objekt, der gør det muligt at samle og organisere de nødvendige funktioner for at lette deres udvælgelse og analyse.
-
Signal Labeler: En app, der hjælper med at konfigurere og mærke lydsignaler ved at vælge interessante punkter og områder i signalet. Denne funktion er især nyttig, når du arbejder med et stort datasæt af lydfiler og har brug for at mærke dem korrekt.
-
audioDatastore: En klasse, der bruges til at håndtere lydsignaler i større mængder og organisere dem i en liste, som gør det lettere at arbejde med store datamængder i din modeltræning.
Praktisk Anvendelse – Digitallydklassifikation
En praktisk anvendelse af multiclass klassifikationsalgoritmer til lydsignaler kan være at klassificere talelyde. For eksempel kan et projekt bygges, der bruger datasættet "Free Spoken Digit Dataset" (FSDD), som indeholder talelyde fra 0 til 9. Hver lydfil i dette datasæt kan bruges til at træne en model til at klassificere digitalsignaler. Ved hjælp af funktionerne i MATLAB kan du organisere disse lydfiler, udtrække funktioner og bruge dem til at træne en prædiktiv model, der kan klassificere digitalsignaler korrekt.
Det er vigtigt at forstå, at den rette udtrækning af funktioner og korrekt forberedelse af data er essentiel for succesfuld lydklassifikation. Uden en grundig forberedelse og korrekt håndtering af lydens spektrum vil selv de mest avancerede maskinlæringsmodeller kæmpe med at levere præcise resultater.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский