Kreativt missbruk av RapidMiner
En av de roligaste evenemangen på RapidMiner Wisdom-konferensen är den direktsända tävlingen om design av processer för prediktiv analys ”Who Wants to be a Data Miner?”. I denna tävling måste deltagarna inom några minuter utforma RapidMiner-processer för ett givet mål. Uppgifterna är relaterade till prediktiv analys och dataanalys i allmänhet, men är ganska ovanliga. Faktum är att de flesta av utmaningarna frågar efter saker som RapidMiner aldrig var tänkt att göra.
Under RapidMiner Wisdom 2016 i New York City hade vi återigen två uppgifter förberedda för publiken. Tre modiga tävlande kämpade mot varandra och klockan för att hitta rätt lösning (eller åtminstone något som ligger tillräckligt nära). Den första uppgiften i år var:
Skapa den fullständiga texten till ”99 Bottles of Beer on the Wall”
Enligt Wikipedia är ”99 Bottles of Beer en anonym amerikansk folksång från mitten av 1900-talet. Det är en traditionell sång i både USA och Kanada. Den är populär att sjunga på långa resor, eftersom den har ett mycket repetitivt format som är lätt att memorera och kan ta lång tid att sjunga.”
Nja, ja. Vissa säger att det finns många problem med denna sång men detta är – även om det är rolig läsning – inte ämnet för detta inlägg. (Förresten har sången dykt upp många gånger i populärkulturen också: kanske mest anmärkningsvärt, åtminstone för vissa, i spelet Monkey Island.)
Hur som helst, så här går sången till:
99 flaskor öl på väggen, 99 flaskor öl.
Take one down and pass it around, 98 bottles of beer on the wall.
98 flaskor öl på väggen, 98 flaskor öl.
Take one down and pass it around, 97 flaskor öl på väggen.
97 flaskor öl på väggen, 97 flaskor öl.
Take one down and pass it around, 96 flaskor öl på väggen.
…
1 flaska öl på väggen, 1 flaska öl.
Take one down and pass it around, 0 bottles of beer on the wall.
Den fullständiga texten finns här, men jag tror att du har fått uppfattningen.
Hur kan vi då lösa uppgiften ovan med RapidMiner?
Låt oss börja med en skärmdump av lösningen först:
Vi börjar med operatören ”Generate Data” och genererar ett slumpmässigt dataset med endast 1 kolumn och 100 exempel (gör lämpliga inställningar i operatörens parametrar). Detta är kanske inte det mest eleganta sättet men ett av de enklaste sätten i RapidMiner att få en datamängd med en specifik struktur och storlek. Som nästa steg behöver vi nu siffror från 1 till 100 i en extra kolumn. Återigen finns det flera sätt att uppnå detta, men det enklaste är förmodligen att använda operatören ”Generate ID” som gör just detta. Vi kan nu använda ”Select Attributes” och ta bort de kolumner som ursprungligen genererades av ”Generate Data”, dvs. vi behåller bara vår nya kolumn ”id”. Resultatet är en datamängd med 100 rader och siffrorna 1 till 100 i en kolumn som heter ”id”.
Nu sker all logik i nästa operatör: ”Generera attribut”. Huvudproblemet som måste lösas är hur vi omvandlar sekvensen av siffror från 1 till 100 till en sekvens från 99 till 0? Det är enkelt: vi kan bara generera ett nytt värde genom att subtrahera det aktuella ”id” i varje rad från 100. Samtidigt lägger vi till resten av texterna runt dessa siffror. Så här måste du ställa in parametrarna för ”Generate Attributes” för att uppnå detta:
Nu kan du till och med sammanfoga alla dessa nya kolumner till en enda om du vill. Jag överlåter det till dig att räkna ut hur. Slutresultatet efter att ha kört processen ser då ut som följande skärmdump (visar bara början):
Om du kör processen själv, kolla in den sista raden också. Jag medger att vi skulle kunna hantera detta lite bättre eftersom de skapade texterna slutar på: ”0 flaskor öl på väggen, 0 flaskor öl. Ta ner en och skicka runt den. -1 flaskor öl på väggen.” Tja, det är inget fel med -1 flaskor öl för matematiker och fysiker men vissa IT-system kanske inte gillar negativa antal objekt.
Att använda RapidMiner för uppgifter som denna är förstås lite, ja, konstigt. Men det visar också hur flexibelt och kraftfullt det visuella tillvägagångssättet i RapidMiner faktiskt är. Andra har skapat lösningar i praktiskt taget alla programmeringsspråk på jorden, vissa kortare och vissa längre än andra. Men jag skulle alltid föredra RapidMiner-lösningen framför koden hos de flesta av dem.
Nedan följer XML för hela processen. Du kan spara den i en godtycklig fil på ditt system och använda ”File -> Import Process…” för att få in den i RapidMiner.
Har du kul att prova detta!