Tekst

Jeśli potrzebujesz prostego tekstu, możesz po prostu pisać tak, jak zwykle. Jeśli chcesz sformatować tekst, możesz użyć par gwiazdek (*) lub podkreśleń (_). Poniższa tabela pokazuje, jak używać par gwiazdek. Podkreślenia działają w ten sam sposób. Jeśli użyjemy następującego wejścia:

Tekst z *kursywą* w środku.

Tekst z **pogrubieniem** w środku.

Tekst z **pogrubieniem i *kursywą* w środku**.

Otrzymujemy następujący wynik:

Tekst z kursywą w środku.

Tekst z pogrubieniem w środku.

Tekst z pogrubieniem i kursywą w środku.

Delikatne wprowadzenie do Markdown

Markdown ma różne wersje składni, które są obsługiwane przez różne systemy i platformy. Ten, który tutaj pokazujemy, jest ogólny, który jest przydatny w wielu systemach, w tym w R Markdown. W poniższych przykładach pokazujemy podstawowe elementy strukturyzowania treści przy użyciu języka Markdown. Rzeczywista estetyka zależy od tego, jakie style są stosowane w plikach. W poniższych przykładach nie zastosowano żadnej estetyki. W dalszej części rozdziału pokażemy, jak dostosować je do naszej prezentacji.

Podstawowe narzędzia dla potoku automatyzacji

Potok to proces, który zaczyna się od tekstu, kodu i surowych danych, a kończy się na ostatecznym dokumencie lub prezentacji, którą chcemy pokazać lub rozpowszechnić. Na szczęście większość ciężkiej pracy jest zautomatyzowana w R, więc nie musisz nic robić poza zainstalowaniem tych narzędzi i skonfigurowaniem pliku kompilacji.

Nasz potok powinien być wystarczająco ogólny, aby pomieścić różne przypadki użycia bez konieczności znacznych modyfikacji. Jeśli tak jest, możemy opanować jeden zestaw narzędzi i używać go ponownie w różnych projektach, zamiast uczyć się za każdym razem nowego zestawu narzędzi. Po stronie wprowadzania, używając tekstu, kod i dane są wystarczająco ogólne. Po stronie wyjściowej możliwość generowania dokumentów HTML, PDF, LaTeX, a nawet Word wydaje się być wystarczająco ogólna, więc możemy zacząć. Markdown to język narzutów o niskim koszcie. Jego główną zaletą dla pisarzy jest to, że pozwala nam skupić się na pisaniu, a nie na formatowaniu. Ma proste i minimalne, ale intuicyjne elementy formatowania, a także wiele programów, które mogą między innymi tłumaczyć Markdown na pliki HTML i PDF. R Markdown jest rozszerzeniem Markdown w celu włączenia kodu R. Dokumenty napisane w R Markdown mają zagnieżdżony kod R, co pozwala nam tworzyć dynamiczne prezentacje. Nie można ich ocenić za pomocą standardowych narzędzi Markdown. Zamiast tego kod R jest oceniany jako część przetwarzania R Markdown przed wywołaniem tradycyjnych narzędzi Markdown. Jednym z pierwszych systemów programowania w języku R jest Sweave, który służy do tworzenia dynamicznych raportów i powtarzalnych badań przy użyciu LaTeX. Sweave umożliwia osadzanie kodu R w dokumentach LaTeX w celu wygenerowania pliku PDF zawierającego tekst, analizę, grafikę, kod i wyniki obliczeń. knitr (z pierwszą małą literą) to pakiet R, który dodaje wiele nowych możliwości do Sweave.

