Numpy 将TfIdfVectorizer中的矩阵与scikit learn中的另一个矩阵连接并缩放

Numpy 将TfIdfVectorizer中的矩阵与scikit learn中的另一个矩阵连接并缩放,numpy,machine-learning,scipy,scikit-learn,Numpy,Machine Learning,Scipy,Scikit Learn,我有一个由一些文本和数字特征组成的数据集。使用scikit的TfidfVectorizer解析文本数据后,如何将这些功能与其他数字功能结合起来,确保它们的比例相同 代码是这样的(缩写): 谢谢你的意见 我尝试了x_all=scipy.sparse.hstack([x_all,traindata_numfeats]),但得到了以下错误:TypeError:不支持类型转换:(dtype('float64'),dtype('O'))。似乎另一个特征矩阵有一个对象dtype,而不是float dtype

我有一个由一些文本和数字特征组成的数据集。使用scikit的TfidfVectorizer解析文本数据后,如何将这些功能与其他数字功能结合起来,确保它们的比例相同

代码是这样的(缩写):


谢谢你的意见

我尝试了x_all=scipy.sparse.hstack([x_all,traindata_numfeats]),但得到了以下错误:TypeError:不支持类型转换:(dtype('float64'),dtype('O'))。似乎另一个特征矩阵有一个对象dtype,而不是float dtype。一般来说,使用对象数据类型来描述scikit学习模型功能没有意义。检查您的特征提取层并尝试提取浮点值(在需要时可以选择使用值0.和1.对布尔特征进行编码)。我认为这可能是因为缺少一些值,例如['0.9'、'0.3543'、'?'、'0.3343']-熊猫可能有什么方法可以处理这个问题?我会调查的。但hstack是正确的选择吗?您建议如何确保所有内容都在相同的范围内?您可以用列的平均值或中位数替换缺少的值。检查一下。我会将数字特征缩放到单位方差或[0,1]范围,而不考虑文本特征通常具有非常不同的比例。如果组合特征的行都是肯定的,您可以选择重新规范化它们。对此的任何进一步回答都会引起我的兴趣,因为我正在努力解决这个问题。谢谢
import pandas as p
import numpy as np
trframe = p.read_table(train_file)
traindata = list(np.array(trframe)[:, 2]) #textual
traindata_numfeats = list(np.array(trframe)[:, [4, 16, 17, 20, 22]])
tfv = TfidfVectorizer(min_df=3,  max_features=None, strip_accents='unicode',
                      analyzer='word', token_pattern=r'\w{1,}',
                      tokenizer=tokenizer, ngram_range=(1, 1), use_idf=1,
                      smooth_idf=1, sublinear_tf=1)
tfv.fit(traindata)
x_all = tfv.transform(traindata) #how to combine x_all with traindata_numfeats?