我正在对数据集中的特征进行降维的主成分分析。但是,在尝试使模型适合自己的功能时,我总是遇到此错误消息:
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
答案 0 :(得分:0)
通常,scikit-learn
设计用于数字数据类型(整数和浮点数)。在大熊猫中,您通常会遇到category
,对象(dtype('O')
),datetime64
,timedelta64
或其他非数字类型。 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)