์ฌ๋ฐ๋ฅธ ๋ถ๋ฅ ๋ชจ๋ธ์ ํ์ต์ํค๊ธฐ ์ํด ๋ฐ์ดํฐ์ ์ ๊ณจ๊ณ ๋ฃจ ๋ถํ ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
https://github.com/ewine-project/UWB-LOS-NLOS-Data-Set
์๋ฅผ ์ํด ์ Github์์ 0๊ณผ 1๋ก ์ด๋ฃจ์ด์ง ์ด์ง ํด๋์ค ๋ฐ์ดํฐ ์ ์ด ์๋ค. ์ด ๊ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ผ๋ฒจ์ ๋ง๊ฒ ๊ณจ๊ณ ๋ฃจ ๋ถ๋ฆฌํ๋ ๊ฒ์ด๋ฏ๋ก ๋ฐ์ดํฐ ๋ถ์์ ๋ฐ๋ก ํ์ง ์๋๋ค.
csv ํ์ผ์ 7๊ฐ์ด๋ฉฐ, ์ด ๋ฐ์ดํฐ์ ๊ฐ์๋ 42000๊ฐ์ด๋ค.
sklearn ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ train_test_split์ ์ฌ์ฉํ๋ฉด ๊ฐ๋จํ ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํ ์ ์๋ค. ์๋ ์ฝ๋์์ ๊ฐ๋จํ ๋ฐ์ดํฐ์ ์ ๋ถ๋ฌ์ฌ ์ ์๋ค. ์ด ๋ฐ์ดํฐ์ ์ ๊ฒฝ์ฐ nlos๊ฐ ํด๋์ค(ํน์ ์ ๋ต ๋ฐ์ดํฐ)์ด๋ค. ์๋์ ๊ทธ๋ฆผ์ ๋ณด๊ฒ ๋๋ฉด 0, 1, 0, 1, 1...๋ก ๋ฌด์์๋ก ์ ๋ ฌ๋ผ์๋ค. ๊ฐ ํด๋์ค์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ฉด, 21000๊ฐ๋ฅผ ํ์ธํ ์ ์๋ค.
import uwb_dataset
import pandas as pd
columns, data = uwb_dataset.import_from_files()
for item in data:
item[15:] = item[15:]/float(item[2])
print("\nColumns :", columns.shape, sep=" ")
print("Data :", data.shape, sep=" ")
print(type(data))
df_uwb = pd.DataFrame(data=data, columns=columns)
print(df_uwb.head(10))
los_count = df_uwb.query("NLOS == 0")["NLOS"].count()
nlos_count = df_uwb.query("NLOS == 1")["NLOS"].count()
print("Line of Sight Count :", los_count)
print("Non Line of Sight Count :", nlos_count)
"""
๊ฒฐ๊ณผ
./dataset/uwb_dataset_part5.csv
./dataset/uwb_dataset_part7.csv
./dataset/uwb_dataset_part2.csv
./dataset/uwb_dataset_part3.csv
./dataset/uwb_dataset_part4.csv
./dataset/uwb_dataset_part1.csv
./dataset/uwb_dataset_part6.csv
Columns : (1031,)
Data : (42000, 1031)
<class 'numpy.ndarray'>
Line of Sight Count : 21000
Non Line of Sight Count : 21000
"""
ํ์ด์ฌ์ผ๋ก ๊ฐ๋ฐ์ ํ๋ฉด์ ๋๋ ๊ฒ์ ์ต๋ํ ๋ฐ๋ณต๋ฌธ์ ์ง์ํ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ํ์ด์ฌ์ ๋น ๋ฅด๊ฒ ๋ฐ๋ชจ ํ๋ก๊ทธ๋จ ๊ตฌํ์ ๋ง์ด ์ฌ์ฉํ๋๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด๋ฅผ ๊ฐ๋ฅ์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ํฐ ์ด์ ๋ ๋ด๊ฐ ๋ง๋ ์ฝ๋๋ ์ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด๊ธธ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฒ์ ์ฌ์ฉํ๊ณ ์ ํ๋ train_test_split์ sklearn ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ์์ด๋ค. sklearn๋ ๋จธ์ ๋ฌ๋ ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด์ง๋ง ๋ฅ๋ฌ๋ ์ฌ์ฉ์ ์์ด ๋ฌธ์ ๊ฐ ์๋ค.
train_test_split : ๋ฐฐ์ด ๋๋ ํ๋ ฌ์ ๋ฌด์์ ํ์ต ๋ฐ ํ ์คํธ ํ์ ์งํฉ์ผ๋ก ๋ถํ .
-test_size : 0~1 ์ฌ์ด์ ๊ฐ์ผ๋ก, ๊ธฐ๋ณธ test size๋ 0.25๋ก ์๋์ผ๋ก train size๋ 0.75์ด๋ค. ์๋์ ๊ทธ๋ฆผ์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ๋ถํ .
- random_state : shuffle ์ ์ดํ๋ ์ธ์์ด๋ค. ๋ชจ๋ธ์ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋ชจ๋ธ์ ๋์์ธํ๋ค. ํ์ง๋ง ๊ณต์ ํ ๊ฒ์ฆ์ ์ํด ๋๊ฐ์ ๋ฐ์ดํฐ์ ์ ํ์๋ก ํ๋ค. ๊ทธ ๋ ์ฌ์ฉํ๋ ์ธ์์ด๋ค.
- shuffle : ๋ถ๋ฆฌํ๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์์์ง ์ฌ๋ถ.
- stratify : ๊ฐ์ฅ ์ค์ํ ํ๋ผ๋ฏธํฐ. ํด๋์ค์ ๋ง๊ฒ ๊ณจ๊ณ ๋ฃจ ๋ถํ ํ ์ง ์ฌ๋ถ.
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(
df_uwb[["CIR"+str(i) for i in range(cir_n)]].values,
df_uwb['NLOS'].values,
test_size=0.2,
random_state=42,
shuffle=True,
stratify=df_uwb['NLOS'].values)
print("x_train shape :", x_train.shape, y_train.shape)
print("x_test shape :", x_test.shape, y_test.shape)
print("Train NLOS 0 count :", len(y_train[y_train==0]))
print("Train NLOS 1 count :", len(y_train[y_train==1]))
print("Test NLOS 0 count :", len(y_test[y_test==0]))
print("Test NLOS 0 count :", len(y_test[y_test==1]))
"""
x_train shape : (33600, 1016) (33600,)
x_test shape : (8400, 1016) (8400,)
Train NLOS 0 count : 16800
Train NLOS 1 count : 16800
Test NLOS 0 count : 4200
Test NLOS 0 count : 4200
"""