使用具有混合数据类型的ndarray进行分类

时间:2014-06-16 18:33:15

标签: numpy scikit-learn

我试图将随机森林分类器应用于一组具有混合数据类型的数据;值得注意的是它有浮子和弦。我意识到我可以通过使用像热编码这样的东西来转换字符串,但我的理解是随机森林的一个好处是能够混合数据类型。因此,考虑到这一点,我使用loadtxt将数据加载到结构化数组中:

dtypes = np.dtype([
    ('height', np.float32), ...
])
X = np.loadtxt("dataset.csv", delimiter=",", dtype=dtypes, usecols=tuple(range(len(dtypes))))

但是当我真正尝试运行分类器时:

clf = RandomForestClassifier(min_samples_split=1, n_jobs=-1, max_features='sqrt', n_estimators=200)
clf.fit(X, y1)

我遇到了这个问题:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-33-3b0a3607bfd5> in <module>()
      9 clf = RandomForestClassifier(min_samples_split=1, n_jobs=-1, max_features='sqrt', n_estimators=200)
     10 print clf
---> 11 clf.fit(X, y2)

/usr/local/lib/python2.7/dist-packages/sklearn/ensemble/forest.pyc in fit(self, X, y, sample_weight)
    258 
    259         # Remap output
--> 260         n_samples, self.n_features_ = X.shape
    261 
    262         y = np.atleast_1d(y)

我意识到结构化数组是不同的并且具有(在我的情况下)(11999)的维度,所以显然它不能解包特征的数量。我知道我可以尝试重塑数据,但我的理解是ndarray需要一个单一的同类数据类型,由于字符串和浮点数的混合,我不会这样做。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

X必须是浮点值矩阵(np.float32,以获得树木/森林的最佳性能)。其他任何东西都需要通过某种形式的特征提取转换为浮点数。