Vraag:
Functieselectie voor "definitief" model bij het uitvoeren van kruisvalidatie in machine learning
danielsbrewer
2010-09-02 15:25:42 UTC
view on stackexchange narkive permalink

Ik raak een beetje in de war over het selecteren van functies en machine learning en ik vroeg me af of je me zou kunnen helpen. Ik heb een microarray-gegevensset die is ingedeeld in twee groepen en duizenden functies heeft. Mijn doel is om een ​​klein aantal genen (mijn kenmerken) (10-20) in een handtekening te krijgen die ik in theorie op andere datasets kan toepassen om die samples optimaal te classificeren. Omdat ik niet zoveel samples heb (<100), gebruik ik geen test- en trainingsset maar gebruik ik de kruisvalidatie met Leave-one-out om de robuustheid te helpen bepalen. Ik heb gelezen dat men featureselectie moet uitvoeren voor elke splitsing van de samples, dwz

  1. Selecteer een sample als testset
  2. Voer op de overige samples feature-selectie uit
  3. Pas het algoritme voor machine learning toe op de resterende voorbeelden met behulp van de geselecteerde functies
  4. Test of de testset correct is geclassificeerd
  5. Ga naar 1.

Als je dit doet, zou je elke keer andere genen kunnen krijgen, dus hoe kom je aan je "laatste" optimale genclassificator? d.w.z. wat is stap 6.

Wat ik bedoel met optimaal is de verzameling genen die eventuele verdere studies zouden moeten gebruiken. Stel dat ik een gegevensset voor kanker / normaal heb en dat ik de top 10 genen wil vinden die het tumortype zullen classificeren volgens een SVM. Ik zou graag de set genen plus SVM-parameters willen weten die kunnen worden gebruikt in verdere experimenten om te zien of het kan worden gebruikt als een diagnostische test.

Ik zou voor de volledige openbaarmaking moeten zeggen dat ik dit al op de bioconductorlijst heb gepost
Geef hier een samenvatting van eventuele bioconductorresultaten.
Zes antwoorden:
#1
+43
Dikran Marsupial
2010-09-02 22:53:16 UTC
view on stackexchange narkive permalink

In principe:

Maak uw voorspellingen met behulp van een enkel model dat getraind is op de volledige dataset (er is dus maar één set features). De kruisvalidatie wordt alleen gebruikt om de voorspellende prestaties te schatten van het enkele model dat is getraind op de hele dataset. Het is van vitaal belang bij het gebruik van kruisvalidatie dat u in elke vouw de hele procedure herhaalt die is gebruikt om in het primaire model te passen, omdat u anders een substantiële optimistische vooringenomenheid in prestaties kunt krijgen.

Om te zien waarom dit gebeurt , beschouw een binair classificatieprobleem met 1000 binaire kenmerken maar slechts 100 gevallen, waarbij de gevallen en kenmerken allemaal puur willekeurig zijn, dus er is geen enkele statistische relatie tussen de kenmerken en de gevallen. Als we een primair model trainen op de volledige dataset, kunnen we altijd nul fouten op de trainingsset bereiken, omdat er meer functies zijn dan cases. We kunnen zelfs een subset van "informatieve" kenmerken vinden (die toevallig toevallig gecorreleerd zijn). Als we vervolgens kruisvalidatie uitvoeren met alleen die functies, krijgen we een schatting van de prestaties die beter is dan willekeurig gissen. De reden is dat er in elke vouw van de kruisvalidatieprocedure enige informatie is over de uitgestelde gevallen die voor het testen zijn gebruikt, aangezien de kenmerken werden gekozen omdat ze goed waren om te voorspellen, allemaal, inclusief de voorgehouden. Het werkelijke foutenpercentage is natuurlijk 0,5.

Als we de juiste procedure toepassen en functieselectie uitvoeren in elke vouw, is er geen informatie meer over de vastgehouden gevallen bij de keuze van de functies die worden gebruikt in die vouw. Als je de juiste procedure gebruikt, krijg je in dit geval een foutpercentage van ongeveer 0,5 (hoewel het een beetje zal variëren voor verschillende realisaties van de dataset).

