Python 具有不同特征的数据预处理步骤

Python 具有不同特征的数据预处理步骤,python,machine-learning,scikit-learn,transformation,feature-selection,Python,Machine Learning,Scikit Learn,Transformation,Feature Selection,我希望在分类器中包含多个功能,以更好地提高模型性能。 我有一个类似的数据集 正文 是首都吗? 它在上面吗? 包含多少? 标签 文本示例 0 0 0 0 另一个文本示例 1. 1. 0 1. 发生什么事了?我们5点再谈 1. 0 1. 1. 您的错误似乎是试图对数组和序列进行压缩 我对管道和柱形变压器不熟悉,所以可能弄错了;看起来它并没有从CountVectorizer中捕获功能名称,所以拥有一个未标记的数据帧并没有任何好处:也许你可以坚持使用numpy数组。 如果我错了,从np.array跳到d

我希望在分类器中包含多个功能,以更好地提高模型性能。 我有一个类似的数据集

正文 是首都吗? 它在上面吗? 包含多少? 标签 文本示例 0 0 0 0 另一个文本示例 1. 1. 0 1. 发生什么事了?我们5点再谈 1. 0 1. 1.
您的错误似乎是试图对数组和序列进行压缩

我对管道和柱形变压器不熟悉,所以可能弄错了;看起来它并没有从CountVectorizer中捕获功能名称,所以拥有一个未标记的数据帧并没有任何好处:也许你可以坚持使用numpy数组。 如果我错了,从np.array跳到dataframe应该很容易

因此,你可以:

df_train = np.append(
  X_train, #this is an array
  np.array(y_train).reshape(len(y_train),1), #convert the Serie to numpy array of correct shape
  axis=1)
print(df_train)

[[1 0 1 0 0 1 0 1 0 1 1 0 1]
 [0 1 0 1 1 0 1 0 1 1 0 1 1]]
希望这能有所帮助(尽管正如我所说,我不熟悉这些sklearn库…)

编辑

更完整的东西,没有那些管道(我不确定是否需要);由于输入数据集,在我的计算机上失败,但使用完整的数据集可能会更成功

df = pd.DataFrame(
        [["an example of text", 0, 0, 0, 0],
         ["ANOTHER example of text", 1, 1, 0, 1],
         ["What's happening?Let's talk at 5", 1, 0, 1, 1]
        ],
        columns=["Text", "is_it_capital?", "is_it_upper?", "contains_num?", "Label"]
        )

X=df[['Text','is_it_capital?', 'is_it_upper?', 'contains_num?']]
y=df['Label']

X_train, X_test, y_train, y_test  = train_test_split(X, y, test_size=0.25, random_state=40)

cv = CountVectorizer()

X_train = (
        pd.DataFrame(
                cv.fit_transform(X_train['Text']).toarray(),
                columns=cv.get_feature_names(),
                index=X_train.index
                ) #This way you keep the labels/indexes in a dataframe format
        .join(X_train.drop('Text', axis=1)) #add your previous 'get_dummies' columns
        )

X_test = (
        pd.DataFrame(
                cv.transform(X_test['Text']).toarray(),
                columns=cv.get_feature_names(),
                index=X_test.index
                )
        .join(X_test.drop('Text', axis=1))
        )

#Then compute your regression directly :
lr = LogisticRegression()
lr = lr.fit(X_train, y_train)
y_pred = lr.predict(X_test)

刚才添加了一个示例,说明了我将如何实现它(没有管道,即:-))。希望这足够清楚!是的,这就是我所说的数据集。初始数据集中只有几行,而train_test_分割只会导致测试数据集中出现一个标签。试着在一个更完整的数据集上使用它,并让我知道。为误解道歉。我不明白。我使用了完整的数据集(大约500行),但我得到了错误:
ValueError:Expected 2D array,改为1D array
,因为
-->31 y\u pred=lr.predict(y\u test)
很抱歉输入错误。这是lr.prefict(X_测试)的确……不客气。关于我最后的评论,我将删除它:回想起来,我认为它是错误的;在test/train中分割数据集后,无论使用什么选项,都应该使用文本预处理(否则会影响测试)。