def __init__(self, n_dims, kernel="linear", copy=True): self.n_dims = n_dims self.copy = copy self.kernel = kernels.KERNEL_TYPES[kernel] # 将字符串转化为相应的核函数 self.X = None # 样本要保存 因为这是核方法 self.alphas = None self.lambdas = None self.centerer = KernelCenterer()
class KernelPCA: def __init__(self, n_dims, kernel="linear", copy=True): self.n_dims = n_dims self.copy = copy self.kernel = kernels.KERNEL_TYPES[kernel] # 将字符串转化为相应的核函数 self.X = None # 样本要保存 因为这是核方法 self.alphas = None self.lambdas = None self.centerer = KernelCenterer() def fit(self, X, y=None): self._fit(X) return self def transform(self, X): K = self.kernel(X, self.X) K = self.centerer.transform(K) return np.dot(K, self.alphas) / np.sqrt(self.lambdas) def fit_transform(self, X, y=None): self._fit(X) return self.alphas * np.sqrt(self.lambdas) def _fit(self, X): self.X = X # 计算核矩阵 K = self.kernel(X, X) # 中心化核矩阵 目的是为了隐式地让转换后的特征是归一化的! K = self.centerer.fit_transform(K) # 求核矩阵的特征值,特征向量 self.lambdas, self.alphas = scipy.linalg.eigh(K, eigvals=(K.shape[0] - self.n_dims, K.shape[0] - 1)) # 对特征值,特征向量进行处理 indices = self.lambdas.argsort()[::-1] self.lambdas = self.lambdas[indices] self.alphas = self.alphas[:, indices] # 去除特征值等于0的特征向量 self.alphas = self.alphas[:, self.lambdas > 0] self.lambdas = self.lambdas[self.lambdas > 0]
def test_center_kernel(): """Test that KernelCenterer is equivalent to StandardScaler in feature space""" rng = np.random.RandomState(0) X_fit = rng.random_sample((5, 4)) scaler = StandardScaler(with_std=False) scaler.fit(X_fit) X_fit_centered = scaler.transform(X_fit) K_fit = np.dot(X_fit, X_fit.T) # center fit time matrix centerer = KernelCenterer() K_fit_centered = np.dot(X_fit_centered, X_fit_centered.T) K_fit_centered2 = centerer.fit_transform(K_fit) assert_array_almost_equal(K_fit_centered, K_fit_centered2) # center predict time matrix X_pred = rng.random_sample((2, 4)) K_pred = np.dot(X_pred, X_fit.T) X_pred_centered = scaler.transform(X_pred) K_pred_centered = np.dot(X_pred_centered, X_fit_centered.T) K_pred_centered2 = centerer.transform(K_pred) assert_array_almost_equal(K_pred_centered, K_pred_centered2)
def test_center_kernel(): """Test that KernelCenterer is equivalent to StandardScaler in feature space""" rng = np.random.RandomState(0) X_fit = rng.random_sample((5, 4)) scaler = StandardScaler(with_std=False) scaler.fit(X_fit) X_fit_centered = scaler.transform(X_fit) K_fit = np.dot(X_fit, X_fit.T) # center fit time matrix centerer = KernelCenterer() K_fit_centered = np.dot(X_fit_centered, X_fit_centered.T) K_fit_centered2 = centerer.fit_transform(K_fit) assert_array_almost_equal(K_fit_centered, K_fit_centered2) # center predict time matrix X_pred = rng.random_sample((2, 4)) K_pred = np.dot(X_pred, X_fit.T) X_pred_centered = scaler.transform(X_pred) K_pred_centered = np.dot(X_pred_centered, X_fit_centered.T) K_pred_centered2 = centerer.transform(K_pred) assert_array_almost_equal(K_pred_centered, K_pred_centered2)
'GaussianProcessRegressor':GaussianProcessRegressor(), 'GaussianRandomProjection':GaussianRandomProjection(), 'GenericUnivariateSelect':GenericUnivariateSelect(), 'GradientBoostingClassifier':GradientBoostingClassifier(), 'GradientBoostingRegressor':GradientBoostingRegressor(), 'GraphLasso':GraphLasso(), 'GraphLassoCV':GraphLassoCV(), 'HuberRegressor':HuberRegressor(), 'Imputer':Imputer(), 'IncrementalPCA':IncrementalPCA(), 'IsolationForest':IsolationForest(), 'Isomap':Isomap(), 'KMeans':KMeans(), 'KNeighborsClassifier':KNeighborsClassifier(), 'KNeighborsRegressor':KNeighborsRegressor(), 'KernelCenterer':KernelCenterer(), 'KernelDensity':KernelDensity(), 'KernelPCA':KernelPCA(), 'KernelRidge':KernelRidge(), 'LSHForest':LSHForest(), 'LabelPropagation':LabelPropagation(), 'LabelSpreading':LabelSpreading(), 'Lars':Lars(), 'LarsCV':LarsCV(), 'Lasso':Lasso(), 'LassoCV':LassoCV(), 'LassoLars':LassoLars(), 'LassoLarsCV':LassoLarsCV(), 'LassoLarsIC':LassoLarsIC(), 'LatentDirichletAllocation':LatentDirichletAllocation(), 'LedoitWolf':LedoitWolf(),