我有一个名为 ::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)
但我认为这不是解决这个问题的正确选择。 提前致谢!
答案 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。