Dataset Shuffle์ ํด์ผ ํ๋ ์ด์
๐ค Problem
๋ชจ๋ธ์ ํ์ต์ํค๋ ๊ณผ์ ์์ ์ด์ํ ํ์์ด ๋ํ๋ ๋ฌธ์ ์ ์ผ๋ก ์ผ์์ต๋๋ค.
๋ฌธ์ ๋ train_set์ Accuracy๋ 100%๋ก ์ ์ง๋๋ฉฐ Loss๋ ๋ณ๋์ด ๊ฑฐ์ ์๋ค๊ฐ ๊ฐ์๊ธฐ ํ ๋ ๋ฒ ์์ฒญ ์์นํ๋ ํ์์ด์์ต๋๋ค.
validation_set์์๋ ์ด๋ฌํ ๋ฌธ์ ์ ์ ์ฐพ์ ์ ์์์ต๋๋ค. Accuracy๊ฐ 100%๋ก ์ ์ง๋๊ณ , Loss๋ 0์ผ๋ก ์ ์ง๋์์ต๋๋ค.
์ด๋ฐ ์๋ฒฝํ ๋ชจ๋ธ์ด ํ์ค์์ ์กด์ฌํ ์ ์์๋ฟ๋๋ฌ ์๋ฒฝํ๋ค๋ฉด test_set์์๋ ์ข์ ๊ฒฐ๊ณผ๊ฐ ์์์ด์ผ ํ์ง๋ง, Accuracy๋ ์ฝ 50%, Loss๋ ์ฝ 84.4๊ฐ ๋์์ต๋๋ค.
๐ Solution
๋ฌธ์ ์ ์ ๋ฐ์ดํฐ์ ์ด ์์ ์์ฌ์์ง ์์๊ธฐ์ ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋๋ค.
๋ฌธ์ ์ ๋ํ ์ด์ ์ถ์ธก
๋ชจ๋ธ์ด ๊ฐ์ ๋ํด์๋ง ํ์ตํ๋ค๊ฐ ๊ณ ์์ด๊ฐ ๋ค์ด์ค๋ Loss๊ฐ ๊ฐ์๊ธฐ ํ์ด ์ค๋ฅด๋ ๊ฒ ์ค๋ช ์ด ๋ฉ๋๋ค.
๋ํ, validation_set์์๋ train_set์์ ์ผ๋ถ๋ฅผ ๋ผ์ด์ค๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๋ํด์๋ง ํ์ตํ๋ ๋ชจ๋ธ์ ๊ฐ๋ก๋ง ๊ฒ์ฆํ๋ 100%๊ฐ ๋์ฌ ์๋ฐ์ ์์์ฃ .
๊ทธ๋ผ ๋ฐ์ดํฐ์ ์ ์์ด์ผ ํ๋๋ฐ ์ด๋ป๊ฒ ์์ ์ ์์๊น์?
์ฐ์ , train_set๊ณผ train_target ๊ฐ์ ์ธ๋ฑ์ค์ ๊ด๊ณ๋ ๊ณ์ ์ผ์นํด์ผ ํฉ๋๋ค. ์์๋ค๊ฐ๋ ๋ฐ์ดํฐ์ ์ ์๋ฏธ๊ฐ ์์ด์ง์ฃ .
์ด๋ฅผ ๋ pythonicํ๊ฒ ์ง๊ธฐ ์ํด zip์ ์ฌ์ฉํฉ๋๋ค.
shuffle_data = [[x, y] for x, y in zip(train_set, train_target)]
zip์ ํตํด ๋ฌถ์ด์ ํ๋์ sample์ ๋ฆฌ์คํธ๋ก ๋ง๋ค์ด๋ฒ๋ฆฝ๋๋ค.
์ด์ ์๊ธฐ ์ํด์ random์ด๋ผ๋ ๋ชจ๋์ ๊ฐ์ ธ์ต๋๋ค.
random.shuffle(shuffle_data)
x_train = [n[0] for n in shuffle_data]
y_train = [n[1] for n in shuffle_data]
random.shuffle์ด๋ผ๋ ํจ์๋ฅผ ํตํด ์์ด์ฃผ๊ณ , index 0์ ์ ์ฅ๋ train_set์ ๊ฐ์ ธ์ค๊ณ , index 1์ ์ ์ฅ๋ train_target์ ๊ฐ์ ธ์ต๋๋ค.
๐ Reference
https://jybaek.tistory.com/781
[python] ์ฌ์ฉ์ ๋ฐ์ดํฐ์ ์ ํ
์ด๋ฏธ ์ ๊ตฌํ๋์ด ์๋ ์์ค์ฝ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ๋จธ์ ๋ฌ๋์ ๊ฒฝ์ฐ์๋ ๋ชจ๋ธ ๋ด์ shuffle ์์ฒด๊ฐ ๊ตฌ์ถ๋์ด ์๋ ๋ฐ๋ฉด์ ๋ฐ์ดํฐ ์์ง๊ณผ ์ ์ , ๋ชจ๋ธ ๊ตฌ์ถ๊น์ง ๋ฐ๋ฐ๋ฅ์์๋ถํฐ ์์ ์ฌ๋ฆฌ๋ค๋ณด๋ฉด
jybaek.tistory.com