генерировать анизотропные данные в склеарне - PullRequest
0 голосов
/ 30 января 2019

В документации sklearn они предоставляют код для преобразования большого количества нормально распределенных данных в анизотрипически распределенные данные, как показано ниже

transformation = [[0.60834549, -0.63667341], [-0.40887718, 0.85253229]]
X_aniso = np.dot(X, transformation)

ссылка на код здесь

Мне интересно, какова функция, соответствующая th записи в матрице преобразования.Или вообще, как можно преобразовать изотропные гауссовские капли в анизотрипные?

Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 30 января 2019

Функция является своего рода линейным преобразованием , вы можете получить конкретный угол и масштаб операций, используя формулы, описанные здесь .

Если вы хотитеЧтобы создать анизотропную каплю, вам нужно срезать ее вдоль одного измерения, чтобы превратить в какой-то эллипсоид.

Например, в 2D:

from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
import numpy as np

fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(10, 5))

n_samples = 1500
random_state = 170
X, y = make_blobs(n_samples=n_samples,
                  random_state=random_state, center_box=(0, 20))
ax1.scatter(X[:, 0], X[:, 1], c=y)
ax1.set_title('default')


theta = np.radians(60)
t = np.tan(theta)
shear_x = np.array(((1, t), (0, 1))).T


X_rotated = X.dot(shear_x)
ax2.scatter(X_rotated[:, 0], X_rotated[:, 1], c=y)
ax2.set_title('%1.f degrees X shearing' % np.degrees(theta))


theta = np.radians(70)
t = np.tan(theta)

shear_y = np.array(((1, 0), (t, 1))).T

X_rotated = X.dot(shear_y)
ax3.scatter(X_rotated[:, 0], X_rotated[:, 1], c=y)
ax3.set_title('%1.f degrees Y shearing' % np.degrees(theta))
plt.tight_layout()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...