R Markdown można przekształcić w standardową przecenę za pomocą pakietu knitr w R, który wstawia wyniki R do dokumentu Markdown. Markdown można następnie przekonwertować na HTML za pomocą Pandoc. Użycie R Markdown do tworzenia powtarzalnych raportów szybko stało się podstawowym narzędziem dla wielu naukowców. Nie będziemy wchodzić w szczegóły, w jaki sposób Sweave, LaTeX lub Pandoc przekształcają pliki w różnych formatach, ponieważ nie będziesz musiał ich bezpośrednio obsługiwać. Skoncentrujemy się na używaniu R Markdown i knitr. Jednak nadal musimy się upewnić, że mamy wszystkie te narzędzia zainstalowane w naszym systemie, zanim będziemy kontynuować. Sweave jest wysyłany w ramach dowolnej dystrybucji R. R Markdown i knitr można zainstalować w R. Pandoc, a LaTeX należy zainstalować bezpośrednio na komputerze. Na koniec należy zauważyć, że nie są to jedyne dostępne narzędzia do tworzenia zautomatyzowanych treści. Ponieważ programowanie w języku R stało się przedmiotem dużego zainteresowania, naturalnie wiele narzędzi zostało i nadal jest rozwijanych do tego celu. Chociaż ten rozdział skupia się na R Markdown i knitr, istnieją inne narzędzia, takie jak Presenter R Studio (RPres) i Slidify. Nie pokazaliśmy tych narzędzi w tej książce, ponieważ są one albo bardziej ograniczone w zastosowaniu, albo bardziej złożone w użyciu. Uważamy, że kombinacja R Markdown-knitr zapewnia bardzo dobrą równowagę między mocą a łatwością użytkowania i jest to nasza kombinacja z wyboru. Zachęcamy jednak czytelnika do zbadania innych narzędzi i znalezienia najlepszego

Powtarzalność jako korzyść płynącego z programowania

W nauce odtwarzalność jest najważniejszym elementem weryfikacji i walidacji wyników analizy. Prowadzone przez nas analizy, modele i algorytmy są znacznie bardziej skomplikowane niż kiedyś. Podstawowe zrozumienie tych algorytmów jest trudne, nawet dla wyrafinowanej osoby i prawie niemożliwe jest opisanie ich za pomocą samych słów. Zrozumienie tego, co ktoś robi obecnie, wymaga bezpośredniego spojrzenia na dane i kod, a nie tylko na wyniki. Naukowcy piszą wiele raportów opisujących wyniki analiz danych. Zapewnienie powtarzalności tych raportów jest niezbędne, aby Twoja praca została sprawdzona przez innych i jest to bardzo dobry sposób na osiągnięcie tego przy pomocy umiejętności programowania. Dzięki niemu ostateczny raport zależy od kodu, który jest wykonywany w momencie jego tworzenia, a co za tym idzie, w proces osadzona jest powtarzalność. Istnieje jasna i automatyczna ścieżka od danych i kodu do raportu końcowego. Piśmienne programowanie do analizy danych stało się dość popularne ze względu na zapewniany przez nie rozwój i wydajność komunikacji. W kolejnych sekcjach pokażemy, jak to zrobić za pomocą R, R Markdown i knitr.

Piśmienne programowanie jako metodologia tworzenia treści

Automatyzacja wymaga od nas łączenia różnych elementów w taki sposób, aby proces był przejrzysty zarówno dla ludzi, jak i maszyn. Proces musi być odtwarzalny i podlegać ewolucji, gdy przychodzą do nas nowe pomysły lub zmieniają się wymagania. Podstawową ideą jest to, że dokument jest postrzegany jako połączenie tekstu i kodu. Kod jest podzielony na fragmenty z tekstem otaczającym fragmenty kodu wyjaśniające, co się dzieje. Tekst dostosowuje się w razie potrzeby, aby pomysły kryjące się za kodem były zaktualizowane, jasne i dokładne. W tym rozdziale używamy zamiennie słów prezentacja i dokument, ponieważ możesz je utworzyć za pomocą narzędzi, które pokażemy. Umiejętne programowanie nie jest warunkiem automatyzacji tworzenia treści, ale z pewnością jest do tego doskonałym narzędziem. Programowanie literackie ma tę zaletę, że jest łatwo czytelne, podobnie jak podręcznik lub zestaw instrukcji. Pozwala również na połączenie kodu i języka naturalnego. Wyniki mogą być automatycznie wyświetlane, gdy przeglądamy dokument. Sam dokument jest prostym tekstem, dzięki czemu jest elastyczny i łatwy do zmiany. Ogólnie rzecz biorąc, programy do czytania i pisania są utkane w celu stworzenia dokumentów czytelnych dla człowieka i splątane w celu utworzenia dokumentów do odczytu maszynowego. Aby to zadziałało, potrzebujemy tylko języka dokumentacji i języka programowania, którymi w naszym przypadku są angielski i R. Wydaje się, że programowanie literackie ma potencjał, aby wiele narzędzi, które są obecnie używane do tworzenia treści, stać się przestarzałymi. Jednak nadal dostępne są lepsze narzędzia, jeśli potrzebujesz tworzyć dokumenty z bardzo dokładnym formatowaniem lub które wymagają wysoce technicznych optymalizacji. Nie wynika to z żadnych nieodłącznych słabości koncepcji programowania z użyciem umiejętności czytania i pisania, ale z faktu, że dostępne narzędzia nie są tak wydajne jak narzędzia specjalistyczne w tych aspektach. Jeśli chodzi o programowanie piśmienne, R zachowuje dobrą równowagę między złożonością techniczną a prostymi prezentacjami, umożliwiając opracowanie szerokiego zakresu automatyzacji treści, co może tworzyć dokumenty, które mogą bardzo dobrze służyć do badań i analizy danych w ogóle. Jeśli w pewnym momencie okaże się, że musisz wprowadzić zmianę, możesz to łatwo zrobić, ponownie skompilować, a w ciągu kilku sekund zobaczysz najnowszą wersję. Dlatego bardzo przydatne jest tworzenie automatycznych prezentacji w sposób, który pokażemy w tej części.

