Coggle 30 Days of ML(23年7月)任务四:线性模型训练与预测

简介: Coggle 30 Days of ML(23年7月)任务四:线性模型训练与预测
任务四:使用TFIDF特征和线性模型完成训练和预测
  • 说明:在这个任务中,你需要使用TFIDF特征和线性模型(如逻辑回归)完成训练和预测,通过机器学习算法来区分人类编写的文本和机器生成的文本。
  • 实践步骤:
  1. 准备TFIDF特征矩阵和相应的标签。
  2. 划分训练集和测试集。
  3. 使用Sklearn中的线性模型(如逻辑回归)进行训练,并使用训练好的模型对测试集进行预测。
  4. 评估模型的性能,如准确率、精确率、召回率等指标。

TFIDF提取特征

首先使用任务三中的方法先提取特征

tfidf = TfidfVectorizer(token_pattern=r'(?u)\b\w\w+\b', max_features=4000, ngram_range=(1, 2))
train_tfidf = tfidf.fit_transform(train_data['content'])
test_tfidf = tfidf.fit_transform(test_data['content'])

这样我们就一句得到了TFIDF的特征矩阵,接下来我们就可以进行下一步的训练和测试了

如果想要提高模型的精度,可以尝试调整TfidfVectorizer的一些超参数。以下是一些常用的超参数,可以根据实际情况进行调整:

  1. ngram_range:n元语法范围。通过将ngram_range设置为大于1的值,可以考虑多个连续的词作为特征,从而捕捉更多的语义信息。例如,将ngram_range设置为(1, 2)可以同时考虑单个词和相邻的词作为特征。
  2. max_dfmin_df:单词的最大和最小文档频率。通过调整max_dfmin_df的值,可以过滤掉在太多或太少文档中出现的单词,从而减少噪声和特异性单词的影响。
  3. max_features:最大特征数。通过限制特征的数量,可以减少特征空间的维度,从而减少模型的复杂性和计算量。
  4. stop_words:停用词列表。通过设置适当的停用词列表,可以去除常见的、对分类任务没有帮助的词语,从而减少噪声。
  5. sublinear_tf:子线性TF缩放。通过将sublinear_tf设置为True,可以使用子线性缩放来平衡长文本和短文本的特征权重,从而提高模型对不同长度文本的适应性。
  6. norm:特征向量的归一化方式。通过调整norm参数,可以选择不同的归一化方式,如’l2’、‘l1’或’none’,以适应不同的数据分布。

训练Logistic Regression

由于本身一句划分了训练集和测试集,所以暂时我这里就重新划分一个验证集了,就在训练集上训练和评估,最后在测试集上预测

这里选择了Sklearn中的线性模型进行训练,模型很简单,很快就能得到不错的结果

m = LogisticRegression()
m.fit(
    train_tfidf,
    train_data['label']
)

训练完以后,我们就得到了一个不错的线性模型,接下来我们可以进行评估模型的性能

评估模型

首先我们可以计算一下准确率,从结果上来看,得到的结果非常不错,大概有99%+的准确率

from sklearn.metrics import accuracy_score
predictions = m.predict(train_tfidf)
accuracy = accuracy_score(train_data['label'], predictions)
print("Accuracy:", accuracy)
Accuracy: 0.9922142857142857

我们还计算了精确率和召回率的指标,各方面指标都比较高,都在95%以上

from sklearn.metrics import precision_score, recall_score
precision = precision_score(train_data['label'], predictions)
recall = recall_score(train_data['label'], predictions)
print("Precision:", precision)
print("Recall:", recall)
Precision: 0.9995138551288284
Recall: 0.9500924214417745

我还对混淆矩阵进行可视化,可以看到有一部分数据被误判了

from sklearn.metrics import confusion_matrix
import matplotlib.pyplot as plt
import seaborn as sns
# 计算混淆矩阵
cm = confusion_matrix(train_data['label'], predictions)
# 可视化混淆矩阵
plt.figure(figsize=(8, 6))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', cbar=False)
plt.xlabel('Predicted')
plt.ylabel('Actual')
plt.title('Confusion Matrix')
plt.show()

模型预测及提交

最后利用模型对测试集进行预测,得到结果文件

