Muzyka i data science

Czytanie zajmie Ci około 20 minut

Każdego dnia pojawia się nowa muzyka, w wielu różnych gatunkach. Jak wybrać to, czemu warto poświęcić czas?

Dodatkowo dowiemy się jakie znaczenie ma uczciwe przygotowanie danych.

Zdjęcie na okładce: Franck V. on Unsplash

Gdybym miał powiedzieć co lubię najbardziej bez wątpienia byłaby to muzyka. Słucham dużo, nie wyobrażam sobie życia w ciszy. Ale mimo dostępu do nieskończonych (powiedzmy) zasobów muzycznych chociażby poprzez Spotify zauważyłem, że zamykam się w bańce już znanych wykonawców i utworów. A ja lubię odkrywać nowe dźwięki, tylko nie mam czasu (trochę też zbyt na to jestem leniwy) na szukanie nieznanych utworów czy wykonawców. Po co mam poświęcać kupę czasu na szukanie czegoś co mi się nie spodoba?

Mechanizmy Spotify budujące co tydzień listy może ci się spodoba po jakimś czasie przestały podrzucać nowe rzeczy i na 30 utworów na liście mam na przykład 20 oznaczonych jako ulubione. Co to za odkrywanie? Może więc trzeba zabrać się za to samodzielnie?

Cel: automat, który z użyciem metod machine learning zbuduje dla nas w Spotify listę utworów, które powinny nam się spodobać.

Wykorzystamy do tego API Spotify, Pythona i pakiet spotipy.

W pierwszej kolejności potrzebujemy klucza API (jak to zwykle bywa). Zdobywamy go budując odpowiednią aplikację. Cały proces jest dobrze opisany w dokumentacji pakietu Spotipy, a wynikiem są dwa ciągi znaków:

  • client_id
  • client_secret

które w poniższym kodzie wstawiamy do zmiennych SpotifyClientID oraz SpotifyClientSecret.

Przydatne będzie też ID użytkownika – najprościej je uzyskać szerując swój profil. Dostajemy wtedy adres URL, w którym po ciągu http://open.spotify.com/user/ będzie nasze ID. To z kolei wpisujemy (jako string) do zmiennej username poniżej. Komplet powinien wyglądać tak:

Kolejna sprawa to zakres uprawnień na jakie użytkownik musi się zgodzić. Podajemy listę tych uprawnień, których potrzebujemy. Poniżej mamy przykładowe, razem z dostępem do modyfikacji publicznych playlist użytkownika i odczytem list prywatnych. Dość grube to uprawnienia…

Ostatni krok to pozyskanie tokenu i autoryzacja użytkownika:

Mając proces autoryzacji za sobą możemy stworzyć obiekt Spotipy na którego metodach będziemy dalej pracować:

Znowu Python… Pisałem kiedyś o tym samym z poziomu R!

Zacznijmy od sprawdzenia czy to w ogóle działa, na przykład próbując wydobyć informacje o użytkowniku:

albo liście najpopularniejszych piosenek przez niego słuchanych:

Co do tej listy mam pewne wątpliwości – niektóre z utworów tutaj jak najbardziej pasują, bo było grane w ostatnim czasie częściej (na przykład te z płyty “The Final Cut” Floydów), ale część tylko raz. Można również sprawdzić inny zakres czasowy (parametr time_range) ale też wychodzą mi dziwactwa. Może być tak, że Spotify przelicza te dane raz na jakiś czas – pryz tej liczbie użytkowników miałoby to sens.

Przy okazji: jeśli masz ochotę dodać mnie do znajomych czy obserwować – śmiało, nie mam nic przeciwko. A może muzyka której słucham spodoba się też Tobie?

To co w Spotify jest najciekawsze z punktu widzenia analityka danych to cechy utworów. Spotify w jakiś znany sobie sposób analizuje każdy utwór i podsumowuje w postaci kilku liczb określających właśnie te cechy. Oczywiście API pozwala na zapytanie o takie cechy. Weźmy przykładowy utwór o ID 5mc6EyF1OIEOhAkD0Gg9Lc i zobaczmy co dla niego mamy:

Pamiętamy jaki jest cel? Zrobić automat, który z użyciem metod machine learning zbuduje dla nas listę utworów, które powinny nam się spodobać.

