Взаимное перемешивание рядов ndarrays - PullRequest
1 голос
/ 05 мая 2020

У меня есть матрица X n на d, d на 1 вектор w и n на 1 вектор y, так что Xw = y

Я хотел бы перетасовать строки X и y взаимно. Это означает, что перемешивание может быть случайным, если оно применяется как к X, так и к y. Если, например, строка 20 в X стала строкой 3 в X, тогда строка 20 в y станет строкой 3 в y.

Я написал этот код:

def train_test_split(X, y, w, training_percentage=80):
    print(np.linalg.norm(X @ w - y))
    permutation = np.random.permutation(X.shape[0])
    np.take(X, permutation, axis=0, out=X)
    np.take(y, permutation, axis=0, out=y)
    print(np.linalg.norm(X @ w - y))

первый отпечаток равен нулю . Второй отпечаток - 1.4345819474787535e-09, который не равен нулю (хотя он близок).

Это проблема округления или я что-то не понимаю?

1 Ответ

0 голосов
/ 05 мая 2020

(a+b)+(c+d) может не равняться (a+c) + (b+d) из-за точности с плавающей запятой.

Простой эксперимент для этого:

np.random.seed(1)
a = np.random.rand(100)

# randomly shuffle and take the sum
sum_arr = [np.random.permutation(a).sum() for _ in range(100)]

# check if sum_arr contains unique value:
np.min(sum_arr) == np.max(sum_arr)
# Output: False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...