Właśnie zacząłem używać języka R i nie jestem pewien, jak włączyć mój zestaw danych do następującego przykładowego kodu:
sample(x, size, replace = FALSE, prob = NULL)
Mam zbiór danych, który muszę umieścić w zestawie treningowym (75%) i testowym (25%). Nie jestem pewien, jakie informacje mam umieścić w x i rozmiarze? Czy x jest plikiem zestawu danych i ile mam próbek?
x
może być indeksem (wiersz / kol., powiedz) twojegodata
.size
może być0.75*nrow(data)
. Spróbujsample(1:10, 4, replace = FALSE, prob = NULL)
zobaczyć, co to robi.Odpowiedzi:
Istnieje wiele podejść do partycjonowania danych. Aby uzyskać pełniejsze podejście, przyjrzyj się
createDataPartition
funkcji wcaTools
pakiecie.Oto prosty przykład:
źródło
mtcars[!train_ind]
i chociaż nie powiodło się, nie działało zgodnie z oczekiwaniami. Jak mogę podzbiór za pomocą!
?!
są używane dla logicznych (TRUE/FALSE
), a nie indeksów. Jeśli chcesz!
podzielić podzbiór przy użyciu , spróbuj czegoś takiego jak mtcars [!seq_len(nrow(mtcars)) %in% train_ind
,] (nie testowane).createDataPartition
wcaret
niecaTools
?Można to łatwo zrobić poprzez:
Korzystając z pakietu caTools :
źródło
sample = sample.split(data[,1], SplitRatio = .75)
Powinno usunąć potrzebę nazwania kolumny.Użyłbym
dplyr
do tego, czyni to bardzo prostym. Wymaga zmiennej id w zestawie danych, co i tak jest dobrym pomysłem, nie tylko do tworzenia zestawów, ale także do śledzenia podczas projektu. Dodaj, jeśli jeszcze nie zawiera.źródło
To jest prawie ten sam kod, ale w ładniejszym wyglądzie
źródło
źródło
Podzielę `` a '' na pociąg (70%) i przetestuję (30%)
Gotowe
źródło
Moje rozwiązanie jest w zasadzie takie samo jak dickoa, ale trochę łatwiejsze do zinterpretowania:
źródło
Po prostu bardziej zwięzły i prosty sposób przy użyciu niesamowitej biblioteki dplyr :
źródło
Default[-train_index,]
w ostatniej linii.Jeśli wpiszesz:
Jeśli uruchomi menu pomocy, aby wyjaśnić, co oznaczają parametry przykładowej funkcji.
Nie jestem ekspertem, ale mam kod:
To da ci 75% pociąg i 25% test.
źródło
Po przejrzeniu wszystkich zamieszczonych tutaj metod, nie widziałem nikogo używającego
TRUE/FALSE
do wybierania i odznaczania danych. Pomyślałem więc, że podzielę się metodą wykorzystującą tę technikę.Wyjaśnienie
Istnieje wiele sposobów wybierania danych z R, najczęściej ludzie używają indeksów dodatnich / ujemnych, aby odpowiednio zaznaczyć / odznaczyć. Jednak te same funkcje można osiągnąć za pomocą
TRUE/FALSE
do zaznaczania / odznaczania.Rozważmy następujący przykład.
źródło
Moje rozwiązanie tasuje rzędy, następnie traktuję pierwsze 75% rzędów jako pociąg, a ostatnie 25% jako test. Super proste!
źródło
Mogę zasugerować użycie pakietu rsample:
źródło
scorecard
pakiet ma do tego przydatną funkcję, w której możesz określić współczynnik i ziarnoDane dotyczące testu i pociągu są przechowywane na liście i można uzyskać do nich dostęp, dzwoniąc
dt_list$train
idt_list$test
źródło
Poniżej funkcja, która tworzy
list
podpróbki o tym samym rozmiarze, co nie jest dokładnie tym, czego chciałeś, ale może okazać się przydatne dla innych. W moim przypadku, aby utworzyć wiele drzew klasyfikacyjnych na mniejszych próbach, aby przetestować nadmierne dopasowanie:Przykład:
źródło
Użyj pakietu caTools w przykładowym kodzie R będzie wyglądać następująco: -
źródło
Użyj podstawy R. Funkcja
runif
generuje równomiernie rozłożone wartości od 0 do 1, zmieniając wartość odcięcia (rozmiar pociągu w przykładzie poniżej), zawsze będziesz mieć mniej więcej taki sam procent losowych rekordów poniżej wartości odcięcia.źródło
Zakładając, że df jest twoją ramką danych i chcesz ją utworzyć 75% pociąg i 25% test
Następnie utwórz pociąg i przetestuj ramki danych
źródło
sample.split()
Funkcja dodać jedną dodatkową kolumnę „Podziel1” do dataframe i 2/3 wiersze będą miały tę wartość jako prawdziwy i innych jako FALSE.Now wiersze gdzie Podziel1 jest prawdą zostaną skopiowane do pociągu i inne wiersze zostaną skopiowane do testu ramka danych.źródło
Wpadłem na ten, to też może pomóc.
źródło
Możemy podzielić dane na określony stosunek tutaj jest to 80% pociągu i 20% w testowym zbiorze danych.
źródło
Uważaj
sample
na rozdzielanie, jeśli szukasz powtarzalnych wyników. Jeśli dane zmienią się nawet nieznacznie, podział będzie różny, nawet jeśli użyjeszset.seed
. Na przykład, wyobraź sobie, że posortowana lista identyfikatorów w twoich danych zawiera wszystkie liczby od 1 do 10. Jeśli po prostu upuścisz jedną obserwację, powiedzmy 4, próbkowanie według lokalizacji przyniesie inne wyniki, ponieważ teraz od 5 do 10 wszystkich przeniesionych miejsc.Alternatywną metodą jest użycie funkcji skrótu do mapowania identyfikatorów na niektóre liczby pseudolosowe, a następnie próbkowanie na modach tych liczb. Ta próbka jest bardziej stabilna, ponieważ przypisanie jest teraz określane na podstawie skrótu każdej obserwacji, a nie przez jej względną pozycję.
Na przykład:
[1] 9999
[1] 5000
[1] 2653
[1] 5057
[1] 5057
wielkość próby nie jest dokładnie 5000, ponieważ przypisanie jest probabilistyczne, ale nie powinno to stanowić problemu w przypadku dużych próbek dzięki prawu dużych liczb.
Zobacz też: http://blog.richardweiss.org/2016/12/25/hash-splits.html i /crypto/20742/statistical-properties-of-hash-functions-when -calculating-modulo
źródło
źródło
Istnieje bardzo prosty sposób na wybranie liczby wierszy przy użyciu indeksu R dla wierszy i kolumn. Pozwala to CZYSTO podzielić zestaw danych na liczbę wierszy - powiedzmy pierwsze 80% danych.
W R wszystkie wiersze i kolumny są indeksowane, więc DataSetName [1,1] jest wartością przypisaną do pierwszej kolumny i pierwszego wiersza „DataSetName”. Mogę wybrać wiersze za pomocą [x,] i kolumny za pomocą [, x]
Na przykład: Jeśli mam zestaw danych o wygodnej nazwie „dane” ze 100 wierszami, mogę wyświetlić pierwsze 80 wierszy za pomocą
W ten sam sposób mogę zaznaczyć te wiersze i podzielić je za pomocą:
Teraz mam podzielone dane na dwie części bez możliwości ponownego próbkowania. Szybko i łatwo.
źródło