为什么在执行 sklearn 分解模块中存在的 KernalPCA 方法时出现此错误

Why I'm getting this error while executing KernalPCA method present in decomposition module of sklearn

我在 kaggle (https://www.kaggle.com/ronitf/heart-disease-uci) 的心脏病数据集上使用 sklearn 库尝试 Kernal PCA,因此,我在列表“P”中创建了所有类型的内核列表,并传递到 KernalPCA () 方法参数 kernel.

当我执行下面的代码时,我在代码后收到了这条错误消息。

绘图的输出完全没问题,但我收到错误

我很好奇为什么?有人可以帮忙吗?

from sklearn import decomposition
from sklearn.preprocessing import StandardScaler
from scipy import sparse
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import seaborn as sns
df = pd.read_csv('heart.csv')
target = df['target']
df.head()
Scaler = StandardScaler()
# X represents Standardized data of df
X = Scaler.fit_transform(df)
X.shape
n=2
p = ['linear','poly','rbf','sigmoid','cosine','precomputed']
for i in p:
    trans = decomposition.KernelPCA(n_components=n,kernel=i)
    Xli = trans.fit_transform(X)
    y = pd.DataFrame(Xli,columns=('PC1','PC2'))
    y['Target'] = target

您最后选择的内核失败。这工作得很好:

np.random.seed(111)
X = np.random.uniform(0,1,(10,4))
target = np.random.normal(0,1,10)

p = ['linear','poly','rbf','sigmoid','cosine']
for i in p:
    trans = decomposition.KernelPCA(n_components=n,kernel=i)
    Xli = trans.fit_transform(X)
    y = pd.DataFrame(Xli,columns=('PC1','PC2'))
    y['Target'] = target

如果指定kernel = 'precomputed',则需要提供gram矩阵,参见this answer,例如,如果我们用线性核预先计算gram矩阵:

def linear_kernel(X, Y):
    return X.dot(Y.T)

gram = linear_kernel(X, X)
trans = decomposition.KernelPCA(n_components=n,kernel="precomputed")
trans.fit_transform(gram)

array([[ 0.34115243,  0.08282281],
       [ 0.34927523, -0.51709   ],
       [-0.48173365, -0.05455087],
       [-0.34252946, -0.21207875],
       [ 0.66528647, -0.12052876],
       [ 0.04018184,  0.71760041],
       [-0.35535148, -0.2107046 ],
       [ 0.04163704,  0.16239367],
       [-0.48902704,  0.01668406],
       [ 0.23110862,  0.13545204]])

比较:

trans = decomposition.KernelPCA(n_components=n,kernel="linear")
trans.fit_transform(X)

array([[ 0.34115243,  0.08282281],
       [ 0.34927523, -0.51709   ],
       [-0.48173365, -0.05455087],
       [-0.34252946, -0.21207875],
       [ 0.66528647, -0.12052876],
       [ 0.04018184,  0.71760041],
       [-0.35535148, -0.2107046 ],
       [ 0.04163704,  0.16239367],
       [-0.48902704,  0.01668406],
       [ 0.23110862,  0.13545204]])