gpt4 book ai didi

python - 分类器中是否正确选择和使用了所有特征?

转载 作者:行者123 更新时间:2023-12-03 20:23:52 24 4
gpt4 key购买 nike

我想知道当我使用分类器时是否,例如:

random_forest_bow = Pipeline([
('rf_tfidf',Feat_Selection. countV),
('rf_clf',RandomForestClassifier(n_estimators=300,n_jobs=3))
])

random_forest_ngram.fit(DataPrep.train['Text'],DataPrep.train['Label'])
predicted_rf_ngram = random_forest_ngram.predict(DataPrep.test_news['Text'])
np.mean(predicted_rf_ngram == DataPrep.test_news['Label'])
我也在考虑模型中的其他功能。我定义 X 和 y 如下:
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)

df_train= pd.concat([X_train, y_train], axis=1)
df_test = pd.concat([X_test, y_test], axis=1)

countV = CountVectorizer()
train_count = countV.fit_transform(df.train['Text'].values)
我的数据集如下所示
Text                             is_it_capital?     is_it_upper?      contains_num?   Label
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
我也想用作功能 is_it_capital? , is_it_upper? , contains_num? ,但由于它们具有二进制值(1 或 0,编码后),我应该只在文本上应用 BoW 以提取额外的特征。
也许我的问题很明显,但由于我是一个新的 ML 学习者并且我不熟悉分类器和编码,我将感谢您提供的所有支持和评论。谢谢

最佳答案

您当然可以使用您的“额外”功能,例如 is_it_capital? , is_it_upper? , 和 contains_num? .您似乎正在苦苦思索如何准确地结合两个看似不同的功能集。你可以使用类似 sklearn.pipeline.FeatureUnion 的东西或 sklearn.compose.ColumnTransformer将不同的编码策略应用于每组特征。您没有理由不能将额外的特征与文本特征提取方法(例如您的 BoW 方法)产生的任何组合结合使用。

df = pd.DataFrame({'text': ['this is some text', 'this is some MORE text', 'hi hi some text 123', 'bananas oranges'], 'is_it_upper': [0, 1, 0, 0], 'contains_num': [0, 0, 1, 0]})

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.compose import ColumnTransformer

transformer = ColumnTransformer([('text', CountVectorizer(), 'text')], remainder='passthrough')
X = transformer.fit_transform(df)

print(X)
[[0 0 0 1 0 0 1 1 1 0 0]
[0 0 0 1 1 0 1 1 1 1 0]
[1 0 2 0 0 0 1 1 0 0 1]
[0 1 0 0 0 1 0 0 0 0 0]]
print(transformer.get_feature_names())
['text__123', 'text__bananas', 'text__hi', 'text__is', 'text__more', 'text__oranges', 'text__some', 'text__text', 'text__this', 'is_it_upper', 'contains_num']
更多关于你的具体例子:
X=df[['Text','is_it_capital?', 'is_it_upper?', 'contains_num?']]
y=df['Label']

# Need to use DenseTransformer to properly concatenate results
# from CountVectorizer and other transformer steps
from sklearn.base import TransformerMixin
class DenseTransformer(TransformerMixin):
def fit(self, X, y=None, **fit_params):
return self
def transform(self, X, y=None, **fit_params):
return X.todense()

from sklearn.pipeline import Pipeline
pipeline = Pipeline([
('vectorizer', CountVectorizer()),
('to_dense', DenseTransformer()),
])

transformer = ColumnTransformer([('text', pipeline, 'Text')], remainder='passthrough')

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

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

df_train = pd.concat([X_train, y_train], axis=1)
df_test = pd.concat([X_test, y_test], axis=1)

关于python - 分类器中是否正确选择和使用了所有特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65460058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com