使用scikit-learn训练多维数据

4 投票
1 回答
10478 浏览
提问于 2025-04-18 14:47

这是一个非常基础的概念:我在训练的时候有多个依赖项。我的数据都是文本,而且我有三个不同的字段。我找到的每个例子都是这样的文本数据:

data = ['text1','text2',...]

而我的数据看起来是这样的:

data = [['text1','text2','text3'],[...],...]

但是当我尝试将数据拟合时,我得到了以下错误信息:

ValueError                                Traceback (most recent call last)
<ipython-input-25-e3356a0f62f8> in <module>()
----> 1 classifier.fit(X,y)

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/sklearn/svm/base.pyc in fit(self, X, y, sample_weight)
    140                              "by not using the ``sparse`` parameter")
    141 
--> 142         X = atleast2d_or_csr(X, dtype=np.float64, order='C')
    143 
    144         if self.impl in ['c_svc', 'nu_svc']:

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/sklearn/utils/validation.pyc in atleast2d_or_csr(X, dtype, order, copy)
    114     """
    115     return _atleast2d_or_sparse(X, dtype, order, copy, sparse.csr_matrix,
--> 116                                 "tocsr")
    117 
    118 

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/sklearn/utils/validation.pyc in _atleast2d_or_sparse(X, dtype, order, copy, sparse_class, convmethod)
     94         _assert_all_finite(X.data)
     95     else:
---> 96         X = array2d(X, dtype=dtype, order=order, copy=copy)
     97         _assert_all_finite(X)
     98     return X

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/sklearn/utils/validation.pyc in array2d(X, dtype, order, copy)
     78         raise TypeError('A sparse matrix was passed, but dense data '
     79                         'is required. Use X.toarray() to convert to dense.')
---> 80     X_2d = np.asarray(np.atleast_2d(X), dtype=dtype, order=order)
     81     _assert_all_finite(X_2d)
     82     if X is X_2d and copy:

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/numeric.pyc in asarray(a, dtype, order)
    318 
    319     """
--> 320     return array(a, dtype, copy=False, order=order)
    321 
    322 def asanyarray(a, dtype=None, order=None):

ValueError: setting an array element with a sequence.

我需要用特定的方式来处理这个问题吗?谢谢!

备注:

我使用的所有文本数据都是通过一个叫做 HashingVectorizer 的工具进行向量化的。

我使用 clf.fit(X,y),其中 X 是一个包含三个向量化文本的列表,y 是对应于 X 中每个元素的类别列表。

1 个回答

6

X 必须是一个二维数组(或者说是一个列表的列表,如果你愿意的话)。这个列表里的每一个子列表都得是一些数字值的列表。而且所有这些子列表的长度必须相同。比如说:[[1,2,3,5],[3,4,5,6],[6,7,8,9],...]。如果你有多个文本条目需要进行向量化(也就是把文本转换成数字形式),你需要把这些转换后的文本结果合并成一个单一的列表。比如说,如果在你的情况下合并它们是有意义的,可以把它们连接在一起。最终,每个对象都应该用一个包含所有数字的单一列表来表示。而且所有对象都必须用相同长度的列表来表示,其中每个列表中对应的元素代表相同的特征(例如,在你的文本中相同词语的出现频率)。告诉我我说的这些是否有道理。

撰写回答