Numpy Sklearn与稀疏矩阵值误差

Numpy Sklearn与稀疏矩阵值误差,numpy,scipy,scikit-learn,sklearn-pandas,Numpy,Scipy,Scikit Learn,Sklearn Pandas,我知道以前也有人问过类似的问题,我尝试过其中的所有建议,但我仍然感到困惑。我有一个包含两列的数据集:第一列包含表示单词的向量,存储为1x10000稀疏csr矩阵(因此每个单元格中都有一个矩阵),第二列包含整数评级,我将用于分类。当我运行以下代码时 for index, row in data.iterrows(): print(row) print(row[0].shape) 我得到了所有行的正确输出 Name: 0, dtype: object (1, 10000) Vect

我知道以前也有人问过类似的问题,我尝试过其中的所有建议,但我仍然感到困惑。我有一个包含两列的数据集:第一列包含表示单词的向量,存储为1x10000稀疏csr矩阵(因此每个单元格中都有一个矩阵),第二列包含整数评级,我将用于分类。当我运行以下代码时

for index, row in data.iterrows():
    print(row)
    print(row[0].shape)
我得到了所有行的正确输出

Name: 0, dtype: object
(1, 10000)
Vector      (0, 0)\t1.0\n  (0, 1)\t1.0\n  (0, 2)\t1.0\n ...
Rating                                                    5
现在,当我尝试在任何SKlearn分类器中传递数据时,如下所示:

uniform_random_classifier = DummyClassifier(strategy='uniform')
uniform_random_classifier.fit(data["Vectors"], data["Ratings"])
我得到以下错误:

    array = np.array(array, dtype=dtype, order=order, copy=copy)
     ValueError: setting an array element with a sequence.
我做错了什么?我已经确定了我所有的稀疏矩阵都是相同大小的,并且我尝试过以各种方式重塑我的数据,但是运气不好,而且Sklearn分类器应该能够处理csr矩阵

更新:将整个“Vectors”列转换为一个大的二维矩阵是成功的,但为了完整性起见,如果有人好奇并想尝试解决原始问题,下面是我用来生成数据帧的代码。假设数据是一个数据框,其中的行看起来像

“560 420 222”5.0

“2345 2344 2344 5”3.0


请在此处添加一个可复制的代码片段。“…每个单元格中有一个矩阵…”这是对稀疏矩阵的非标准使用。我想您必须将数据结构扁平化才能使用普通2D矩阵,其中矩阵中的每个元素都是标量。几天前,我遇到了一个
稀疏
矩阵的问题,并通过将其转换为
密集
矩阵来解决它。如果这对你来说是可行的,那么这是一个简单的解决方案。告诉我们你是如何构造稀疏矩阵的。一个
csr
矩阵只能用一个简单的数值
dtype
进行计算。其他任何东西都会在某个点上产生问题。是的,正如你所说的Warren Weckesser,当我把向量转换成一个2-D X*10000稀疏矩阵时,它起到了作用。为了完整性起见,我将更新如何生成数据,并查看是否有人知道如何解决原始问题
def vectorize(feature, size):

"""Given a numeric string generated from a vocabulary table return a binary vector representation of
 each feature"""

vector = sparse.lil_matrix((1, size))

for number in feature.split(' '):
    try:
        vector[0, int(number) - 1] = 1
    except ValueError:
        pass

return vector

def vectorize_dataset(data, vectorize, size):

"""Given a dataset in the appropriate "num num num..." format, a specific vectorization format, and a vector size,
returns the dataset in vectorized form"""

result_data = pd.DataFrame(index=range(data.shape[0]), columns=["Vector", "Rating"])

for index, row in data.iterrows():

    # All the mixing up of decodings and encoding has made it so that Pandas incorrectly parses EOF chars
    if type(row[0]) == type('str'):
        result_data.iat[index, 0] = vectorize(row[0], size).tocsr()
        result_data.iat[index, 1] = data.loc[index][1]

return result_data