Numpy 使用混合数据类型的ndarrays进行分类

Numpy 使用混合数据类型的ndarrays进行分类,numpy,scikit-learn,Numpy,Scikit Learn,我试图将随机林分类器应用于一组具有混合数据类型的数据;值得注意的是,它同时具有浮点和字符串。我意识到我可以通过使用类似热编码的方法来转换字符串,但我的理解是随机林的好处之一是能够混合数据类型。因此,考虑到这一点,我使用loadtxt将数据加载到一个结构化数组中: dtypes = np.dtype([ ('height', np.float32), ... ]) X = np.loadtxt("dataset.csv", delimiter=",", dtype=dtypes, usec

我试图将随机林分类器应用于一组具有混合数据类型的数据;值得注意的是,它同时具有浮点和字符串。我意识到我可以通过使用类似热编码的方法来转换字符串,但我的理解是随机林的好处之一是能够混合数据类型。因此,考虑到这一点,我使用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)
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在()
9 clf=RandomForestClassifier(最小样本数分割=1,n个作业=1,最大特征数=sqrt,n个估计数=200)
10打印clf
--->11 clf.配合(X,y2)
/usr/local/lib/python2.7/dist-packages/sklearn/employ/forest.pyc in-fit(self,X,y,sample_-weight)
258
259#重新映射输出
-->260个n_样本,self.n_特征=X.shape
261
262 y=np.至少为1d(y)

我意识到一个结构化数组是不同的,它的维数(在我的例子中)是(11999,)所以很明显它不能解包出特性的数量。我知道我可以尝试重塑数据,但我的理解是ndarray需要一个单一的同质数据类型,而我的不是,因为字符串和浮点的混合。如何着手解决此问题?

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

您的数据类型应该是浮点数,它如何理解或使用字符串?您必须从字符串中提取一些属性,例如长度、tf idf等。。用这个作为一个特征啊,谢谢你,我没有意识到这一点。我使用了LabelEncoder并将它们转换为float32s,效果很好。@RichardBender:请使用
OneHotEncoder
<代码>标签编码用于类标签。