Przydałoby się więc pobrać listę ulubionych utworów. To da nam muzyczny profil użytkownika i kawałek zbioru treningowego – będą to nasze jedynki, utwory które użytkownik lubi. Oczywiście jest na to metoda w API current_user_saved_tracks(). Zbierzemy więc wszystkie utwory, razem z ich cechami i zapakujemy do jednego pandasowego data frame’a:

idx track_id track_title track_artist album_id album_title album_artist album_release_date track_popularity explict danceability energy key loudness mode speechiness acousticness instrumentalness liveness valence tempo duration_ms time_signature album_release_year
03q4hJtKfWjpJrEFtSFmqAfMaster of the Universe – 1996 RemasterHawkwind1cgsYqtDTMTetu7FjEsIhIIn Search Of SpaceHawkwind197139False0.4030.6038-10.52310.03920.2390.03890.1270.657150.01737752041971
173HSIWZlSCfs4tqVkrGv7HSilver Machine – Live at the Roundhouse London; 1996 RemasterHawkwind1cgsYqtDTMTetu7FjEsIhIIn Search Of SpaceHawkwind197156False0.310.8741-11.88910.1520.0004160.7120.06950.096131.71727997341971
23gv4AhWWneEu2oh1Egz652Personal Jesus – 2006 RemasterDepeche Mode3PIszA6UT9iI99izK60AdVThe Best Of Depeche Mode Volume 1Depeche Mode2006-11-1448False0.6890.84410-5.51900.03480.09630.008520.06210.772129.97322504042006
30z1b34WikhOH9ZxU8QDWcvOne HeadlightThe Wallflowers2BOlaNQt6WJ1HO5pQcKHGhBringing Down The HorseThe Wallflowers1996-01-0169False0.7010.5392-8.96810.02770.0006550.0050.05890.752107.53131262741996
474drJLr20XF1f4yqyNPRSZHeroinBadflower05AOz993WTdQcAox3vPcjvHeroinBadflower2018-11-300False0.5030.70911-5.80910.04310.2040.004380.06750.12143.11328122742018
55anZi6BM5SWn6u6wrVYsgy5 O’clock (K-Def Remix) [feat. Nonchalant] [Bonus Track]Pete Rock, Marley Marl4UuOh5u2YvngPjrxiKzQPxFuture Flavas MixtapeMarley Marl1999-02-0936True0.7590.80310-6.15200.2330.1430.02350.1110.789172.04326322141999
60brCwVt3kQES8K9qpJorQoThe Fletcher Memorial Home – 2011 RemasterPink Floyd5ChHkKb5VhZe0pgQRsvpekThe Final Cut (2011 Remastered Version)Pink Floyd1983-03-2139False0.2480.37-10.6910.03890.640.0005080.2310.0511173.36624944241983
72oXzhMnWAeSHbkCQVgvkqgBreadfanBudgie5Vhc4qqnuizoAPYgUHBy1sMetal ManiaVarious Artists2018-02-0237False0.3040.7391-9.53210.07790.01670.1170.3760.41102.41636480042018
82PzU4IB8Dr6mxV3lHuaG34(I Can’t Get No) Satisfaction – Mono VersionThe Rolling Stones2Q5MwpTmtjscaS34mJFXQQOut Of Our HeadsThe Rolling Stones1965-07-3075False0.7230.8632-7.8910.03380.03830.03170.1280.931136.30222281341965
975ARkUKb54dQ86YezuoNhnHate To Say I Told You SoThe Hives4LIKns3pN21w48Yf4dA6eLVeni Vidi ViciousThe Hives200011False0.4470.95-6.74110.05780.001140.005960.470.39135.86119973342000

Dla pewności zapiszemy sobie nasze zebrane dane, na przykład do pliku CSV:

Teraz przydałby się cały przegląd tego jakie cechy mamy, jak się rozkładają i co z nich można wykorzystać. Zobaczymy tylko rozkład wartości dla cech i korelację między nimi:

Kliknij w obrazek, aby powiększyć

Wszędzie (prawie) właściwie nie widać korelacji pomiędzy cechami, a po tym można sądzić że wszystkie cechy przydadzą się w modelu. Co więcej – większość z nich jest znormalizowana (w przedziale 0-1), część wygląda na wartości dyskretne (mimo że są liczbami – key, mode) a część jest ciągła i nie ma właściwie limitu – chociażby długość utworu (durration_ms).

Mamy piosenki, które lubię, mamy ich cechy – to są nasze jedynki. Tylko, żeby wytrenować model potrzebujemy też zer – czegoś czego nie lubię. Skąd wytrzasnąć takie dane? Kilka propozycji padło pod stosownym postem na fanpage’u Dane i Analizy:

