python - 在机器学习中使用 2 列训练数据
问题描述
我有一个名为ds
3 列数据的数据框,如下所示
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)
==================================================== =================================
我的问题是,我应该如何解决这个问题?我试图研究其他问题,但没有得到答案。我发现的一个“解决方案”是使用
X = ds['text'].astype(str) + ' ' + ds['count'].astype(str)
但我认为这不是解决这个问题的正确选择。先感谢您!
解决方案
如果您想分别转换输入的不同列,您应该选择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'
,之前未指定的所有剩余列将自动传递并与结果连接。有关这方面的更多信息,请参阅文档。
推荐阅读
- c++ - 无法使用
在视觉工作室 - angular - 你如何处理 Angular 中的用户设置和纯管道?
- amazon-web-services - AWS SageMaker - 如何加载经过训练的 sklearn 模型以进行推理?
- php - 如何使 Stripe 订阅符合 SCA
- javascript - Javascript LZ字符串压缩检查字符串是否已经压缩
- ios - Flutter iOS 14.0 构建错误:无法向 mDNS 注册天文台端口
- ios - swiftUI 在后台检测应用程序终止
- bash - 如何将shell的机器人(子进程)的输出设置为bash中的环境变量
- python - 获取具有最小值的行的日期
- r - R foreach:并行读取和操作多个文件