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

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

问题是: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()

参考方案

当您这样做时:

df['dums'] = dums

熊猫DataFrame无法正确处理作为稀疏矩阵的dums,它将广播到每一行。 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])

现在,您可以进一步传递。

R'relaimpo'软件包的Python端口 - python

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。

如何用'-'解析字符串到节点js本地脚本? - python

我正在使用本地节点js脚本来处理字符串。我陷入了将'-'字符串解析为本地节点js脚本的问题。render.js:#! /usr/bin/env -S node -r esm let argv = require('yargs') .usage('$0 [string]') .argv; console.log(argv…

Python:传递记录器是个好主意吗? - python

我的Web服务器的API日志如下:started started succeeded failed 那是同时收到的两个请求。很难说哪一个成功或失败。为了彼此分离请求,我为每个请求创建了一个随机数,并将其用作记录器的名称logger = logging.getLogger(random_number) 日志变成[111] started [222] start…

Python-Excel导出 - python

我有以下代码:import pandas as pd import requests from bs4 import BeautifulSoup res = requests.get("https://www.bankier.pl/gielda/notowania/akcje") soup = BeautifulSoup(res.cont…

我不明白为什么sum(df ['series'])!= df ['series']。sum() - python

我正在汇总一系列值,但是根据我的操作方式,我会得到不同的结果。我尝试过的两种方法是:sum(df['series']) df['series'].sum() 他们为什么会返回不同的值?示例代码。s = pd.Series([ 0.428229 , -0.948957 , -0.110125 , 0.791305 , 0…