Hoofdcomponentenanalyse: 4 stappen
Hoofdcomponentenanalyse: 4 stappen
Anonim
Hoofdcomponentenanalyse
Hoofdcomponentenanalyse

Hoofdcomponentenanalyse is een statistische methode die een reeks mogelijk gecorreleerde variabelen converteert naar een reeks lineair niet-gecorreleerde waarden met behulp van orthogonale transformaties. In eenvoudige bewoordingen, gegeven een dataset met meerdere dimensies, helpt het het aantal dimensies te verminderen, waardoor de gegevens gemakkelijker leesbaar zijn.

Stap 1: Originele plannen

Ik kwam in deze klas met het idee dat ik een algoritme wilde begrijpen en hopelijk schrijven dat gezichtsherkenning zou kunnen uitvoeren wanneer het wordt geleverd met afbeeldingen. Ik had geen eerdere ervaring of kennis van iets dat met gezichtsherkenning te maken had en had geen idee hoe moeilijk het is om zoiets te bereiken. Na een gesprek met professor Malloch realiseerde ik me dat ik veel dingen moet leren voordat ik de taak die ik uiteindelijk van plan was te bereiken, volledig kan begrijpen.

Na een beetje onderzoek besloot ik uiteindelijk dat ik meer dan alles nodig had om lineaire algebra en enkele basisprincipes van machine learning te leren en besloot ik PCA (hoofdcomponentenanalyse) te worden als mijn doel voor deze klas.

Stap 2: Onderzoek

Onderzoek
Onderzoek

De eerste stap was om de bibliotheek te bezoeken en een boek te vinden dat me kennis liet maken met machine learning en meer specifiek beeldverwerking. Dit bleek veel moeilijker dan ik dacht en ik heb er uiteindelijk niet veel aan gehad. Ik besloot toen een vriend te vragen die in het Vision Lab werkte, die me vroeg om naar lineaire algebra te kijken en meer specifiek naar eigenvectoren en eigenwaarden. Ik had enige ervaring met lineaire algebra van een klas die ik in mijn tweede jaar had gevolgd, maar begreep niet hoe eigenvectoren of eigenwaarden nuttig konden zijn bij het omgaan met afbeeldingen. Toen ik meer onderzocht, begreep ik dat afbeeldingen niets anders waren dan enorme datasets en daarom konden worden behandeld als matrices en het werd me een beetje duidelijker waarom eigenvectoren relevant waren voor wat ik aan het doen was. Op dit punt besloot ik dat ik moest leren hoe ik afbeeldingen moest lezen met python, omdat ik python voor mijn project ging gebruiken. Aanvankelijk begon ik met CV2.imread om de afbeeldingen te lezen, maar dat bleek erg traag te zijn en daarom besloot ik glob en PIL.image.open te gebruiken om dit te doen, omdat dit veel sneller is. Dit proces op papier lijkt relatief weinig tijdrovend, maar kostte eigenlijk veel tijd omdat ik moest leren hoe ik verschillende bibliotheken moest installeren en importeren in PyCharm (IDE) en vervolgens de documentatie online voor elke bibliotheek moest doorlezen. Terwijl ik dit deed, leerde ik ook hoe ik pip install-instructies in de opdrachtprompt moest gebruiken.

Hierna was de volgende stap uitzoeken wat ik precies wilde doen en leren op het gebied van beeldverwerking en in eerste instantie was ik van plan om sjablonen te matchen, maar terwijl ik ernaar zocht, leerde ik over PCA en vond het interessanter, dus besloot ik om ga in plaats daarvan met PCA. De eerste term die steeds weer opdook was het K-NN-algoritme (K-dichtstbijzijnde buur). Dit was mijn allereerste blootstelling aan een machine learning-algoritme. Ik leerde over de trainings- en testdata en wat het 'trainen' van een algoritme betekent. Het begrijpen van het K-NN-algoritme was ook een uitdaging, maar het was zeer bevredigend om eindelijk te begrijpen hoe het werkt. Ik ben momenteel bezig om de code voor K-NN te laten werken en ik ben bijna klaar.

Stap 3: Geconfronteerde moeilijkheden en geleerde lessen

De eerste grote moeilijkheid was de omvang van het project zelf. Dit was meer een onderzoeksgerichte dan een fysieke. Naarmate de weken verstreken, keek ik soms naar de vooruitgang die mijn leeftijdsgenoten boekten en voelde dat ik niet genoeg deed of dat ik niet snel genoeg vooruitgang boekte en dat was soms erg demotiverend. Praten met professor Malloch en mezelf geruststellen dat ik inderdaad dingen leerde die heel nieuw voor me waren, hielp me om door te gaan. Een ander probleem was dat theoretische dingen kennen en toepassen twee verschillende dingen zijn. Hoewel ik wist wat ik moest doen, was het eigenlijk een ander verhaal om het in python te coderen. Dit is waar het online lezen van documentatie en het vragen aan vrienden die er meer van wisten, enorm hielpen om eindelijk een actieplan te bedenken.

Persoonlijk denk ik dat het hebben van een grotere bibliotheek met boeken en documenten bij M5 mensen kan helpen die aan projecten werken. Ook het realtime digitaal vastleggen van de projecten die door studenten worden uitgevoerd, zodat andere studenten en medewerkers ernaar kunnen kijken en mee kunnen doen als het hen interesseert, is een goed idee voor M5.

Nu het project ten einde loopt, heb ik zoveel geleerd in zo'n korte tijd. Ik heb een zeer praktische kennis van machine learning opgedaan en heb het gevoel dat ik de eerste stappen heb gezet om er meer bij betrokken te raken. Ik heb me gerealiseerd dat ik van computervisie houd en dat ik dit misschien zelfs in de toekomst wil nastreven. Het belangrijkste is dat ik heb geleerd wat PCA is, waarom het zo belangrijk is en hoe ik er gebruik van kan maken.

Stap 4: Volgende stappen

Voor mij was dit slechts het oppervlak van iets veel groters en iets dat heel belangrijk is in de wereld van vandaag, machinaal leren. Ik ben van plan om in de nabije toekomst cursussen te volgen die te maken hebben met machine learning. Ik ben ook van plan om mijn weg naar gezichtsherkenning op te bouwen, want daar is dit hele project begonnen. Ik heb ook ideeën voor een beveiligingssysteem dat gebruikmaakt van combinatiefuncties (waarvan één het gezicht van de persoon is) om het echt veilig te maken en dit is iets waar ik in de toekomst aan wil werken als ik een breder begrip van dingen heb.

Voor iedereen zoals ik die geïnteresseerd is in machine learning en beeldverwerking maar geen eerdere ervaring heeft, raad ik ten zeerste aan om eerst lineaire algebra te leren en te begrijpen, samen met statistieken (vooral distributies). Ten tweede raad ik aan om Pattern Recognition and Machine Learning van Christopher M. Bishop te lezen. Dit boek heeft me geholpen de basis te begrijpen van waar ik aan begon en het is zeer goed gestructureerd.