在机器学习中使用 2 列作为训练数据

时间:2021-06-17 04:21:54

标签: python pandas scikit-learn

我有一个名为 ::after 的数据框,其中包含 3 列数据,如下所示

ds

我得到了一个例子,只使用 text count label 0 I have... 12 pos 1 You sh... 8 neg 2 In thi... 9 neg . . 来创建测试和训练数据,代码如下

text

================================================ ====================================

我试图通过简单地用

更改第一行来包含X = ds['text'] y = ds['label'] train_X, test_X, train_Y, test_Y = train_test_split(X, y, test_size=0.25, random_state=0) df_train75 = pd.DataFrame() df_train75['text'] = train_X df_train75['label'] = train_Y df_test25 = pd.DataFrame() df_test25['text'] = test_X df_test25['label'] = test_Y from sklearn.feature_extraction.text import TfidfVectorizer tfidf_vect_7525 = TfidfVectorizer(ngram_range = (1, 1)) tfidf_vect_7525.fit(ds['text']) train_X_tfidf_7525 = tfidf_vect_7525.transform(df_train75['text']) test_X_tfidf_7525 = tfidf_vect_7525.transform(df_test25['text']) from sklearn.svm import SVC model = SVC(kernel='linear') model.fit(train_X_tfidf_7525,train_Y) text
count

它给了我错误

X = ds[['text', 'count']

================================================ ====================================

我的问题是,我应该如何解决这个问题?我试图调查其他问题,但没有得到答案。我发现的一个“解决方案”是使用

from sklearn.svm import SVC

model = SVC(kernel='linear')
model.fit(train_X_tfidf_9010,train_Y)

但我认为这不是解决这个问题的正确选择。 提前致谢!

1 个答案:

答案 0 :(得分:1)

如果您想分别转换输入的不同列,则应选择 ColumnTransformer。您还可以选择不转换特定列。在任何情况下,每个(非)转换的结果将再次连接成一个数组。一个小例子:

from sklearn.compose import ColumnTransformer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
import pandas as pd


df = pd.DataFrame({
    'text': ['This is doc1', 'This is doc2', 'Here is doc3']*3,
    'count': [12, 8, 9]*3,
    'label': ['pos', 'neg', 'neg']*3
})

X = df[['text', 'count']]
y = df['label']

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

transformer = ColumnTransformer([
    ('vectorizer', TfidfVectorizer(ngram_range=(1, 1)), 'text')
], remainder='passthrough')

X_vec_train = transformer.fit_transform(X_train)
X_vec_test = transformer.transform(X_test)

model = SVC(kernel='linear')
model.fit(X_vec_train, y_train)

转换器列表的语法是带有 (name, transformer, columns) 的元组列表,您可以在其中指定将哪个转换器应用于哪个列。通过设置 remainder='passthrough',之前未指定的所有剩余列将自动通过并仅与结果连接。有关这方面的更多信息,请参阅 documentation

相关问题