在sklearn文档中,它们提供了将正态分布的数据块转换为各向异性分布的数据的代码,如下所示
transformation = [[0.60834549, -0.63667341], [-0.40887718, 0.85253229]]
X_aniso = np.dot(X, transformation)
链接到代码here
我想知道与转换矩阵中第th个条目相对应的函数是什么。或者一般来说,如何将等高斯Blob转换为各向异性?
任何人都可以帮忙吗?
答案 0 :(得分:2)
该函数是linear transformation的一种,您可以使用here中所述的公式来获取操作的具体角度和范围。
如果要使Blob各向异性,则需要沿一个维度对其进行剪切以将其转换为某种椭圆体。
例如在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()