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

网站建设数据库搭建阳西网站seo

网站建设数据库搭建,阳西网站seo,网站怎么设计好看,常平镇网站建设公司#xff08;#xff09;紧接上文#xff0c;在完成基本的数据处理后#xff0c;接下来就是正常的使用了。当然怎么用#xff0c;确实需要好好思考一下~ 上文#xff1a;爬虫后的数据处理与使用#xff08;处理篇#xff09; 前言#xff1a; 一般来说#xff0c;我… 紧接上文在完成基本的数据处理后接下来就是正常的使用了。当然怎么用确实需要好好思考一下~    上文爬虫后的数据处理与使用处理篇 前言 一般来说我们费劲得到如此多的信息总不能说直接导入系统就完事了吧真要这样那就大炮打蚊子了。不妨扩展下思维比如依据这些数据做一些分析或者把它转换一下格式分下类作为模型训练的数据。正好依据当下热门的AI我们不妨做个“小模型”这样放到论文里那妥妥的创新点 但是由于上一篇文章运行后的结果聚类的结果显示集中在一种分类无法实现分类的预期实在不如意。因此有了以下猜想既然要做为什么不试试监督学习呢。而上篇的尝试就当作初步的数据筛选就是把距离中心最远的数据去除掉作为数据清洗。 在初筛数据后我的数据有一部分是从贴吧爬取的有的是我们从最基本的分类上做起吧~ 推荐配置 数据量 4000条手工标注量 400条 python 3.11  Jupyter       一、数据的分类划分 1、制定规则确定分类依据。 按照你的需求来比如你数据库设计中有许多标签分类那按照它来就行。 如果不知道自己的需求可以想一下自己要做啥进而推导出自己要的数据还有分类要求。 比如我这个分类划分为杂谈1、互助2、生活分享3、交流合作4、闲置5共计5个分类。 2、手工标注尽量多些 如图对数据进行手工标注我这儿是标注了600多条如果觉得麻烦可以分点给你的小伙伴……数据越多预测结果相对也更准确一点。 二、模型选择与比较 1、基于XGBoost的文本分类模型 1代码 直接上代码了 import matplotlib import pandas as pd import re import nltk from nltk.corpus import stopwords from nltk.stem import WordNetLemmatizer from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.pipeline import Pipeline from sklearn.metrics import classification_report, confusion_matrix from imblearn.over_sampling import SMOTE import matplotlib.pyplot as plt import seaborn as sns from xgboost import XGBClassifier # 设置字体为支持中文的字体 matplotlib.rcParams[font.sans-serif] [SimHei] matplotlib.rcParams[axes.unicode_minus] False # 下载停用词和词形还原器 nltk.download(stopwords) nltk.download(wordnet) # 定义数据预处理函数 def preprocess_text(text):# 小写化text text.lower()# 去除特殊字符和数字text re.sub(r[^a-zA-Z\u4e00-\u9fa5], , text) # 保留汉字和英文字符# 分词words text.split()# 去除停用词words [word for word in words if word not in stopwords.words(chinese)]# 词形还原lemmatizer WordNetLemmatizer()words [lemmatizer.lemmatize(word) for word in words]# 返回处理后的文本return .join(words)# 读取数据集 df pd.read_excel(tieba.xlsx) # 替换为你的文件名# 标题 是要识别的文本列分类杂谈1、互助2、生活分享3、交流合作4、闲置5 列是标注的数据列 texts df[标题].tolist() labels df[分类杂谈1、互助\t2、生活分享3、交流合作4、闲置5].tolist()# 数据预处理 processed_texts [preprocess_text(text) for text in texts]# 选择手动标注的数据 labeled_texts [text for text, label in zip(processed_texts, labels) if pd.notna(label)] labeled_labels [int(label) - 1 for label in labels if pd.notna(label)] # 将标签转换为整数并减去 1# 将手动标注的数据划分为训练集和测试集 X_train, X_test, y_train, y_test train_test_split(labeled_texts, labeled_labels, test_size0.2, random_state42, stratifylabeled_labels)# 将未标注的数据分开 unlabeled_texts [text for text, label in zip(processed_texts, labels) if pd.isna(label)]# 使用SMOTE进行过采样 vectorizer TfidfVectorizer(max_features10000, ngram_range(1, 2)) X_train_vect vectorizer.fit_transform(X_train) X_test_vect vectorizer.transform(X_test)smote SMOTE(random_state42) X_train_balanced, y_train_balanced smote.fit_resample(X_train_vect, y_train)# 创建一个流水线并进行网格搜索以调整超参数 pipeline Pipeline([(clf, XGBClassifier(eval_metricmlogloss, n_jobs-1)) # 移除 use_label_encoder 参数 ])# 定义参数网格 param_grid {clf__max_depth: [5, 10, 15],clf__n_estimators: [50, 100, 150],clf__learning_rate: [0.01, 0.1, 0.2], }grid_search GridSearchCV(pipeline, param_grid, cv5) grid_search.fit(X_train_balanced, y_train_balanced)# 获取最佳参数和分数 print(最佳参数:, grid_search.best_params_) print(最佳分数:, grid_search.best_score_)# 预测测试集的分类 y_pred grid_search.predict(X_test_vect)# 打印分类报告 print(分类报告) print(classification_report(y_test, y_pred))# 绘制混淆矩阵 conf_matrix confusion_matrix(y_test, y_pred) plt.figure(figsize(10, 7)) sns.heatmap(conf_matrix, annotTrue, fmtd, cmapBlues,xticklabelsgrid_search.best_estimator_.classes_, yticklabelsgrid_search.best_estimator_.classes_) plt.title(混淆矩阵) plt.xlabel(预测分类) plt.ylabel(真实分类) plt.show()# 预测未标注数据的分类 X_unlabeled_vect vectorizer.transform(unlabeled_texts) predicted_labels grid_search.predict(X_unlabeled_vect)# 将预测结果存储到一个 DataFrame 中 predicted_df pd.DataFrame({标题: unlabeled_texts,预测分类: predicted_labels 1 # 预测结果转换回原始标签1-5 })# 将结果保存到 Excel 文件 predicted_df.to_excel(预测结果.xlsx, indexFalse)print(预测结果已保存到 预测结果.xlsx 文件中。)2结果如下 整体来看效果不怎么样看来这种模型效果不佳我们可以换一个。 3解释 Precision精确率所有预测为正类的样本中实际上是正类的比例。正类就是随机指定的一种分类比如“1” Recall召回率所有真实为正类的样本中模型能够正确识别为正类的比例。 F1-score精确率和召回率的调和平均值综合考虑了精确率和召回率。 Support支持度每个类别在测试集中出现的样本数。 准确率Accuracy 0.52模型的总体准确率是 52%。即 52% 的样本被正确分类。 宏平均Macro Avg对各类别的精确率、召回率和 F1-score 进行平均不考虑样本的不平衡 Precision 0.24Recall 0.21F1-score 0.15说明了这些值较低说明模型的表现较差尤其是在少数类类别 0、3、4上。 加权平均Weighted Avg根据每个类别的样本数加权计算 Precision 0.44Recall 0.52F1-score 0.37这些值相较于宏平均更高说明模型对类别 1 和类别 2 的表现稍好。 2、transformer 模型 1代码 import pandas as pd import re import nltk from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report from transformers import BertTokenizer, BertForSequenceClassification from transformers import Trainer, TrainingArguments import torch# 下载停用词 nltk.download(stopwords)# 定义数据预处理函数 def preprocess_text(text):# 小写化text text.lower()# 去除特殊字符和数字保留汉字和英文字符text re.sub(r[^a-zA-Z\u4e00-\u9fa5], , text)return text# 读取数据集 df pd.read_excel(tieba.xlsx) # 替换为你的文件名# 这些行基本和上文一致 texts df[标题].tolist() labels df[分类杂谈1、互助\t2、生活分享3、交流合作4、闲置5].tolist()# 数据预处理 processed_texts [preprocess_text(text) for text in texts]# 将标签转换为整数并减去 1 labeled_labels [int(label) - 1 for label in labels if pd.notna(label)] labeled_texts [text for text, label in zip(processed_texts, labels) if pd.notna(label)]# 确保文本和标签的长度一致 assert len(labeled_texts) len(labeled_labels), 文本和标签长度不一致# 将手动标注的数据划分为训练集和测试集 X_train, X_test, y_train, y_test train_test_split(labeled_texts, labeled_labels, test_size0.2, random_state42, stratifylabeled_labels)# 加载BERT分词器 tokenizer BertTokenizer.from_pretrained(bert-base-chinese)# 对文本进行编码 train_encodings tokenizer(X_train, truncationTrue, paddingTrue, max_length128) test_encodings tokenizer(X_test, truncationTrue, paddingTrue, max_length128)# 创建数据集类 class TextDataset(torch.utils.data.Dataset):def __init__(self, encodings, labels):self.encodings encodingsself.labels labelsdef __getitem__(self, idx):item {key: torch.tensor(val[idx]) for key, val in self.encodings.items()}item[labels] torch.tensor(self.labels[idx])return itemdef __len__(self):return len(self.labels)# 创建训练集和测试集 train_dataset TextDataset(train_encodings, y_train) test_dataset TextDataset(test_encodings, y_test)# 加载BERT模型 model BertForSequenceClassification.from_pretrained(bert-base-chinese, num_labels5)# 设置训练参数 training_args TrainingArguments(output_dir./results2, #定义模型存放位置num_train_epochs4, #设置训练的 epoch 数即重复学习次数初始为3当调整为10时在第五次后出现了过拟合现象所以采用4次# 这里的epoch数需要验证一下总之多试几次……per_device_train_batch_size16,per_device_eval_batch_size64,warmup_steps500, #定义学习率预热的步骤数weight_decay0.01, #权重衰减系数也称为 L2 正则化用于防止过拟合logging_dir./logs,logging_steps10,eval_strategyepoch, )# 使用Trainer API进行训练 trainer Trainer(modelmodel,argstraining_args,train_datasettrain_dataset,eval_datasettest_dataset, )# 训练模型 trainer.train()# 预测测试集的分类 predictions, labels, _ trainer.predict(test_dataset) predicted_labels predictions.argmax(-1)# 打印分类报告 print(分类报告) print(classification_report(y_test, predicted_labels))# 将预测的标签和原始文本保存到 DataFrame 中 output_df pd.DataFrame({标题: X_test,真实标签: y_test,预测标签: predicted_labels })# 将结果保存到 Excel 文件 output_df.to_excel(prediction_results.xlsx, indexFalse)print(预测结果已保存到 prediction_results.xlsx)# 对未标注的数据进行预测并保存# 提取未标注的数据 unlabeled_texts df[df[分类杂谈1、互助\t2、生活分享3、交流合作4、闲置5].isna()][标题].tolist()# 打印未标注的数据数量和内容确保数据被正确提取 print(f未标注的数据数量: {len(unlabeled_texts)}) # print(f未标注的文本数据: {unlabeled_texts})# 如果有未标注的数据进行处理 if len(unlabeled_texts) 0:# 对未标注的文本进行编码unlabeled_encodings tokenizer(unlabeled_texts, truncationTrue, paddingTrue, max_length128)# 创建未标注数据集class UnlabeledTextDataset(torch.utils.data.Dataset):def __init__(self, encodings):self.encodings encodingsdef __getitem__(self, idx):item {key: torch.tensor(val[idx]) for key, val in self.encodings.items()}return itemdef __len__(self):return len(self.encodings[input_ids])# 创建未标注数据集unlabeled_dataset UnlabeledTextDataset(unlabeled_encodings)# 使用训练好的模型对未标注数据进行预测predictions, _, _ trainer.predict(unlabeled_dataset)predicted_labels predictions.argmax(-1)# 将预测的标签和未标注文本保存到 DataFrame 中unlabeled_df pd.DataFrame({标题: unlabeled_texts,预测标签: predicted_labels})# 将未标注数据的预测结果填充到原始 DataFrame 中对应的位置df.loc[df[分类杂谈1、互助\t2、生活分享3、交流合作4、闲置5].isna(), 分类杂谈1、互助\t2、生活分享3、交流合作4、闲置5] predicted_labels 1# 将包含预测结果的原始数据保存到 Excel 文件df.to_excel(预测数据.xlsx, indexFalse)print(未标注数据的预测结果已保存到 预测数据.xlsx) else:print(没有未标注的数据。)2结果如下 结果显示该模型的总体准确率为 76%整体差强人意吧。反正够凑合着用了hhhh 在完成之后会生成一个文件夹那个就是模型 3预测示例 以下是结果图整体还算可以。 好了以上就是对数据的应用的示例啦希望可以给到各位启发欢迎留言讨论哦~ 项目地址https://github.com/blhqwjs/spider
http://www.w-s-a.com/news/993908/