Aby się nie męczyć za wiele wykorzystam listy przygotowane przez Spotify – wybierając te, które wyglądają że nie są z moim guście.

Wziąłem wszystkie jakie użytkownik spotify przygotował, wylistowałem ich zawartość i ręcznie wybrałem ID playlist, które wyglądają że nie są dla mnie. Stosowny kod:

Wynik jest dłuuugi, więc go sobie oszczędzimy.

Co nam się pozbierało i zostało po drobnych manipulacjach (usunięcie duplikatów i utworów wykonywanych przez artystów z listy lubianych)?

idx track_id track_title track_artist album_id album_title album_artist album_release_date track_popularity explict danceability energy key loudness mode speechiness acousticness instrumentalness liveness valence tempo duration_ms time_signature album_release_year
00sf12qNH5qcw8qpgymFOqDBlinding LightsThe Weeknd2ZfHkwHuoAZrlz7RMj0PDzBlinding LightsThe Weeknd2019-11-29100False0.5130.7961-4.07510.06290.001470.0002090.09380.345171.01720157342019
1364dI1bYnvamSnBJ8JcNzNIntentionsJustin Bieber55zg331p7m1EFA4uRggkwtIntentionsJustin Bieber2020-02-0792False0.8110.5539-6.64410.05520.31700.1050.86148.01421286942020
23Dv1eDb0MEgF93GpLXlucZSay SoDoja Cat1MmVkhiwTH0BkNOU3nw5d3Hot PinkDoja Cat2019-11-0795True0.7870.67311-4.57700.1580.2563.57e-060.09040.786110.96223789342019
36WrI0LAC5M1Rw2MnX2ZvEgDon’t Start NowDua Lipa0ix3XtPV1LwmZADsprKxcpDon’t Start NowDua Lipa2019-10-3197False0.7940.79311-4.52100.08420.012500.09520.677123.94118329042019
40nbXyq5TXYPCO7pr3N8S4IThe BoxRoddy Ricch52u4anZbHd6UInnmHRFzbaPlease Excuse Me For Being AntisocialRoddy Ricch2019-12-0699True0.8960.58610-6.68700.05590.10400.790.642116.97119665342019
51Cv1YLb4q0RzL6pybtaMLoSunday BestSurfaces3mMWlBGocBwsS1Q0o9wvlcWhere the Light IsSurfaces2019-01-0693False0.8780.5255-6.83210.05780.18300.07140.694112.02215857142019
67eJMfftS33KTjuF7lTsMCxdeath bed (coffee for your head) (feat. beabadoobee)Powfu2p9gK2BcdrloHNJwarc9gcdeath bed (coffee for your head) (feat. beabadoobee)Powfu2020-02-0893False0.7260.4318-8.76500.1350.73100.6960.348144.02617333342020
76wJYhPfqk3KGhHRG76WzOhBlueberry FaygoLil Mosey6rBennOYWR1OZQnsU39PKLBlueberry FaygoLil Mosey2020-02-0791True0.7740.5540-7.90910.03830.20700.1320.34999.03416254742020
84TnjEaWOeW0eKTKIEvJyCaFallingTrevor Daniel1Czfd5tEby3DbdYNdqzrCaFallingTrevor Daniel2018-10-0596False0.7840.4310-8.75600.03640.12300.08870.236127.08715938242018
97szuecWAPwGoV1e5vGu8tlIn Your EyesThe Weeknd4yP0hdKOZPNshxUOjY0cZjAfter HoursThe Weeknd2020-03-2081True0.6650.7187-5.38500.03350.003567.18e-050.0740.72100.03323752042020

Możemy przejrzeć jak wyglądają cechy tych złych utworów i na oko porównać czy jakoś różnią się od lubianych. Nie będę tego analizował, ale mając te obrazki możecie uczynić to sami.

Kliknij w obrazek, aby powiększyć

Czas na przygotowanie zbiorów uczących. Weźmiemy na początek taką samą liczbę utworów nielubianych co lubianych (dzięki temu nie powinno być problemu niezbalansowanych klas). Później dla każdego ze zbiorów:

  • 80% na trening
  • 20% na test

Z pomocą przyjdzie nam scikit-learn.

