用传统机器学习方法进行专利分类(TFIDF+LR:DT:RF)
代码出自:https://github.com/newzhoujian/LCASPatentClassification/tree/master
本博客对该代码进行一个学习把并记录
数据预处理
好像只有去停用词以及一些格式转化,详见代码
训练tfidf模型
TfidfVectorizer可以把原始文本转化为tf-idf的特征矩阵
from sklearn.feature_extraction.text import TfidfVectorizer
\\ token_pattern这个参数使用正则表达式来分词,其默认参数为r"(?u)\b\w\w+\b",表示匹配长度至少为2的单词
tfidf_model = TfidfVectorizer(token_pattern=r"(?u)\b\w+\b").fit_transform(document)
\\ 得到稀疏矩阵表示的矩阵
print(tfidf_model)
\\ 转化为更直观的一般矩阵
print(tfidf_model.todense())
结果如下:
(0, 7558) 0.02034730336798103
// 第0个字符串,对应词典序号为7558的词的TFIDF为0.02034730336798103
(0, 7158) 0.08233296734008405
(0, 8008) 0.04609521656939313
(0, 5965) 0.047696814786997874
(0, 6668) 0.037570246489892836
(0, 456) 0.017961627422006122
(0, 105166) 0.030653691593477726
(0, 5262) 0.06595886168755766
更多信息可以参考:https://blog.csdn.net/blmoistawinde/article/details/80816179
模型训练
// 划分训练集、测试集
X_train, X_test, y_train, y_test = train_test_split(tfidf_model, y, test_size=0.25, random_state=42)
// 模型训练
models = {}
models['LR'] = LogisticRegression()
models['LR'].fit(X_train[:], y_train[:])
models['DT'] = DecisionTreeClassifier()
models['DT'].fit(X_train[:], y_train[:])
models['RF'] = RandomForestClassifier()
models['RF'].fit(X_train[:], y_train[:])
这边 random_state 相当于随机数种子random.seed()
这里的random_state就是为了保证程序每次运行都分割一样的训练集和测试集
参考:https://www.jianshu.com/p/4deb2cb2502f
效果测评
for key in models.keys():
y_pred = models[key].predict(X_test)
print(key)
print('macro_precision:\t',end='')
print(metrics.precision_score(y_test, y_pred,average='macro'))
print('macro_recall:\t\t',end='')
print(metrics.recall_score(y_test, y_pred,average='macro'))
print('macro_f1:\t\t',end='')
print(metrics.f1_score(y_test, y_pred,average='macro'))
结果如下:
LR
macro_precision: 0.7766911245155266
macro_recall: 0.7750854458705632
macro_f1: 0.7750317914922913
DT
macro_precision: 0.5308533103981747
macro_recall: 0.5304569538998007
macro_f1: 0.5304636548464916
RF
macro_precision: 0.5499090577912552
macro_recall: 0.547657116077106
macro_f1: 0.5467089135105888