赞
踩
文本处理的第一步一般是要做分词(也有部分文本处理算法不需要做分词,这里不做讨论),这里介绍两个分词工具,其中最常用的是jieba,两者有很多相似的地方。
# 使用上述训练好的词向量模型做测试
import gensim
BAIKE_VEC = 'resource/baike.vectors.bin'
w2v_model = gensim.models.KeyedVectors.load_word2vec_format(BAIKE_VEC, binary=True)
# 打印和“南京”相似的前3个词及其相似度
print(w2v_model.similar_by_word("南京", topn=3))
# 结果
[('苏州', 0.8196749687194824), ('无锡', 0.7864724397659302), ('常州', 0.7753453850746155)]
from sklearn.svm import SVC from sklearn.naive_bayes import MultinomialNB from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer from sklearn.metrics import confusion_matrix,classification_report import numpy as np # 每条文本为一行,分词之间以空格分割,多行文本组成一个list,get_file是自定义函数 train_text = np.asarray(get_file(TRAIN_DATA)) train_label = np.asarray(get_file(TRAIN_LABEL) test_text = np.asarray(get_file(TEST_DATA)) test_label = np.asarray(get_file(TEST_LABEL)) # 特征数值计算类,可以使用自定义的词表,也可以使用训练数据生成词表 count_v0 = CountVectorizer() # 判断CountVectorizer的词表是否为空,为空则生成词表,并使用词表将训练文本转化为词频 counts_train = count_v0.fit_transform(train_text) # 使用已有的词表将测试文本转化为词频 counts_test = count_v0.transform(test_text) # 将词频转化为Tf-idf tfidftransformer = TfidfTransformer() # fit会计算训练文本中所有词的idf,并存储 train_data = tfidftransformer.fit_transform(counts_train) # 这里用transform处理测试文本,其中会直接使用训练数据的idf test_data = tfidftransformer.transform(counts_test) # 多项式朴素贝叶斯 clf = MultinomialNB(alpha=0.01) clf.fit(train_data, train_label) pred = clf.predict(test_data) preds = pred.tolist() # 模型效果评价:计算并打印混淆矩阵 c_matrix = confusion_matrix(test_label, preds) for i in c_matrix: print(i) report = classification_report(test_label, preds) print(report) # svm svclf = SVC(kernel='linear', class_weight='balanced') svclf.fit(train_data, train_label) pred = svclf.predict(test_data) preds = pred.tolist() # 模型效果评价:计算并打印混淆矩阵 c_matrix = confusion_matrix(test_label, preds) for i in c_matrix: print(i) report = classification_report(test_label, preds) print(report)
精确率和召回率是一对矛盾的向量,通常在一些简单的任务中才可能使查全率和查准率都很高。精确率、召回率、F1计算
from sklearn.model_selection import StratifiedKFold
# 10折交叉验证
skf = StratifiedKFold(n_splits=9)
for train_index, test_index in skf.split(vect, label):
print("train_index: ",train_index.shape)
print("test_index: ",test_index.shape)
x_train, x_test = vect[train_index], vect[test_index]
y_train, y_test = label[train_index], label[test_index]
model_train(x_train, y_train, x_test, y_test)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。