Mając przygotowany zbiór uczący (X_train to cechy, y_train to odpowiedzi) oraz testowy (odpowiednio X_test i y_test) możemy przystąpić do budowania i weryfikowania modelu. Nie będziemy jednak tym razem w to zbytnio się zagłębiać – weźmiemy po prostu random forest z domyślnymi parametrami. Chodzi mi tutaj o pokazanie procesu (i tego co i dlaczego wyjdzie) a nie szykowanie idealnego rozwiązania..

Wygląda dobrze – wszystkie wskaźniki na poziomie w okolicach 97%.

Dodajmy do danych testowych informację o tym co zwrócił model, a następnie wybieramy z tego zbioru utwory:

  • których do tej pory nie lubiłem (w teście są zarówno piosenki lubiane jak i nie lubiane)
  • ale według modelu powinienem polubić:
idx track_id track_title track_artist
1614qug3gWrzeTNm0GhOkugJVLove YourselfJustin Bieber
18110Oin6yhBlz0BF5XASDczpDark PoolsCirca Survive
2010KpfYajJVVGgQ32Dby7e9iHey, Soul SisterTrain
2296uP0XLqjRqFx8HAfesdcAgX Gon’ Give It To YaDMX
2503VmVapCFKcU9d3CJsoSUm8Feels So GoodRemy Ma

Wyniki…. jak wyniki. Nie znam żadnego z tych utworów, wykonawcy gdzieś majaczą. Przesłuchajmy je.

Najprościej będzie dodać je do nowej playlisty i taką playlistę przesłuchać w dowolnym momencie.

I to właściwie koniec naszego procesu. W wyniku całej drogi, czyli:

  • zebrania listu utowrów lubianych
  • dodania do nich informacji o cechach audio
  • zebrania informacji (razem z cechami) o utowrach potencjalnie nielubianych
  • wytrenowaniu modelu klasyfikującego nieznane utwory na lubiane lub nie
  • dodaniu potencjalnie lubianych do nowej playlisty

możemy przesłuchać zdecydowanie mniejszą liczbę utworów i zweryfikować organoleptycznie czy nasz model się sprawdza.

Do tej pory działaliśmy na utworach z playlist – to je scorowaliśmy w modelu. To samo możemy zrobić dla całego albumu. Weźmy na przykład “The Wall” Pink Floyd, którą uważam za najlepszą płytę jaką słyszałem w życiu. A przynajmniej taką w pierwszej piątce, bo najlepszych płyt na świecie to pewnie mam z 10, może 20. I wszystkie równorzędne.

Na początek musimy znaleźć ID albumu. Wyszukamy wszystkich albumów odpowiadających zapytaniu the wall pink floyd i zobaczymy jaki będzie efekt:

