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

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

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?   Labelan example of text                      0                  0               0            0ANOTHER example of text                 1                  1               0            1What's happening?Let's talk at 5        1                  0               1            1

我想使用is_it_capital?is_it_upper?contains_num?作为特征,但由于它们是二进制值(1或0,编码后),我应该只对Text应用BoW来提取额外特征。也许我的问题显而易见,但因为我是机器学习的新手,对分类器和编码不熟悉,我会感激你们提供的所有支持和评论。谢谢



回答:

你当然可以使用你的“额外”特征,如is_it_capital?is_it_upper?contains_num?。看起来你是在挣扎如何将这两个看似不同的特征集结合起来。你可以使用sklearn.pipeline.FeatureUnionsklearn.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 CountVectorizerfrom sklearn.compose import ColumnTransformertransformer = 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']# 需要使用DenseTransformer来正确地连接CountVectorizer和其他转换步骤的结果from sklearn.base import TransformerMixinclass 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 Pipelinepipeline = 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)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注