Goede papers om te lezen zijn:

Christophe Ambroise, Geoffrey J. McLachlan, "Selectiebias in genextractie op basis van microarray genexpressiegegevens", PNAS http://www.pnas.org/content/99/10/ 6562. abstract

wat zeer relevant is voor het OP en

Gavin C. Cawley, Nicola LC Talbot, "On Over-fitting in Model Selection and Subsequent Selection Bias in Performance Evaluation", JMLR 11 (juli): 2079-2107, 2010 http://jmlr.csail.mit.edu/papers/v11/cawley10a.html

wat aantoont dat hetzelfde gemakkelijk kan optreden bij modelselectie (bijv. het afstemmen van de hyperparameters van een SVM, die ook herhaald moeten worden in elke iteratie van de CV-procedure).

In de praktijk:

Ik zou het gebruik van Bagging aanraden, en de out-of-bag-fout gebruiken om de prestaties te schatten. Je krijgt een commissiemodel met veel functies, maar dat is eigenlijk een goede zaak. Als u slechts één model gebruikt, is de kans groot dat u het criterium voor het selecteren van kenmerken overschrijdt en uiteindelijk een model krijgt dat slechtere voorspellingen geeft dan een model dat een groter aantal kenmerken gebruikt.

Alan Millers boek over subset selectie bij regressie (Chapman en Hall monografieën over statistiek en toegepaste waarschijnlijkheid, deel 95) geeft het goede advies (pagina 221) dat als voorspellende prestaties het belangrijkste zijn, selectie, gebruik in plaats daarvan gewoon nokregressie. En dat staat in een boek over subset-selectie !!! ; o)

#2
+41
chl
2010-09-02 15:46:12 UTC
view on stackexchange narkive permalink

Dit is een zeer goede vraag die ik zelf tegenkwam bij het werken met SNP-gegevens ... En ik vond geen duidelijk antwoord in de literatuur.

Of je nu LOO of K-fold CV gebruikt, je zult eindigen met verschillende features aangezien de kruisvalidatie iteratie de meest buitenste lus moet zijn, zoals je zei. U kunt een soort stemprogramma bedenken dat de n-vectoren van functies die u van uw LOO-cv hebt gekregen, zou beoordelen (kan me de paper niet herinneren, maar het is de moeite waard om het werk van Harald Binder of Antoine Cornuéjols). Als er geen nieuw testmonster is, wordt meestal gedaan om het ML-algoritme opnieuw toe te passen op het hele monster zodra u de optimale kruisvalidatieparameters hebt gevonden. Maar als u op deze manier te werk gaat, kunt u er niet voor zorgen dat er geen overfitting is (aangezien het monster al werd gebruikt voor modeloptimalisatie).

Of u kunt ingesloten methoden gebruiken die u voorzien van een rangschikking van functies via een meting van wisselend belang, bijv zoals in Random Forests (RF). Aangezien kruisvalidatie is opgenomen in RF's, hoeft u zich geen zorgen te maken over het $ n \ ll p $ geval of de vloek van dimensionaliteit. Hier zijn mooie artikelen over hun toepassingen in genexpressieonderzoeken:

  1. Cutler, A., Cutler, D.R., en Stevens, J.R. (2009). Tree-Based Methods, in High-Dimensional Data Analysis in Cancer Research , Li, X. en Xu, R. (eds.), Pp. 83-101, Springer.
  2. Saeys, Y., Inza, I., en Larrañaga, P. (2007). Een overzicht van kenmerkselectietechnieken in bio-informatica. Bioinformatics , 23 (19) : 2507-2517.
  3. Díaz-Uriarte, R., Alvarez de Andrés, S. (2006). Genenselectie en classificatie van microarray-gegevens met behulp van willekeurig bos. BMC Bioinformatics , 7:3.
  4. Diaz-Uriarte, R. (2007). GeneSrF en varSelRF: een webgebaseerde tool en R-pakket voor genselectie en classificatie met behulp van willekeurig bos. BMC Bioinformatics , 8 : 328

