当前位置: 首页 > news >正文

tf-idf +逻辑回归来识别垃圾文本

引入相关包

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, auc, roc_auc_score
import joblib
import os
import pandas as pd
from sklearn.model_selection import train_test_split
import picklepath  = '/Users/xinghuatianying/data/DataSets/im_cheat/'
os.chdir(path)

加载数据

训练样本demo:

label	msg
1       全网最低价完善数据 手把手教你引流 详细+V:vd12388
1       耍.微.店等.级评.价销.量回头.率➕15314268311
1       我收姐妹+我QQ2877613260
1       违规啥啊 佳651815289➕我q
0       温和洁面膏+红粉爽肤水
0       小卡盲盒改地址
0       20杯(每个口味各4杯)
def load_data():data = pd.read_csv('msg_train.csv', sep = "\t", names=['label', 'msg'])#对数据进行随机打乱data = data.sample(frac=1, random_state=42)# print(data.shape)# print(data.head(10))#查看0-1的比例,可以看出来,数据集基本上平衡# print(data['label'].value_counts())# 对文本进行分字data['msg'] = data['msg'].apply(lambda x: ' '.join(x))# print(data.head())x_train, x_test, y_train, y_test = \train_test_split(data['msg'],data['label'],test_size=0.3,random_state=42)# print(x_train.shape, x_test.shape, y_train.shape, y_test.shape)return x_train, x_test, y_train, y_test

模型训练

def train_model(x_train, x_test, y_train, y_test):#tf-idf训练vectorizer_word = TfidfVectorizer(max_features=800000,token_pattern=r"(?u)\b\w+\b",min_df=1,#max_df=0.1,analyzer='word',ngram_range=(1, 5))tfidf_model = vectorizer_word.fit(x_train)# 保存模型到文件with open('tfidf_model.pkl', 'wb') as f:pickle.dump(tfidf_model, f)tfidf_train = vectorizer_word.transform(x_train)tfidf_test  = vectorizer_word.transform(x_test)#查看词典的大小 vectorizer_word.vocabulary_print(len(vectorizer_word.vocabulary_))#逻辑回归模型的训练lr_word = LogisticRegression(solver='sag',verbose=2)lr_word.fit(tfidf_train, y_train)# 保存模型,下次可以直接使用joblib.dump(lr_word, 'lr_word_ngram.pkl')#模型读取model = joblib.load(filename="lr_word_ngram.pkl")# 模型预测y_pred_word_1 = lr_word.predict(tfidf_test)y_pred_word = lr_word.predict_proba(tfidf_test)[:, 1]# 模型评估print(accuracy_score(y_test, y_pred_word_1))

模型预测

def predcit_main():# 拉取数据data = pd.read_csv('test_msg.csv', names=['msg'])#对数据进行随机打乱data = data.sample(frac=1, random_state=42)print(data.shape)print(data.head(10))# 对文本进行分字data['msg'] = data['msg'].apply(lambda x: ' '.join(x))x_test = data['msg']# 从文件中加载模型with open('tfidf_model.pkl', 'rb') as f:tfidf_model = pickle.load(f)print(x_test[:10])tfidf_test  = tfidf_model.transform(x_test)# 模型读取lr_model = joblib.load(filename="lr_word_ngram.pkl")# 模型预测y_pred_word = lr_model.predict_proba(tfidf_test)[:, 1]predict_df = pd.DataFrame({ 'y_pred_word': y_pred_word, 'x_test': x_test})# 保存到 CSV 文件predict_df.to_csv('predict_test.csv', index=False, sep = "\t")

标题主函数:

if __name__ == '__main__':x_train, x_test, y_train, y_test = load_data() # 加载训练数据train_model(x_train, x_test, y_train, y_test) # 模型训练predcit_main() # 模型预测
http://www.lryc.cn/news/274036.html

相关文章:

  • Oracle - 数据库的实例、表空间、用户、表之间关系
  • Java面试项目推荐,异构数据源数据流转服务DatalinkX
  • 一、Vue3组合式基础[ref、reactive]
  • unity网页远程手机游戏Inspector面板proxima
  • 聊聊spring事务12种场景,太坑了
  • mysql 数据查重与查重分页
  • 微服务(12)
  • ​iOS实时查看App运行日志
  • 【计算机毕业设计】SSM健身房管理系统
  • 嵌入式Linux之MX6ULL裸机开发学习笔记(IMX启动方式-启动设备的选择)
  • K8S Ingress-Nginx导出TCP端口
  • 索引类型-哈希索引
  • uniapp中组件库的Textarea 文本域的丰富使用方法
  • LLM、AGI、多模态AI 篇三:微调模型
  • IPC之十二:使用libdbus在D-Bus上异步发送/接收信号的实例
  • ES6之生成器(Generator)
  • Matlab技巧[绘画逻辑分析仪产生的数据]
  • Go面试题学习
  • SQL效率-查询条件需避免使用函数处理索引字段
  • 【Spring 篇】Spring:轻松驾驭 Java 世界的利器
  • 八个LOGO素材网站推荐分享
  • React格式化规范
  • 如何利用Conda管理多种虚拟环境与Jupyter Notebook内核切换
  • 博客摘录「 什么是QPS、TPS、吞吐量?- 高并发名词概念」2024年1月5日
  • PTA——逆序的三位数
  • ChatGPT怎么帮我上班的
  • WPF 漂亮长方体、正文体简单实现方法 Path实现长方体 正方体方案 WPF快速实现长方体、正方体的方法源代码
  • Nginx(十三) 配置文件详解 - 反向代理(超详细)
  • 谷歌浏览器启用实时字幕功能
  • php接口优化 使用curl_multi_init批量请求