简单介绍一下我的情况:我有4列输入:id、text、分类、label。
我在文本上使用了,它给出了一个实例列表,其中包含TFIDF的word标记。
现在,我想将类别(不需要传递)作为向量器输出的数据中的另一个特性。
还请注意,在矢量化之前,数据已经通过了train_test_split.。
我怎样才能做到这一点?
初始代码:
#initialization
import pandas as pd
path = 'data\data.csv'
rappler= pd.read_csv(path)
X = rappler.text
y = rappler.label
#rappler.category - contains category for each instance
#split train test data
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
#feature extraction
from sklearn.feature_extraction.text import CountVectorizer
vect = CountVectorizer()
X_train_dtm = vect.fit_transform(X_train)
#after or even prior to perform fit_transform, how can I properly add category as a feature?
X_test_dtm = vect.transform(X_test)
#actual classfication
from sklearn.naive_bayes import MultinomialNB
nb = MultinomialNB()
nb.fit(X_train_dtm, y_train)
y_pred_class = nb.predict(X_test_dtm)
#display result
from sklearn import metrics
print(metrics.accuracy_score(y_test,y_pred_class))
发布于 2016-11-18 11:49:01
我建议在特征提取后做你的火车测试。
一旦您有了TF-国防军功能列表,只需为每个示例添加其他特性即可。
您必须对类别特性进行编码,最好的选择是滑雪板LabelEncoder。然后,您应该有两组可以连接的numpy数组。
下面是一个玩具示例:
X_tfidf = np.array([[0.1, 0.4, 0.2], [0.5, 0.4, 0.6]])
X_category = np.array([[1], [2]])
X = np.concatenate((X_tfidf, X_category), axis=1)
在这一点上,你将继续你的过去,从火车测试分裂开始。
发布于 2016-11-20 23:13:27
你应该使用FeatureUnions -正如文档中所解释的那样 FeatureUnions将几个转换器对象组合成一个新的转换器,该转换器将它们的输出组合在一起。FeatureUnion接收转换器对象的列表。在拟合过程中,每一个都独立地与数据相匹配。对于数据转换,变压器被并行应用,它们输出的样本向量被连接到端到端的更大的向量。
关于如何使用FeatureUnions的另一个很好的例子可以在这里找到:union.html
仅仅连接@AlexG这样的不同矩阵可能是一个更容易的选择,但FeatureUnions是做这些事情的科学学习方法。
https://stackoverflow.com/questions/40679883
复制