【问题标题】:How to fit two arrays containing csr_matrixs' and labels respectively?如何分别拟合包含 csr_matrixs' 和标签的两个数组?
【发布时间】:2014-06-08 16:06:40
【问题描述】:

我正在尝试将单个特征向量(即 X_train[i])存储到数组 X 及其在另一个数组 Y 中的对应标签。 当我尝试拟合这两个数组时,出现错误 ValueError: 设置带有序列的数组元素。 如何修复此错误。 提前致谢。

from sklearn.datasets import load_svmlight_file                                           
pathToTrainData="/Users/rkasat/Documents/final year project/scripts/Drydata/leaf/train_backup.txt"

X_train,Y_train= load_svmlight_file(pathToTrainData);
X= []    
y=[]
for i in range(5):
    X.append(X_train[i])
    y.append(Y_train[i])

print(type(X[0]),type(y[0]))
from sklearn import svm
clf = svm.SVC(kernel='linear')
clf.fit(X,y)

output:
--------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-41-cd4b481af30a> in <module>()
      8 from sklearn import svm
      9 clf = svm.SVC(kernel='linear')
---> 10 clf.fit(X,y)

/Users/rkasat/anaconda/lib/python2.7/site-packages/sklearn/svm/base.pyc in fit(self, X, y, sample_weight)
    137                              "by not using the ``sparse`` parameter")
    138 
--> 139         X = atleast2d_or_csr(X, dtype=np.float64, order='C')
    140         y = self._validate_targets(y)
    141 

/Users/rkasat/anaconda/lib/python2.7/site-packages/sklearn/utils/validation.pyc in atleast2d_or_csr(X, dtype, order, copy, force_all_finite)
    132     """
    133     return _atleast2d_or_sparse(X, dtype, order, copy, sparse.csr_matrix,
--> 134                                 "tocsr", force_all_finite)
    135 
    136 

/Users/rkasat/anaconda/lib/python2.7/site-packages/sklearn/utils/validation.pyc in _atleast2d_or_sparse(X, dtype, order, copy, sparse_class, convmethod, force_all_finite)
    109     else:
    110         X = array2d(X, dtype=dtype, order=order, copy=copy,
--> 111                     force_all_finite=force_all_finite)
    112         if force_all_finite:
    113             _assert_all_finite(X)

/Users/rkasat/anaconda/lib/python2.7/site-packages/sklearn/utils/validation.pyc in array2d(X, dtype, order, copy, force_all_finite)
     89         raise TypeError('A sparse matrix was passed, but dense data '
     90                         'is required. Use X.toarray() to convert to dense.')
---> 91     X_2d = np.asarray(np.atleast_2d(X), dtype=dtype, order=order)
     92     if force_all_finite:
     93         _assert_all_finite(X_2d)

/Users/rkasat/anaconda/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.

(<class 'scipy.sparse.csr.csr_matrix'>, <type 'numpy.float64'>)

【问题讨论】:

  • 您为什么要问同一个问题三次?正如人们之前评论的那样,如果您实际向我们展示您的数据以及您的代码以便我们进行调试,您将获得更可靠的答案。
  • 我正在研究大规模的分层文本分类lshtc.iit.demokritos.gr/node/1。我想在多个级别上对特征向量的标签进行预测。所以,所有在级别 1 分类相同的特征向量都放在一个桶中。同样,不同的向量放在不同的桶中。一旦我有了桶,我我将在 level2 对每个单独的存储桶进行训练和测试。我将继续这个过程,直到达到叶级别并预测实际标签。
  • 代码变得如此复杂,所以我不愿意分享它。它会进一步偏离实际问题

标签: scipy ipython scikit-learn ipython-notebook scikits


【解决方案1】:

您可能不必在代码中使用 for 循环。下面的代码可能会做你想做的事:

X_train, Y_train = load_svmlight_file(pathToTrainData);

from sklearn import svm
clf = svm.SVC(kernel='linear')
clf.fit(X[:5, :],y[:5])

【讨论】:

    【解决方案2】:

    @tanemaki 是对的,但值得解释为什么这可以解决问题。 X_train (很可能)是一个 numpy 数组。使用整数 (X_train[i]) 对其进行切片将返回整个 i-th 行。 X 最终成为一个 numpy 数组列表。 fit 方法需要一个矩阵。如果你只想训练前 5 行,你应该像 @tanemaki 已经演示过的那样切片:X[:5, :]y[:5, :]

    【讨论】:

    • 你能告诉我我是否只想训练选定的行(比如第 1 行、第 3 行、第 6 行和第 7 行),而不仅仅是前 5 行,在这种情况下,我应该如何进行?
    • 你应该做X[[1,3,6,7], :]。切片的第一个参数 ([1,3,6,7) 指定要使用的行,第二个参数指定要使用的列。 : 表示所有行/列。 :1010: 分别表示到第 10 位和从第 10 位开始。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2014-12-06
    • 2011-08-17
    • 2023-03-08
    • 1970-01-01
    • 2021-08-05
    相关资源
    最近更新 更多