Dlaczego warto inwestować w automatyzację?

Automatyzacja to inwestycja. Często wiąże się to z pobieraniem różnych aplikacji i integracją ich, aby procesy przebiegały wielokrotnie, miejmy nadzieję, że płynnie i bez wysiłku. Automatyzacja procesów może zwiększyć produktywność poprzez skrócenie czasu potrzebnego do wykonywania powtarzalnych zadań, a także redukcję defektów, co również oszczędza czas i usprawnia proces tworzenia wartości. Co więcej, zautomatyzowane systemy nie nudzą się. Prawdopodobnie każdy, kto będzie musiał wielokrotnie podejmować się powtarzalnego zadania, będzie się nudził. Spowolni to ich działanie i zwiększy ryzyko wystąpienia usterek. Proces zautomatyzowany nie będzie się nudzić, bez względu na to, jak często jest wykonywany, więc jego wydajność prawdopodobnie nie zostanie spowolniona. Naukowcy mogą wykorzystać automatyzację do skrócenia czasu cyklu za pomocą metod naukowych, które z kolej zwiększa tempo uczenia się, często wykładniczo. Moim zdaniem jest to jedna z najpotężniejszych konsekwencji automatyzacji: przyspieszenie procesów uczenia się poprzez odsunięcie nas (ludzi) od czynności, do których nie dodajemy wartości i umożliwienie nam skupienia się na czynnościach, których (na razie) nie da się zautomatyzować, takich jak kreatywność lub opracowywanie innowacyjnych rozwiązań cennych problemów. Wreszcie, ludzie często narzekają, że nie mają wystarczająco dużo czasu. Jednym ze skutecznych sposobów na odzyskanie czasu jest automatyzacja procesów i to jest ostateczna korzyść z automatyzacji, która pozwala mu więcej czasu.

Opracowywanie automatycznych prezentacji

Czy zdarzyło Ci się kiedyś robić to samo mechaniczne zadanie? Zaskakujące jest, jak wielu programistów, statystyków i naukowców w ogóle nie poświęca czasu na automatyzację wielu swoich działań, zwłaszcza raportowania wyników. Pozwoliłoby im to głębiej skoncentrować się na swoich podstawowych kompetencjach. Co więcej, nie dotyczy to wyłącznie osób; organizacje nadal nie automatyzują wielu swoich procesów, zwłaszcza analitycznych. W tej części pokażemy, jak zautomatyzować inne prezentacje rozwijające aktywność. Nie mamy na myśli automatyzacji wyjaśnień stojących za wynikami, ale zautomatyzowanie tworzenia slajdów, które pokazują tabele i wykresy aktualnego stanu procesu. Jest to obszar o bardzo wysokich korzyściach / kosztach, który jest często pomijany i marnuje się dużo czasu na przygotowywanie takich prezentacji do dyskusji między współpracownikami. To jest ostatni rozdział przykładu The Food Factory, a tutaj zautomatyzujemy czynność, którą ludzie w wielu organizacjach wykonują w kółko – opracowując prezentacje z cotygodniowymi aktualizacjami. Pokażemy, jak wygląda potok automatyzacji treści w R i zbudujemy prezentację, która może być aktualizowana automatycznie o najnowsze dane. Aby to zrobić, wykorzystamy wyniki, które opracowaliśmy w poprzednich rozdziałach tego przykładu. Niektóre z ważnych tematów omawianych w tym rozdziale są następujące:

* Znaczenie i zalety automatyzacji

