我试图将随机森林分类器应用于一组具有混合数据类型的数据;值得注意的是它有浮子和弦。我意识到我可以通过使用像热编码这样的东西来转换字符串,但我的理解是随机森林的一个好处是能够混合数据类型。因此,考虑到这一点,我使用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需要一个单一的同类数据类型,由于字符串和浮点数的混合,我不会这样做。我该如何解决这个问题?
答案 0 :(得分:1)
X
必须是浮点值矩阵(np.float32
,以获得树木/森林的最佳性能)。其他任何东西都需要通过某种形式的特征提取转换为浮点数。