Aangezien je het over SVM hebt, kun je zoeken naar bestrafte SVM .

Dank daarvoor. Ik ben niet bepaald verkocht op SVM, maar gebruik dat alleen als voorbeeld. Dus als je willekeurige bomen hebt gebruikt, hoef je geen kruisvalidatie uit te voeren? Is dat juist.
ja, RF's bevatten een willekeurige steekproef van variabelen (typisch $ \ sqrt {p} $) bij het kweken van een boom en elke boom is gebaseerd op een boostraped steekproef van de individuen; variabel belang wordt berekend op zogenaamde out-of-bag-samples (die niet worden gebruikt voor het bouwen van de beslissingsboom) met behulp van een permutatietechniek. Het algoritme wordt herhaald voor m bomen (standaard m = 500) en de resultaten worden gemiddeld om onzekerheid op boomniveau te compenseren (boosting).
Het is belangrijk dat het Random Forest wordt genoemd en niet Random Trees; u heeft mogelijk problemen met Google.
+1, goed antwoord en toevallig voor mij - veel dank voor de papieren verwijzingen, vooral de recensie.
Met voldoende gegevens, zou het niet het beste zijn om een testset uit te voeren, loocv uit te voeren op de trainingsset om de modelparameters te optimaliseren, de hele treinset aan te passen (en dat de 'laatste' classificator te noemen), en vervolgens het uiteindelijke model te evaluerenop de testset?
Ik denk dat dit een "genest" type kruisvalidatie is, maar toch is dit oké.Dit is tenminste de weg van de cursus machine learning van Andrew Ngs.
#3
+17
Joris Meys
2010-09-02 16:29:48 UTC
view on stackexchange narkive permalink

Om toe te voegen aan chl: Bij gebruik van ondersteuningsvectormachines is een sterk aanbevolen strafmethode het elastische net. Deze methode verkleint de coëfficiënten naar nul en behoudt in theorie de meest stabiele coëfficiënten in het model. Aanvankelijk werd het gebruikt in een regressiekader, maar het kan gemakkelijk worden uitgebreid voor gebruik met ondersteuningsvectormachines.

De originele publicatie: Zou en Hastie (2005): Regularisatie en variabele selectie via het elastische net. J.R. Statist.Soc. B, 67-2, pp.301-320

Elastic net for SVM: Zhu & Zou (2007): Variable Selection for the Support Vector Machine: Trends in Neural Computation, hoofdstuk 2 (Editors: Chen en Wang)

verbeteringen op het elastische net Jun-Tao en Ying-Min (2010): een verbeterd elastisch net voor kankerclassificatie en genenselectie: Acta Automatica Sinica, 36-7, pp.976-981

#4
+10
Aniko
2010-09-02 20:56:38 UTC
view on stackexchange narkive permalink

Als stap 6 (of 0) voer je het feature detectie-algoritme uit op de gehele dataset.

De logica is de volgende: je moet kruisvalidatie zien als een methode om de eigenschappen van de procedure die u gebruikt om de functies te selecteren. Het beantwoordt de vraag: "als ik wat gegevens heb en deze procedure voer, wat is dan het foutenpercentage bij het classificeren van een nieuw monster?". Als u het antwoord eenmaal weet, kunt u de procedure (functieselectie + ontwikkeling van classificatieregels) op de gehele dataset toepassen. Mensen houden van weglaten, omdat de voorspellende eigenschappen meestal afhangen van de steekproefomvang, en $ n-1 $ meestal dicht genoeg bij $ n $ ligt, maakt niet veel uit.