Jak widać jest 10 potencjalnych kandydatów. Oczywiście pierwszy jest najbardziej pasującym, ale wyniki te pokazuję dlatego, że w Spotify mamy bardzo często pełno różnych wersji remastered, deluxe edition, bonus trakcs, tribute to i tym podobnych. To jest problem. Najczęściej pierwszy zwracany wynik pasuje najlepiej, ale mimo wszystko trzeba być ostrożnym (prezydent Kwaśniewski o tym kiedyś mówił, #pdk mordeczki ;-).

Weźmy więc ten pierwszy album i sprawdźmy jakie utwory na nim znajdziemy:

Zgadza się – po tytułach i liczbie utworów to jest ta płyta.

Do dalszej pracy potrzebujemy ramki danych takiej samej jak wcześniej. Bo dalsza praca to sprawdzenie czy ten album mi się spodoba (uwaga – kilka z tych piosenek ma już moje lajki).

Dodajmy info o tym czy dany ID utworu znajduje się na liście ulubionych:

i zobaczmy proste podsumowanie:

idx track_title track_popularity liked
0In The Flesh? – 2011 Remastered Version52False
0The Thin Ice – 2011 Remastered Version49False
0Another Brick In The Wall, Pt. 1 – 2011 Remastered Version54False
0The Happiest Days Of Our Lives – 2011 Remastered Version53False
0Another Brick In The Wall, Pt. 2 – 2011 Remastered Version71False
0Mother – 2011 Remastered Version55True
0Goodbye Blue Sky – 2011 Remastered Version53False
0Empty Spaces – 2011 Remastered Version48False
0Young Lust – 2011 Remastered Version52False
0One Of My Turns – 2011 Remastered Version48False
0Don’t Leave Me Now – 2011 Remastered Version47False
0Another Brick In The Wall, Pt. 3 – 2011 Remastered Version49False
0Goodbye Cruel World – 2011 Remastered Version49False
0Hey You – 2011 Remastered Version61False
0Is There Anybody Out There? – 2011 Remastered Version49False
0Nobody Home – 2011 Remastered Version48True
0Vera – 2011 Remastered Version47True
0Bring The Boys Back Home – 2011 Remastered Version46False
0Comfortably Numb – 2011 Remastered Version68True
0The Show Must Go On – 2011 Remastered Version47False
0In The Flesh – 2011 Remaster47False
0Run Like Hell – 2011 Remastered Version51False
0Waiting For The Worms – 2011 Remastered Version46False
0Stop – 2011 Remastered Version43False
0The Trial – 2011 Remastered Version48False
0Outside The Wall – 2011 Remastered Version43False

Teraz puszczamy wszystkie utwory przez model i sprawdzamy jakie jest prawdopodobieństwo jedynki (że się spodoba):

idx track_title liked like_prob
0In The Flesh? – 2011 Remastered VersionFalse0.99
0The Thin Ice – 2011 Remastered VersionFalse0.93
0Another Brick In The Wall, Pt. 1 – 2011 Remastered VersionFalse0.75
0The Happiest Days Of Our Lives – 2011 Remastered VersionFalse0.95
0Another Brick In The Wall, Pt. 2 – 2011 Remastered VersionFalse0.97
0Mother – 2011 Remastered VersionTrue1
0Goodbye Blue Sky – 2011 Remastered VersionFalse0.88
0Empty Spaces – 2011 Remastered VersionFalse0.89
0Young Lust – 2011 Remastered VersionFalse0.96
0One Of My Turns – 2011 Remastered VersionFalse0.99
0Don’t Leave Me Now – 2011 Remastered VersionFalse0.98
0Another Brick In The Wall, Pt. 3 – 2011 Remastered VersionFalse0.91
0Goodbye Cruel World – 2011 Remastered VersionFalse0.73
0Hey You – 2011 Remastered VersionFalse1
0Is There Anybody Out There? – 2011 Remastered VersionFalse0.85
0Nobody Home – 2011 Remastered VersionTrue0.96
0Vera – 2011 Remastered VersionTrue0.93
0Bring The Boys Back Home – 2011 Remastered VersionFalse0.98
0Comfortably Numb – 2011 Remastered VersionTrue1
0The Show Must Go On – 2011 Remastered VersionFalse0.99
0In The Flesh – 2011 RemasterFalse0.99
0Run Like Hell – 2011 Remastered VersionFalse0.98
0Waiting For The Worms – 2011 Remastered VersionFalse0.99
0Stop – 2011 Remastered VersionFalse0.86
0The Trial – 2011 Remastered VersionFalse1
0Outside The Wall – 2011 Remastered VersionFalse0.87

Zdecydowanie wszystkie utwory dostałyby jako klasę jedynkę, niektóre mniej inne bardziej. Można powiedzieć, że na (nie tak do końca) losowo wybranym przykładzie model empirycznie się sprawdza. “Goodbye Cruel World” został oceniony najniżej a jest jednym z moich ulubionych tracków na tej płycie. Zwróć uwagę, że nie był oserduszkowany.

Nic dziwnego, że wszystko z “The Wall” według modelu mi się powinno podobać, skoro trenowany jest głównie na tego typu muzyce. Ale zróbmy inny eksperyment. Lubię Bjork, chociaż ostatnio jakoś mniej jej słucham, najbardziej lubię płytę “Post”. Jedziemy zatem z tym samym kodem co wyżej dla ID albumu 3p7WXDBxhC5KS9IFXnwae7 (powyższy kod ubrałem w zgrabną funkcję)

idx track_title liked like_prob
0Army Of MeFalse0.98
0Hyper-balladFalse1
0The Modern ThingsFalse0.93
0It’s Oh So QuietFalse0.94
0EnjoyFalse0.99
0You’ve Been Flirting AgainFalse0.83
0IsobelFalse1
0Possibly MaybeFalse1
0I Miss YouFalse0.93
0Cover MeFalse0.98
0HeadphonesFalse0.84

Tutaj też wszystkie utwory dostałyby lajka! Ciekawe jest to, że “Isobel” większego niż “It’s oh so quiet”, a lubię odwrotnie.

To są przykłady pozytywne – wiem, że mi się podoba i model mówi to samo. A jak wiem, że mi się nie podoba to co powie model? O, na przykład o płycie 5C0YLr4OoRGFDaqdMQmkeH?

idx track_title liked like_prob
0SolaFalse0.03
0Apaga La LuzFalse0.02
0Le Pido Al CieloFalse0.17
0ImposibleFalse0.13
0Poco A PocoFalse0
0Dime Que No Te IrasFalse0.23
0Échame La CulpaFalse0.06
0Tanto Para NadaFalse0.13
0DespacitoFalse0.03
0Más Fuerte Que YoFalse0.06
0CalypsoFalse0.2
0Ahí Estas TúFalse0.02
0Despacito – RemixFalse0.03
0Calypso – RemixFalse0.05
0Sola – English VersionFalse0.02

Sprawdza się.

Ale są też błędy. Na przykład model mówi, że nie, a ja po przesłuchaniu mówię że całkiem ok. Płyta 6R8ir7mqaqV3vrtv5pmvID wypada wg modelu bardzo słabo (Fonsi wygląda na lepszy, ale jak?):

idx track_title liked like_prob
0Koło fortunyFalse0.06
0W domach z betonuFalse0.01
0MatchboxyFalse0.01
0Na rympałFalse0.02
0Piekło jest w nasFalse0
0Przebój nocyFalse0
0NocFalse0.03
0Street FighterFalse0.01
0Zadzwoń do mnieFalse0.01
0BMKFalse0.02
0Mistrz ping-pongaFalse0.01
0Szansa na sukcesFalse0
0DymFalse0.01
0BagażeFalse0.03
0SkrableFalse0.01
0OutroFalse0.05

Płyta ta jest całkiem zgrabnym kawałkiem polskiego HH, którego nie lubię (z 20 lat temu napisałem o tym tekst do jakiegoś fun zina, ależ mnie zjechali! Nie umiem znaleźć tekstu niestety) i się na nim nie znam. Kudosy dla Pana Huberta z Warszawy za przedstawienie tej płyty.

Zauważyliście, że specjalnie nie podaję nazw tych płyt i liczę na to, że klikniecie albo rozpoznacie po tytułach utworów? Post edukacyjny zarówno z Pythona, prostego machine learning jak i muzyki. W czasach kwarantanny za darmo takie rzeczy… No chyba że kawkę postawisz.

Panu Maciejowi (również z Warszawy) obiecałem jeszcze płytę 7xV2TzoaVc0ycW7fwBwAml:

idx track_title liked like_prob
0GoldenFalse0.08
0Watermelon SugarFalse0.03
0Adore YouFalse0
0Lights UpFalse0.04
0CherryFalse0.2
0FallingFalse0.05
0To Be So LonelyFalse0.07
0SheFalse0.4
0Sunflower, Vol. 6False0.2
0Canyon MoonFalse0.15
0Treat People With KindnessFalse0.11
0Fine LineFalse0.3

Normalnie bym palcem nie kiwnął i nie zapuścił się w te rejony patrząc na cyferki. Ale włączyłem (pan Maciej z Warszawy podrzucał i podrzucał kolejnych wykonawców) i ta muzyka przypadła mi do gustu (ale nie mogłem zaserduszkować jeszcze, żeby test był fair).

Dlaczego więc model się myli?

Wytłumaczenie jest stosunkowo proste:

  • jedynki są pewne. Sam musiałem wykonać akcję polegającą na kliknięciu w serduszko.
  • ale z zerami poszliśmy na łatwiznę (oceniając trochę po okładce)
  • dodatkowo nie było zer dla wykonawców, którzy mieli chociaż jedną jedynkę, a to duże uproszczenie

Przy poprawnym labelkowaniu trzeba pracę wykonać samodzielnie, niestety. Bo inaczej shit in, shit out.

Druga sprawa – sam model jest dość prosty, bez dobierania żadnych hiperparametrów, bez szukania cech dodatkowych (np. totalnie oderwanych od muzyki – średnia liczba znaków w tytule utworu na płycie z której utwór pochodzi ;) Może więc sieć nieuronowa? Może. Ale przede wszystkim uczciwy sposób oznaczania nielubianych.

Ciekawy tekst na ten sam temat na pisał też Grzesiek Zembrowski – polecam uwadze, bo Grzegorz skupił się na większej liczbie cech i poszedł nieco dalej z modelem (jakieś PCA po drodze).
Ja pisałem kiedyś o tym samym z poziomu R.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *