【问题标题】:Sklearn Decision Tree - using sparse matrix and other features simultaneouslySklearn 决策树 - 同时使用稀疏矩阵和其他特征
【发布时间】:2018-12-10 11:21:26
【问题描述】:

我正在使用 Sklearn 决策树进行一些分类,我有两种类型的数据:分类数据和连续数据。我使用pd.get_dummies 作为分类值,最终得到了超过 90 个特征。当然,这是相当多的。
问题是我然后遍历max_features 参数以获得我的模型的最佳分数,并且拥有超过 20 个特征太耗时了。所以我认为 Sklearn 可以为我的分类特征使用稀疏矩阵,而不是使用 0 和 1 的 70 列。

问题是:Sklearn 是否可以混合使用稀疏矩阵和规则数组?如果是 - 我该怎么做?目前我收到错误:setting an array element with a sequence

这里有一些代码来理解这个想法。 df_with_dummies是我目前使用的,但希望有办法使用df_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()

【问题讨论】:

  • 在将数组传递给DecisionTreeClassifier 之前,您当前如何组合这些数组。显示发生此错误的代码。也许您可以使用 scipy 加入这些矩阵。见我的other answer here
  • @VivekKumar 添加了代码来清除这个想法

标签: python pandas scikit-learn sparse-matrix


【解决方案1】:

当你这样做时:

df['dums'] = dums

dums 是一个稀疏矩阵,pandas DataFrame 没有正确处理它,它将被广播到每一行。 pandas 没有抱怨,因为它认为稀疏矩阵是一个非数组对象。

这意味着df['dums'] 列中的每个元素都将指向整个稀疏矩阵dums。所以本质上,每个数组元素都设置了一个数组,因此在 scikit-learn 估计器中处理它时会出现错误setting an array element with a sequence

为此,您可以这样做:

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

现在你可以更进一步了。

【讨论】:

    猜你喜欢
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 2023-03-29
    • 1970-01-01
    • 2016-10-09
    • 2019-12-16
    相关资源
    最近更新 更多