安装PCA时无法理解数据类型

时间:2019-06-04 17:41:38

标签: python pandas pca

我正在对数据集中的特征进行降维的主成分分析。但是,在尝试使模型适合自己的功能时,我总是遇到此错误消息:

  

TypeError:数据类型无法理解

这是我的代码:

a = dat.iloc[:,[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
         ,16,17,18,19,20,21,22,23,24,25,26,27,28,29,
         31,32]]
scaler = MinMaxScaler(feature_range=(0, 1))
rescaled = scaler.fit_transform(a)

以下是以下数据的示例:

    Time    V1         V2         V3          V4           V5         V6          V7          V8           V9       ...   V22         V23          V24        V25         V26         V27    V28    Amount  Hours   Fraudulent
0   0.0 -1.359807   -0.072781   2.536347    1.378155    -0.338321   0.462388    0.239599    0.098698    0.363787    ... 0.277838    -0.110474   0.066928    0.128539    -0.189115   0.133558    -0.021053   149.62  0   0.206
1   0.0 1.191857    0.266151    0.166480    0.448154    0.060018    -0.082361   -0.078803   0.085102    -0.255425   ... -0.638672   0.101288    -0.339846   0.167170    0.125895    -0.008983   0.014724    2.69    0   0.206
2   1.0 -1.358354   -1.340163   1.773209    0.379780    -0.503198   1.800499    0.791461    0.247676    -1.514654   ... 0.771679    0.909412    -0.689281   -0.327642   -0.139097   -0.055353   -0.059752   378.66  0   0.206
3   1.0 -0.966272   -0.185226   1.792993    -0.863291   -0.010309   1.247203    0.237609    0.377436    -1.387024   ... 0.005274    -0.190321   -1.175575   0.647376    -0.221929   0.062723    0.061458    123.50  0   0.206

这是a.dtypes的输出:

Time           float64
V1             float64
V2             float64
V3             float64
V4             float64
V5             float64
V6             float64
V7             float64
V8             float64
V9             float64
V10            float64
V11            float64
V12            float64
V13            float64
V14            float64
V15            float64
V16            float64
V17            float64
V18            float64
V19            float64
V20            float64
V21            float64
V22            float64
V23            float64
V24            float64
V25            float64
V26            float64
V27            float64
V28            float64
Amount         float64
Hours         category
Fraudulent     float64

1 个答案:

答案 0 :(得分:0)

通常,scikit-learn设计用于数字数据类型(整数和浮点数)。在大熊猫中,您通常会遇到category,对象(dtype('O')),datetime64timedelta64或其他非数字类型。 Pandas专为分析而设计,因此将对这些类型“做正确的事”。 Scikit需要执行线性代数运算,并且如何您表示数据对线性代数产生数值影响。因此,决定如何进行转换通常是分析员而不是图书馆的责任。

对于此示例中的数据类型,您将需要做出一个明确的决定,即如何scikit-learn用数字表示它们。

例如,对于categorical dtype,您可以使用pandas get_dummies函数进行一次热编码。这将为原始列中的每个可能的值创建一个新列,如果该列是该值,则创建一个1;如果不是,则创建一个0

In [2]: import pandas as pd

In [3]: s = pd.Series(['a', 'b', 'c', 'a'], dtype='category')

In [4]: s
Out[4]:
0    a
1    b
2    c
3    a
dtype: category
Categories (3, object): [a, b, c]

In [5]: pd.get_dummies(s)
Out[5]:
   a  b  c
0  1  0  0
1  0  1  0
2  0  0  1
3  1  0  0

这是您的示例中的外观:

a = a.drop('Hours', axis=1).join(pd.get_dummies(a.Hours))

但是,在这种情况下,我希望小时数更自然地表示为浮点数或整数。因此,您可以这样做:

a.Hours = a.Hours.astype(float)