Python 类型错误:'<';在';str';和';int';在对k-means聚类进行主成分分析时

Python 类型错误:'<';在';str';和';int';在对k-means聚类进行主成分分析时,python,machine-learning,scikit-learn,spyder,Python,Machine Learning,Scikit Learn,Spyder,我试图在没有因变量的数据集上应用核主成分分析,用k-means进行聚类分析,以便学习如何进行聚类分析。以下是我的数据集示例(根据场景,这是一个购物中心的数据集,购物中心希望根据以下数据发现其客户细分): 首先,我省略了CustomerID列,然后对性别列进行编码,以便能够应用内核PCA。我是这样做的: # Importing the libraries import numpy as np import matplotlib.pyplot as plt import pandas as pd

我试图在没有因变量的数据集上应用核主成分分析,用k-means进行聚类分析,以便学习如何进行聚类分析。以下是我的数据集示例(根据场景,这是一个购物中心的数据集,购物中心希望根据以下数据发现其客户细分):

首先,我省略了CustomerID列,然后对性别列进行编码,以便能够应用内核PCA。我是这样做的:

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Importing the mall dataset with pandas
dataset = pd.read_csv('Mall_Customers.csv')
X = dataset.iloc[:, 1:5].values
df = pd.DataFrame(X)
#df is in order to visualize the "X" on variable explorer

#Encoding independent categorical variables 
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
X[:, 0] = labelencoder_X.fit_transform(X[:, 0])
onehotencoder = OneHotEncoder(categorical_features = [0])
X = onehotencoder.fit_transform(X).toarray()
执行此代码后,我可以获得float64类型的数组。下面是我创建的阵列中的示例:

0   1   19  15  39
0   1   21  15  81
1   0   20  16  6
1   0   23  16  77
1   0   31  17  40
1   0   22  17  76
1   0   35  18  6
1   0   23  18  94
0   1   64  19  3
1   0   30  19  72
0   1   67  19  14

然后,我想应用核主成分分析来得到主成分,我将在k-means中使用。然而,当我尝试执行下面的代码时,我得到了错误“TypeError:”我怀疑这就是正在发生的情况:


这是运行代码之前包含的文件或正在运行的某些代码的错误。问题在于“TypeError:”
n\u components='None'
。你不应该在这里放线

使用:
kpca=KernelPCA(n_components=None,kernel='rbf')

你能简单地再现这个问题吗?只是一个猜测,但你的数组中可能有nan或空格(X?)。您确定显示的数组是float64吗?尝试类似于
X.astype('float64')
的方法,看看它是否给您带来了问题。@Stev没有,先生,我尝试过了,它顺利地输出了数据集,我的数组中也没有空白。这里是我在执行X.astype('float64')数组([0,1,19,15,39.],[0,1,21,15,81.],[1,0,20,16,6.],[1,0,23,16,77.],[1,0,31,17,40.],[1,0,22,17,76.]之后的输出,[1,0,35,18,6.],[1,0,23,18,94.],…..等等@TomMakin简单的问题是,即使我的数据集中没有字符串或分类值(因为我对它们进行了编码),我无法成功执行内核PCA,不知何故我得到了这个类型的错误:'@Beg,oops,应该是
n_components='None'
。如果您想将它设置为None(不需要,因为它是默认值),那么使用
kpca=KernelPCA(n_components=None,kernel='rbf')
如果是,有什么方法可以检测并消除它吗?
0   1   19  15  39
0   1   21  15  81
1   0   20  16  6
1   0   23  16  77
1   0   31  17  40
1   0   22  17  76
1   0   35  18  6
1   0   23  18  94
0   1   64  19  3
1   0   30  19  72
0   1   67  19  14
# Applying Kernel PCA 
from sklearn.decomposition import KernelPCA
kpca = KernelPCA(n_components = 'None', kernel = 'rbf')
X = kpca.fit_transform(X)
explained_variance = kpca.explained_variance_ratio_