【问题标题】:Using scikit-learn to train on multidimensional data使用 scikit-learn 训练多维数据
【发布时间】:2014-09-17 15:11:36
【问题描述】:

这是一个非常基本的概念:我对训练有多个依赖项。我的数据都是文本,我有三个单独的字段。我能找到的每个示例都有这样的文本数据设置:

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 是包含3 个矢量化文本的列表的列表,yX 的元素所属的各个类别的列表

【问题讨论】:

  • 请澄清您的问题。你的模型是什么,或者换句话说,你想要分类什么?你到底适合classifier.fit(X,y)? X 必须是一个数值数组,而 y - 类标签数组。如果您的数据是文本,则需要将其转换为数字数据,例如通过计算词频。请添加更多详细信息,或显示一些代码,否则很难理解您要做什么。
  • 我做了一个快速节点,它使用HashVectorizer进行矢量化
  • 我正在分类。所以本质上,每个项目都有标签、标题和描述。我想按特定类别的列表进行分类。

标签: python scikit-learn


【解决方案1】:

X 必须是二维数组(或列表列表,如果需要)。并且此列表列表中的每个列表都必须是数值列表。所有这些列表必须具有相同的长度。像这样:[[1,2,3,5],[3,4,5,6],[6,7,8,9],...]。如果对于每个对象,您有多个要矢量化的文本条目,则需要将生成的矢量化文本组合到一个列表中。例如,如果在您的上下文中有意义,则将它们连接起来。因此,最终每个对象都必须由一个列表表示,其中所有条目都是数字的。并且所有对象必须由相同长度的列表表示,其中所有列表中的相应元素表示相同的特征(例如,文本中相同标记的频率)。让我知道我所说的是否有道理。

【讨论】:

  • 有道理,但我无法连接数据,它们是 3 个非常独立的字段(描述、标题、标签)
  • 嗯,这就是标准分类算法的工作原理。它们需要每个对象的一组数字特征。而且您需要设计您的功能,以便它们适合此模型。这样您的数据就可以用二维矩阵表示,其中每一行是一个对象,每一列是一个数字特征。
  • 这仍然是一个关于如何编码特征之间关系的开放研究课题,例如如果您有功能组或功能层次结构。我看到了一些关于这个问题的研究论文,但我不知道标准机器学习库中的 amy 实现。
  • 文本挖掘是一个复杂的问题,没有神奇的解决方案可以解决您的问题。这需要一些时间和研究。我想说,从我建议的这个简单的串联开始。看看它怎么运作。它仍然可以合理地执行。然后,尝试做一些研究并为您的问题找到一些其他策略。我没有从事文本挖掘方面的工作,所以我没有任何好的参考资料。
  • 谢谢,我会试试的!
猜你喜欢
  • 2016-11-26
  • 2015-07-09
  • 2020-01-04
  • 2019-01-07
  • 2014-10-13
  • 2015-12-30
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
相关资源
最近更新 更多