Ik denk dat er nog steeds een generalisatieprobleem is bij het gebruik van dezelfde steekproef (1) om de classificatie / voorspellingsprestaties van de classificator te beoordelen terwijl de parameters worden afgesteld (uiteindelijk, met functieselectie) en (2) om op zijn beurt de voorspellingen over de hele dataset te gebruiken. In feite doorbreek je de controle die werd uitgeoefend op overfitting die werd uitgewerkt met behulp van kruisvalidatie. Hastie et al. geef een mooie illustratie van CV-valkuilen, in het bijzonder. tov. feature selectie, in hun ESL-boek, § 7.10.2 in de 2e editie.
@chl: wie zei er iets over het afstemmen van parameters? Als er aanvullende dingen worden uitgevoerd, moeten deze ook tijdens de kruisvalidatie worden herhaald. Het duidelijk wijzigen van uw algoritme totdat u goede kruiselings gevalideerde foutpercentages krijgt, is "valsspelen". Trouwens, ik ben het ermee eens dat kruisvalidatie, vooral weglaten, niet zo geweldig is.
het is niet vals spelen, aangezien CV je de benadering laat zien hoe het algoritme zal presteren op nieuwe gegevens. Je hoeft er alleen zeker van te zijn dat je op basis van de hele set nog geen beslissing hebt genomen (dit is een lek van informatie over de structuur van de volledige set, dus het kan meteen alle treinonderdelen vertekenen).
@mbq - Ankino heeft gelijk, het afstemmen van je model om een ​​CV-statistiek te minimaliseren is "vals spelen" en de CV-statistiek van het uiteindelijke model zal een substantiële optimistische inslag hebben. De reden hiervoor is dat de CV-statistiek een niet-verwaarloosbare variantie heeft (aangezien deze wordt geëvalueerd op basis van een eindige set gegevens) en dus als u de CV-statistiek direct optimaliseert, kunt u deze overdrijven en kunt u eindigen met een model dat generaliseert minder goed dan degene waarmee u bent begonnen. Voor een demonstratie hiervan, in een machine learning-context, zie http://jmlr.csail.mit.edu/papers/v11/cawley10a.html Oplossing: gebruik geneste XVAL
#5
+1
FMZ
2012-02-02 08:49:28 UTC
view on stackexchange narkive permalink

Dit is hoe ik functies selecteer. Stel dat er op basis van bepaalde kennis 2 modellen te vergelijken zijn. Model A gebruikt kenmerken nr. 1 tot nr. 10. Model B gebruikt nr. 11 tot nr. 20. Ik zal LOO CV toepassen op model A om de prestaties buiten de steekproef te krijgen. Doe hetzelfde met model B en vergelijk ze.

#6
-1
shabbychef
2010-09-03 04:05:56 UTC
view on stackexchange narkive permalink

Ik ben niet zeker van classificatieproblemen, maar in het geval van functieselectie voor regressieproblemen, toonde Jun Shao aan dat Leave-One-Out CV asymptotisch inconsistent is, dwz de kans dat de de juiste subset van kenmerken convergeert niet naar 1 naarmate het aantal samples toeneemt. Vanuit praktisch oogpunt beveelt Shao een Monte-Carlo-kruisvalidatie of een weglatingsprocedure aan.

Oh mijn, alweer; heb je de titel van dit artikel gelezen?
Ok, voor alle duidelijkheid - ik zeg niet dat LOOCV een goed idee is voor een groot aantal objecten; uiteraard niet, maar Shao is hier niet van toepassing. In de meeste gevallen gelden de regels voor LM's inderdaad niet voor ML.
Het is ook de vraag of assymptotische resultaten praktisch bruikbaar zijn bij het bekijken van datasets met een groot aantal kenmerken en relatief weinig patronen. In dat geval is de variantie van de procedure waarschijnlijk van groter praktisch belang dan vooringenomenheid of consistentie. De belangrijkste waarde van LOOCV is dat het voor veel modellen tegen verwaarloosbare rekenkosten kan worden geïmplementeerd, dus hoewel het een grotere variantie heeft dan bijvoorbeeld bootstrapping, is het misschien de enige haalbare benadering binnen het beschikbare rekenbudget. Daarom gebruik ik het, maar ik gebruik iets anders voor prestatie-evaluatie!


Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 2.0-licentie waaronder het wordt gedistribueerd.
Loading...