提问者:小点点

Sklearn决策树-同时使用稀疏矩阵和其他特征


我使用Sklearn决策树进行分类,我有两种类型的数据:分类数据和连续数据。我用了pd。获取我的分类值的虚拟对象,最终拥有90多种功能。当然,这是相当多的
问题是,我然后迭代max\u features参数以获得我的模型的最佳分数,拥有20多个特性太耗时了。所以我认为Sklearn可以使用稀疏矩阵作为分类特征,而不是70列0和1。

问题是:Sklearn是否可以混合使用稀疏矩阵和正则数组?如果是-我该怎么做?当前出现错误:使用序列设置数组元素

下面是一些代码来了解这个想法df\u with_dummies是我目前使用的,但我希望有一种方法可以使用df\u with_sparse

import numpy as np
import pandas as pd 
from scipy.sparse import csr_matrix

a = np.random.randn(10,3)
b = np.random.random((10,1))
df = pd.DataFrame(a, columns = "A B C".split())
df['temp'] = b
df['dum1'] = np.where(df.temp < 0.5, 1, 0)
df['dum2'] = np.where(df.temp >= 0.5, 1, 0)
del df['temp']
df_with_dummies = df.copy()

a = df[['dum1', 'dum2']]
dums = csr_matrix(a)
df['dums'] = dums
df_with_sparse = df.copy()

共1个答案

匿名用户

当你这样做时:

df['dums'] = dums

dums数据帧无法正确处理稀疏矩阵,它将广播到每一行pandas并不抱怨它,因为它认为稀疏矩阵是一个非数组对象。

这意味着df['dums']列中的每个元素将指向整个稀疏矩阵dums。因此,从本质上讲,每个数组元素都被设置为一个数组,因此在scikit学习估计器中处理数组元素时,使用序列设置数组元素的错误

为此,您可以:

from scipy.sparse import hstack
df_with_sparse = hstack([df[['A', 'B', 'C']].values, dums])

现在你可以把这个传得更远了。