* Konfigurowanie i uruchamianie potoków automatyzacji

* Przekazywanie pomysłów za pomocą umiejętności programowania

* Pisanie treści statycznych za pomocą Markdown

* Tworzenie dynamicznych treści przy użyciu R Markdown

* Tworzenie prezentacji i stron internetowych za pomocą knitr

* Efektywna integracja zasobów R.

Wymagane pakiety

W tej części wymagane są tylko dwa pakiety i powinieneś móc je bez problemu zainstalować w swoim systemie.

ggrepel: Unikaj nakładania się etykiet na wykresach

rmarkdown: dokumenty Markdown z wykonywalnym kodem R.

Podsumowanie

Pokazaliśmy, jak przeprowadzić analizę predykcyjną z wykorzystaniem danych tekstowych. Aby to zrobić, pokazaliśmy, jak tokenizować tekst w celu wyodrębnienia odpowiednich słów, jak budować i pracować z macierzami funkcji dokumentu (DFM), jak stosować transformacje do DFM w celu eksploracji różnych modeli predykcyjnych przy użyciu terminów odwróconych od częstotliwości wag częstotliwości dokumentów, ngramy , częściowe dekompozycje według wartości osobliwej i podobieństwa cosinusowe oraz jak używać tych struktur danych w losowych lasach do tworzenia prognoz. Dowiedziałeś się, dlaczego te techniki mogą być ważne w przypadku niektórych problemów i jak je łączyć. Pokazaliśmy również, jak uwzględnić analizę sentymentów wywnioskowaną z tekstu, aby zwiększyć moc predykcyjną naszych modeli. Na koniec pokazaliśmy, jak pobierać dane na żywo z Twittera, które można wykorzystać do analizy tego, co ludzie mówią w sieci społecznościowej wkrótce po tym, jak to powiedzieli. Zachęcamy do łączenia wiedzy z tego rozdziału z tą z poprzednich rozdziałów, aby spróbować uzyskać głębszy wgląd. Na przykład, co się stanie, jeśli użyjemy trygramów kwadgramów? Co się stanie, jeśli uwzględnimy inne funkcje w danych (na przykład współrzędne lub identyfikatory klientów)? A co się stanie, jeśli użyjemy innych modeli predykcyjnych zamiast losowych lasów, takich jak maszyny wektorów pomocniczych?

Pobieranie danych tekstowych z Twittera

