N krotna walidacja krzyżowa <- R Studio

0

Witam, mam problem z walidacją krzyżową w R Studio.
Muszę podzielić tablice na N równych części, powiedzmy na 10 części, a następnie w pętli:
1-krok - 1 część potraktować jako tablice testową a pozostałe jako tablice treningowe
2-krok - 2 część potraktować jako tablice testową a pozostałe jako tablice treningowe
3-krok - 3 część potraktować jako tablice testową a pozostałe jako tablice treningowe
i tak do 10 cześci.
Chodzi o to, żeby atrybuty z tablicy testowej w żadnym kroku sie nie powtarzały.
Wyczytałem ze do tego stosuje się walidacje krzyżową, ale nie wiem jak dokładnie jej używać, mógłby ktoś podpowiedzieć jak wykorzystać ta funkcję zeby pasowała do mojego problemu.
Wszędzie funkcja ta stosowana jest do wyznaczenia jednego zbioru losowych liczb, mi potrzeba wyznaczyć 10 takich zbiorów w każdym obiegu pętli, bez powtórzeń.

Z góry dzięki za pomoc

1
 
# zbiór treningowy 
df[as.integer(rownames(df)) %% N != i,]

# zbiór testowy
df[as.integer(rownames(df)) %% N == i,]

df - zbiór dnaych
N - liczba części na które chcesz podzielić dane
i - aktualna iteracja

Chcesz to zrobić w R, RStudio to ide ;)

0

Jeżeli chodzi o taki zapis, to nie działa :/ w zmeinnej "test" jest wartość numeric(0) czyli cos nie działa poprawinie :(
Tak, robię to w RStudio :D w sumei dopiero zaczynam przygodę z R :D

 
for(i in 1:N){
  # zbiór treningowy 
  trening <- df[as.integer(rownames(df)) %% N != i,]
  
  # zbiór testowy
  test <- df[as.integer(rownames(df)) %% N == i,]
0
szupek450 napisał(a):
 
for(i in 1:N){

powinno być for(i in 1:(N-1)). Reszta z dzielenia przez N nigdy nie będzie równa N, prawda?

0

Nadal w zmiennej test są wartości numeric(0)
Jest możliwość zrobienia w R tablicy dynamicznej, albo jakiejś listy do której bede mógł "doklejać" wartości. Wtedy zrobiłbym to w dwóch pętlach i odpowiednie liczby zapisywał do tablicy

 
for(i in 1:(N-1)){

    trening <- B[as.integer(rownames(B)) %% N != i,]
    
    test <- B[as.integer(rownames(B)) %% N == i,]
    print(test)
  }
0

Nie wiem jak wygląda twój zbiór danych.

 
df <- iris

for (i in 0:9){
  # zbiór treningowy 
  trening <- df[as.integer(rownames(df)) %% 10 != i,]
  
  # zbiór testowy
  test <- df[as.integer(rownames(df)) %% 10 == i,]

}

ale powyższy kod działa bez zarzutów.

Jest możliwość zrobienia w R tablicy dynamicznej, albo jakiejś listy do której bede mógł "doklejać" wartości.

Jeżeli chcesz, tylko dokleić wartości do której grupy należy dana obserwacja wystarczy dokleić dodatkową kolumnę.
df$group <- as.integer(rownames(df)) %% 10

0

Dobra :D u mnie też działa :)
Początkowo sprawdzałem to na małej tablicy którą sam stworzyłem, i okazało sie ze moja tablica była typu numeric, a bazy typu iris to list dlatego algorytm nie działał :D
Dzięki wielkie za podpowiedź teraz zabieram sie za robotę a gdybym dalej miał problemy bede pisał :D
Pozdro :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1