如何解决为什么在执行 sklearn 的分解模块中存在的 KernalPCA 方法时出现此错误
我在 kaggle (https://www.kaggle.com/ronitf/heart-disease-uci) 的心脏病数据集上使用 sklearn 库尝试使用 Kernal PCA,因此,我在列表“P”中创建了所有类型内核的列表并传递到 KernalPCA()参数化内核的方法。
当我执行以下代码时,我在代码后收到此错误消息。
情节的输出完全没问题,但我得到了错误
我很好奇为什么?有人可以帮忙吗?
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,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.13545204]])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。