相关文章:

  • 网站建设不赚钱net112企业建站系统
  • 网站建设团队管理模板贵州省住房和城乡建设部网站
  • 曲沃网站建设网上学编程的有哪些比较好的网站
  • 厦门网站建设慕枫学做网站需要多久
  • 爱奇艺做任务领vip网站设计广告图片
  • 中科汇联网站建设手册上海公司名称注册查询网
  • 网站建设电子商务课总结和体会关于做网站书籍
  • 仪征网站建设公司哪家好简单网页制作素材图片
  • 甘肃第九建设集团公司网站潍坊个人做网站
  • 如何做后台网站的教程网站建设 关于我们
  • 极速网站建设哪家好连云港百度推广网站建设
  • 医院网站建设的目标wordpress中英文网站模板
  • 门户型网站开发难度网站导航栏有哪些
  • 推荐做任务网站软件定制开发哪家好
  • 邯郸兄弟建站第三方仓储配送公司
  • 商丘家具网站建设wordpress 添加代码
  • 基础建设的网站有哪些内容成都科技网站建设咨询电话
  • 券多多是谁做的网站招聘网站开发模板
  • 网站主机一般选哪种的企业数字展厅
  • 网站建设该如何学衡水建设局网站首页
  • 高校网站建设工作总结番禺网站开发哪家好
  • 苏州 网站的公司wordpress主页代码
  • 怎么用html做图片展示网站外贸网站建设推广费用
  • 可以做本地生活服务的有哪些网站中油七建公司官网
  • 如何建设谷歌网站网站建设优点
  • 做网站的目标是什么产品宣传片制作公司
  • 柳州建设公司网站辽宁建设工程信息网评标专家入库
  • 合肥建设学校官方网站excel导入wordpress
  • 禹城网站设计做网站需要考虑哪些
  • 深圳做营销网站建设wordpress添加文章封面