import pandas as pd
submit = pd.read_csv('ChatGPT/sample_submit.csv')
submit = submit.sort_values(by='name')
submit['label'] = m.predict(test_tfidf).astype(int)
submit.to_csv('ChatGPT/lr.csv', index=None)


经过提交以后,最后的分数为0.8837,从结果上来看,还是存在一些过拟合的,所以后续可以选择更强大的模型或者一些防止过拟合的方法来提高分数。


相关文章
|
JavaScript 前端开发 应用服务中间件
Vue项目如何进行部署?是否有遇到部署服务器后刷新404问题?
Vue项目如何进行部署?是否有遇到部署服务器后刷新404问题?
385 0
|
机器学习/深度学习 Python
配置环境miniconda+pycharm【机器学习】
配置环境miniconda+pycharm【机器学习】
1937 0
|
10月前
|
JavaScript 前端开发 数据安全/隐私保护
Vue Router 简介
Vue Router 是 Vue.js 官方的路由管理库,用于构建单页面应用(SPA)。它将不同页面映射到对应组件,支持嵌套路由、路由参数和导航守卫等功能,简化复杂前端应用的开发。主要特性包括路由映射、嵌套路由、路由参数、导航守卫和路由懒加载,提升性能和开发效率。安装命令:`npm install vue-router`。
|
8月前
|
存储 机器学习/深度学习 监控
如何监控员工的电脑——基于滑动时间窗口的Java事件聚合算法实现探析​
在企业管理场景中,如何监控员工的电脑操作行为是一个涉及效率与合规性的重要课题。传统方法依赖日志采集或屏幕截图,但数据量庞大且实时性不足。本文提出一种基于滑动时间窗口的事件聚合算法,通过Java语言实现高效、低资源占用的监控逻辑,为如何监控员工的电脑提供一种轻量化解决方案。
207 3
|
Kubernetes 持续交付 Docker
SpringCloud + K8S:容器化持续交付的强大组合
【8月更文挑战第22天】在当今快速迭代的软件开发环境中,如何高效、可靠地部署和管理微服务架构应用成为了技术团队面临的重大挑战。SpringCloud与Kubernetes(K8S)的结合,为微服务架构的容器化持续交付提供了强大的解决方案,极大地提升了应用的可扩展性、灵活性和可维护性。本文将从技术角度深入探讨这一组合的优势及其在工作学习中的实践应用。
858 3
|
SQL 前端开发 Java
若依修改03----利用若依代码生成器,生成课程管理的前后端代码,课程的条件搜索接口,一旦数据表创建好了,直接交给若依代码的生成器就好了,配置代码生成信息,包含基本信息,字段信息,生成信息。字段信息决
若依修改03----利用若依代码生成器,生成课程管理的前后端代码,课程的条件搜索接口,一旦数据表创建好了,直接交给若依代码的生成器就好了,配置代码生成信息,包含基本信息,字段信息,生成信息。字段信息决
|
机器学习/深度学习 数据采集 传感器
机器学习实战系列[一]:工业蒸汽量预测(最新版本上篇)含数据探索特征工程等
在工业蒸汽量预测上篇中,主要讲解了数据探索性分析:查看变量间相关性以及找出关键变量;数据特征工程对数据精进:异常值处理、归一化处理以及特征降维;在进行归回模型训练涉及主流ML模型:决策树、随机森林,
|
负载均衡
【SpringCloud】Ribbon负载均衡原理、负载均衡策略、饥饿加载
【SpringCloud】Ribbon负载均衡原理、负载均衡策略、饥饿加载
315 0
|
安全 网络安全 数据安全/隐私保护
全面了解电子邮件的优点和不足之处
电子邮件因其易用性、透明度和低成本而长期受欢迎,但过度饱和和安全风险是其主要缺点。2022年,90%以上的美国人使用电子邮件,使其超越了即时消息和社交媒体。优点包括可访问性、透明度(如数据安全措施)、一致性(离线发送,线上接收)和定制化(如自定义域名)。然而,邮件过量可能导致信息忽略,而安全问题如网络钓鱼需要防范。有效的电子邮件管理策略和安全培训是必要的。
442 0
|
SQL 存储 大数据
flink standalone 部署模式且不能使用 hdfs 场景下的各种问题及其应对方案
flink standalone 部署模式且不能使用 hdfs 场景下的各种问题及其应对方案