Zanim zakończymy, pokrótce poruszymy zupełnie inny, ale bardzo poszukiwany temat, czyli pozyskiwanie danych z Twittera. Jeśli chcesz zastosować modele predykcyjne, musisz połączyć dane z Twittera ze zmienną, którą chcesz przewidzieć, która zwykle pochodzi z innych danych. Jednak coś, co możesz łatwo zrobić, to zmierzyć nastroje wokół tematu za pomocą technik, które pokazaliśmy w poprzedniej sekcji. Pakiet twitteR w rzeczywistości bardzo ułatwia nam pobieranie danych z Twittera. Aby to zrobić, utworzymy na Twitterze aplikację Twitter, która zapewni nam dostęp do źródła danych. Aby to osiągnąć, musimy wygenerować cztery ciągi znaków na Twoim koncie na Twitterze, które będą kluczami do korzystania z API. Te klucze służą do weryfikacji uprawnień i ogólnego monitorowania użytkowania. W szczególności potrzebujesz czterech ciągów, wartości consumer_key, consumer_secret, access_token i access_secret. Aby je odzyskać, przejdź do witryny Twitter Apps (https://apps.twitter.com/), kliknij Utwórz nową aplikację i wprowadź wymagane informacje. Nazwa Twojej aplikacji na Twitterze musi być unikalna we wszystkich aplikacjach na Twitterze. Nie martw się o wybranie złożonej nazwy, nigdy więcej nie użyjesz tego ciągu. Upewnij się również, że przeczytałeś Umowę dewelopera Twittera i zgadzasz się z nią. Po wejściu do pulpitu nawigacyjnego aplikacji przejdź do karty Klucze i tokeny dostępu i wygeneruj klucz oraz token dostępu z odpowiadającymi im tajnymi kluczami. Upewnij się, że kopiujesz te ciągi dokładnie w taki sposób, w jaki dają Ci dostęp do źródła danych. Zastąp je zamiast przedstawionych tutaj (które już nie działają, ponieważ zostały usunięte po napisaniu tej książki) i wykonaj funkcję setup_twitter_oauth(). Jeśli wszystko poszło zgodnie z oczekiwaniami, powinieneś teraz podłączyć sesję R do źródła danych:

Aby pobrać dane, utworzymy funkcję opakowującą, która pozwoli nam na ciągłe pisanie schematu wzorcowego za każdym razem, gdy będziemy potrzebować nowych danych. Funkcja get_twitter_data() przyjmuje słowo kluczowe, którego szukamy na Twitterze i liczbę wiadomości, które chcemy  odzyskać. Następnie pobiera dane z Twittera za pomocą funkcji searhTwitter (w języku angielskim), przekształca wyniki w ramkę danych  funkcją twListToDF() i odsyła ją z powrotem do użytkownika:

get_twitter_data <- funtion(keyword, n) {

return(twListToDF(searchTwitter(keyword,n . lang = „en” )))

}

Teraz możemy łatwo wyszukiwać wiadomości, które zawierają słowo „cake”, wykonując następujący kod. Jak widać, nie tylko otrzymujemy wiadomości, ale otrzymujemy również wiele metadanych, takich jak to, czy tweet był ulubionym; jeśli tak, to ile razy, czy była odpowiedzią, kiedy została utworzona i współrzędne miejsca wysłania tweeta, jeśli są dostępne, między innymi:

cake_data <- get_twitter_data(„cake”, 250)

names(cake_data)

#> [1] “text” “favorited” “favoriteCount” “replyToSN”

#> [5] “created” “truncated” “replyToSID” “id”

#> [9] “replyToUID” “statusSource” “screenName” “retweetCount”

#> [13] “isRetweet” “retweeted” “longitude” “latitude”

W ramach ćwiczenia pobierz dane z Twittera za pomocą pokazanego wcześniej mechanizmu i użyj ich do stworzenia mapy świata, która pokazuje, skąd pochodzą tweety, i koloruje lokalizacje pinezek, korzystając z sentymentu wywnioskowanego z tweeta. Posiadanie takiego fragmentu kodu może być fajne do zabawy i żartowania ze znajomymi, a także do podejmowania prawdziwych decyzji biznesowych.

Testowanie naszego modelu predykcyjnego na niewidocznych danych

Teraz, gdy mamy nasz ostateczny model, musimy zweryfikować jego wyniki, testując go na niewidocznych danych. To da nam pewność, że nasz model jest dobrze wyszkolony i prawdopodobnie da podobne wyniki, gdy zostaną użyte nowe dane. Uważny czytelnik powinien zauważyć, że podczas tworzenia naszych danych analizy sentymentów użyliśmy ramki danych TF-IDF, a nie żadnej z tych, które tworzymy później, z kombinacjami bigramów, SVD i podobieństw cosinusowych, które działają w innej przestrzeni semantycznej z powodu do faktu, że są one przekształceniami oryginalnego DFM. Dlatego zanim będziemy mogli faktycznie użyć naszego wytrenowanego modelu do prognozowania danych testowych, musimy przekształcić go w przestrzeń równoważną z naszymi danymi szkoleniowymi. W przeciwnym razie porównalibyśmy jabłka i pomarańcze, co dałoby nam nonsensowne wyniki. Aby upewnić się, że pracujemy w tej samej przestrzeni semantycznej, zastosujemy wagi TF-IDF do naszych danych testowych. Jeśli jednak się nad tym zastanowić, prawdopodobnie w naszych danych testowych jest wiele terminów, których nie było w naszych danych szkoleniowych. Dlatego nasze DFM będą miały różne wymiary dla naszych zestawów szkoleniowych i testowych. To jest problem i musimy się upewnić, że są takie same. Aby to osiągnąć, tworzymy DFM dla danych testowych i stosujemy do niego filtr, który zachowuje tylko terminy obecne w naszym szkoleniowym DFM:

test.dfm <-build_dfm(test)

test.dfm <- dfm_selet(test.dfm, pattern = train.dfm, selectio = „keep”

Co więcej, jeśli się nad tym zastanowić, część TF-IDF ważąca korpus, czyli IDF, będzie również inna niż te dwa zestawy danych ze względu na zmianę terminu przestrzeń dla korpusu. Dlatego musimy się upewnić, że ignorujemy te terminy, które są nowe (to znaczy nie widzieliśmy ich w naszych danych szkoleniowych) i używamy IDF z naszej procedury szkoleniowej, aby upewnić się, że nasze testy są prawidłowe. Aby to osiągnąć, najpierw obliczymy tylko część IDF TF-IDF dla naszych danych szkoleniowych i użyjemy tego podczas obliczania TF-IDF dla naszych danych testowych:

train.idf <- apply(as.matrixx(train.dfm) , 2,  inverse_document_frequency)

test.tfidf <- build_tf_idf(test.dfm, idf = train.idf)

test.tfid.df <- build_dfm_df(test, test.tfidf)

Teraz, gdy mamy dane testowe rzutowane na przestrzeń wektorową danych uczących, my może obliczyć analizę nastrojów dla nowego testowego DFM i obliczyć nasze prognozy:

test.sentiment <- sentyment_by(test$MESSAGE)

test.sentiments.df <- cbind(

test.tfidf.df,

WORD_COUNT = test.sentiment$word_count,

SENTIMENT = test.sentiment$ave_sentiment

)

Zwróć uwagę, że w tym przypadku nie trenujemy nowego modelu, po prostu używamy ostatniego stworzonego przez nas modelu i używamy go do dostarczania prognoz dla testowego DFM:

preditions <-p redict(model.6, test.sentiments.df)

Aby wiedzieć, jak dobrze przewidzieliśmy, możemy po prostu wydrukować model, tak jak robiliśmy to wcześniej, ponieważ po prostu patrzylibyśmy na wyniki procesu uczenia, który nie obejmuje prognoz dla danych testowych. To, co musimy zrobić, to stworzyć macierz pomyłki i obliczyć predykcyjne metryki dokładności, tak jak robiliśmy to wcześniej z funkcją confusionMatrix(). Jak widać, nasze wyniki wydają się być prawidłowe, ponieważ uzyskaliśmy przewidywalną dokładność 71,91% dla wcześniej niewidocznych danych, co jest bardzo zbliżone do przewidywalnej dokładności danych treningowych i jest o 12% większe niż tylko zgadywanie rzeczywistego odsetka wielokrotnych zakupów . W przypadku danych tekstowych i problemu, z którym mamy do czynienia, wyniki te są całkiem dobre. Jeśli wiesz, jak interpretować inne metryki, upewnij się, że porównujesz je z tymi, które mieliśmy dla naszego pierwszego modelu, aby zdać sobie sprawę, jak ewoluowały nasze wyniki w trakcie naszej pracy.

cofusionMatrix(predixtions, test$MULT_PURCHASES)

#> Confusion Matrix and Statistics

#>

#> Reference

#> Prediction FALSE TRUE

#> FALSE 11 4

#> TRUE 21 53

#>

#> Accuracy : 0.7191

#> 95% CI : (0.6138, 0.8093)

#> No Information Rate : 0.6404

#> P-Value [Acc > NIR] : 0.073666

#>

#> Kappa : 0.3096

#> Mcnemar’s Test P-Value : 0.001374

#>

#> Sensitivity : 0.3438

#> Specificity : 0.9298

#> Pos Pred Value : 0.7333

#> Neg Pred Value : 0.7162

#> Prevalence : 0.3596

#> Detection Rate : 0.1236

#> Detection Prevalence : 0.1685

#> Balanced Accuracy : 0.6368

#>

#> ‘Positive’ Class : FALSE

Jeśli zamierzasz testować za pomocą DFM, który został utworzony przy użyciu SVD, musisz wykonać odpowiednią transformację, aby upewnić się, że pracujesz we właściwej przestrzeni semantycznej, zanim utworzysz jakiekolwiek przewidywania. Jeśli zastosowałeś procedurę taką jak ta pokazana w tym rozdziale, musisz pomnożyć w lewo testowy DFM (z podobnymi przekształceniami jak twój treningowy DFM) przez wektor osobliwych wartości skorygowanych przez sigma, jednocześnie odpowiednio transponując struktury. Dokładna transformacja będzie zależeć od używanych struktur danych i zastosowanych do nich procesów, ale zawsze pamiętaj, aby upewnić się, że zarówno dane treningowe, jak i testowe działają w tej samej przestrzeni semantycznej:

sigma.inverse <- 1 / train.bigrams.svd$d

u.transpose <- t(train.bigrams.svd$u)

test.bigrams.svd <- t9sigma.inverse * u.transpose %*%

t(test.bigrams.tfidf))

test,bigrams,svd,df <- build_dfm_df(test, test.bigrams.svd)