我创建了3个unigram,bigram和trigram。之后,我使用sklearn矢量化器对其进行矢量化。然后将数据分为训练集和测试集。然后使用这三个模型训练svm和袋装svm.bigram模型上的auc分数降低了。什么问题?让我们显示一些代码 在这里,我阅读了bigram fearure.bigram的特色专栏:数码相机,室内图像
df_unigram=pd.read_csv('unigram.csv')
df_bigram=pd.read_csv('bigram.csv')
lst_unigram=df_unigram.iloc[:, 0].tolist()
lst_bigram=df_bigram.iloc[:, 0].tolist()
然后我结合了以下功能: lst_bigram = lst_bigram + lst_unigram
之后,我将以上列表隐藏到字典中。因为TfidfVectorizer取消了字典功能,并基于特征和句子进行矢量化
我有不平衡数据集,其中包含 135个否定句子和365 pos句子。在这里,我拆分了数据集:
from sklearn.model_selection import train_test_split
sentence_train, sentence_test, polarity_train, polarity_test = train_test_split(lst_sentences, lst_polarity, test_size=0.3, random_state=42)
在这里我对模型进行矢量化
vectorizer2 = TfidfVectorizer(vocabulary=set(dic_bigram_features),ngram_range=(1,2))
tf_idf_train2=vectorizer2.fit_transform(sentence_train)
tf_idf_test2=vectorizer2.fit_transform(sentence_test)
这是我的功能,可以给模型类型如bigram,trigram和...,并返回auc得分
def svm_predictions(model_type):
fpr = dict()
tpr = dict()
roc_auc = dict()
if model_type=="uni":
clf=SVC(C=100.0,kernel='linear',probability=True)
clf.fit(tf_idf_train1, polarity_train)
probs = clf.predict_proba(tf_idf_test1)
preds= probs[:,1]
fpr, tpr, threshold = metrics.roc_curve(polarity_test, preds)
roc_auc = metrics.auc(fpr, tpr)
if model_type=="bi":
clf=SVC(C=100.0,kernel='linear',probability=True)
clf.fit(tf_idf_train2, polarity_train)
probs = clf.predict_proba(tf_idf_test2)
preds= probs[:,1]
fpr, tpr, threshold = metrics.roc_curve(polarity_test, preds)
roc_auc = metrics.auc(fpr, tpr)
if model_type=="tri":
clf=SVC(C=100.0,kernel='linear',probability=True)
clf.fit(tf_idf_train3, polarity_train)
probs = clf.predict_proba(tf_idf_test3)
preds= probs[:,1]
fpr, tpr, threshold = metrics.roc_curve(polarity_test, preds)
roc_auc = metrics.auc(fpr, tpr)
return roc_auc
这是我针对 svm和袋装svm 的unigram,bigram和trigram模型的结果:
...