使用稀疏矩阵中的 GBC 构建模型时获取具有序列错误的数组元素

Posted

技术标签:

【中文标题】使用稀疏矩阵中的 GBC 构建模型时获取具有序列错误的数组元素【英文标题】:Getting array element with a sequence error while building model using GBC from sparse matrix 【发布时间】:2018-04-12 18:19:53 【问题描述】:

我在从稀疏矩阵数据帧构建分类器模型时遇到错误。

错误

C:\Users\AshokEapen\Anaconda3\lib\site-packages\sklearn\utils\validation.py in check_array(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
    380                                       force_all_finite)
    381     else:
--> 382         array = np.array(array, dtype=dtype, order=order, copy=copy)
    383 
    384         if ensure_2d:

ValueError: setting an array element with a sequence.

我的代码

 cv = CountVectorizer( max_features = 5000,analyzer='word') 
 tf = cv.fit_transform(data.pop('Clean_addr'))
 for i, col in enumerate(cv.get_feature_names()):
    data[col] = pd.SparseSeries(tf[:, i].toarray().ravel(), fill_value=0)
    train = data.drop(['Stop_Type','Co_Name','Cust_ID','Phone','Shpr_ID','Resi_Cnt','Buz_Cnt','Nearby_Cnt','parseNumber','removeString','Qty','bins','Co_Name_Flag'], axis=1)
    Y = data['Resi']

    gbc = GradientBoostingClassifier(max_depth = 7, n_estimators=1500, min_samples_leaf=10)

    print('Training GBC')

    #fit classifier, look for best
    gbc.fit(X_train, y_train)

我该如何解决这个问题? 请在火车的拆分数据框下方找到 X_train

    Lat Lng Weight  Resi_Ratio  Resi_Area   Product categorizeNumber    ResiR   bins_qty    ab  ... yi  yin ying    yip yiu yu  yue yuen    yuet    yuk
49291   22.334624   114.195812  0.23    1.000000    U   IE  Mobile  0.67646 1   0   ... 0   0   0   0   0   0   0   0   0   0
43012   22.373704   114.106212  0.50    0.014925    N   IP  undefined   0.162105    1   0   ... 0   0   0   0   0   0   0   0   0   0
3237    22.268394   114.129232  1.55    0.050000    N   IP  Landline    0.105263    1   0   ... 0   0   0   0   0   0   0   0   0   0
52313   22.339494   114.148902  0.30    0.011538    N   IP  undefined   0   1   0   ... 0   0   0   0   0   0   0   0   0   0

Y_train

Out[37]:
4987     N
47455    N
31422    N
44714    N
56879    N
26408    N
43667    N
18978    N
39741    N
20614    Y
6660     N
35500    N
57861    N
12971    N
35515    N
41007    N
58319    Y
51216    N
5292     N
26321    Y
12624    N
21936    N
29168    Y

更新了 X_train 和 Y_train

【问题讨论】:

【参考方案1】:

首先我假设您的意思是您的 X 数据是稀疏格式,而不是您的 y

如果您查看sklearn/utils/validation.py 中的源代码,您会发现您的错误是 if ... else 语句的 else 部分,该语句首先检查传递的数组是否稀疏(在这种情况下为 format ' coo'、'csr' 或 'csc')。

因此,您的 X 数据似乎不是其中一种格式。

【讨论】:

X_train 和 y_train 都是 pandas.core.series.Series 你能张贴一小段他们的样子吗? 在问题部分更新 您是否尝试过仅传递 X 和 y 的值(即作为数组)?

以上是关于使用稀疏矩阵中的 GBC 构建模型时获取具有序列错误的数组元素的主要内容,如果未能解决你的问题,请参考以下文章

使用 scipy 在 python 中构建和更新稀疏矩阵

具有特征库的块稀疏矩阵

数组和稀疏矩阵

数组和稀疏矩阵

什么是数据结构中的特殊矩阵和稀疏矩阵

使用 scipy.sparse.bmat 从子块创建非常大的稀疏矩阵时出错