我有 Dataframe 可以简化为:
import pandas as pd
df = pd.DataFrame([{
'title': 'batman',
'text': 'man bat man bat',
'url': 'batman.com',
'label':1},
{'title': 'spiderman',
'text': 'spiderman man spider',
'url': 'spiderman.com',
'label':1},
{'title': 'doctor evil',
'text': 'a super evil doctor',
'url': 'evilempyre.com',
'label':0},])
Run Code Online (Sandbox Code Playgroud)
我想尝试不同的特征提取方法:TFIDF、word2vec、具有不同 ngram 设置的 Coutvectorizer 等。但我想尝试不同的组合:一个特征集将包含使用 TFIDF 转换的“文本”数据,以及使用Countvectoriser 和第二个将具有由 w2v 转换的文本数据,以及由 TFIDF 转换的“url”等。最后,当然,我想对不同的预处理策略进行比较并选择最好的一种。
以下是问题:
有没有办法使用 Pipeline 这样的标准 sklearn 工具来做这样的事情?
我的想法有常识吗?也许有一些好主意如何处理我所缺少的数据框中包含许多列的文本数据?
非常感谢!
我有个问题。我想使用StandardScaler(),但我的数据集包含某些值和其他不应缩放的OneHotEncoding值。但如果我正在运行,所有值都会缩放。那么是否可以选择仅对管道内的某些值运行此方法?StandardScaler()
我发现了这个问题:使用以下代码对分类变量进行 One-Hot-Encode 并同时缩放连续变量
columns = ['rank']
columns_to_scale = ['gre', 'gpa']
scaler = StandardScaler()
ohe = OneHotEncoder(sparse=False)
# Concatenate (Column-Bind) Processed Columns Back Together
processed_data = np.concatenate([scaled_columns, encoded_columns], axis=1)
Run Code Online (Sandbox Code Playgroud)
那么是否有一个选项可以仅在某些值上运行StandardScaler()内部 a pipeline,而其他值应该合并到缩放值中?因此管道应该只对值使用StandardScaler 'xy', 'xyz'。
标准定标器类
from sklearn.base import BaseEstimator, TransformerMixin
class StandardScaler_with_certain_features(BaseEstimator, TransformerMixin):
def __init__(self, columns_to_scale):
scaler = StandardScaler()
def fit(self, X, y = None):
scaler.fit(X_train) # only std.fit on train set
X_train_nor = scaler.transform(X_train.values)
def transform(self, X, …Run Code Online (Sandbox Code Playgroud)