Datawhale X 李宏毅苹果书 AI夏令营——Task01笔记

一、前言

最近几年来,机器学习(Machine Learning, ML)和深度学习(Deep Learning, DL)这两个词几乎无处不在。说白了,机器学习就是让机器学会“动脑筋”,自动找到解决问题的办法。这样一来,机器就能接管一些以前只有人类才能完成的复杂任务。

想象一下,当你对手机说话时,手机能够立刻把你的语音变成文字,这其实就是机器在“学习”后,找到了一个能够把声音信号转换成文字的“秘方”。再比如,当你上传一张图片,系统能识别出里面的人物、物体,甚至还能说出这是在什么场景下拍的。这背后也是机器学习的功劳,系统通过学习,找到了一个复杂的公式,把图像转化成了对内容的理解。

再说一个让人惊叹的例子,AlphaGo,它利用深度学习技术打败了围棋高手。它的核心在于找到了一个能根据棋盘上的黑白子位置,决定下一步最佳落子点的超级“算法”。这种算法复杂到人类根本没法手工编写出来,这也正是机器学习的厉害之处——通过大量的数据和强大的计算力,自动找到这些复杂的算法。

二、垃圾邮件过滤示例

为了更好地理解机器学习的运作原理,我们来看看一个简单的实际例子:垃圾邮件过滤。每天,我们的邮箱都会接收到大量的邮件,其中不少是让人头疼的“垃圾邮件”。怎么让邮件系统自动识别并过滤掉这些垃圾邮件呢?这正是机器学习可以帮我们解决的问题之一。通过分析大量标注过的邮件,提取出关键特征并训练模型,系统就能在新邮件到来时自动判断它们是否是垃圾邮件。

我们会用到scikit-learn库里的朴素贝叶斯分类器,这是一种常用于文本分类的机器学习算法。

1.数据准备:

数据集:包含训练数据和标签。

标签:用于训练和评估模型的目标变量(垃圾邮件或正常邮件)。

import numpy as np
# 导入NumPy库,用于数值计算和处理数组数据

from sklearn.feature_extraction.text import CountVectorizer
# 从scikit-learn库导入CountVectorizer,用于将文本数据转换为数值特征向量

from sklearn.naive_bayes import MultinomialNB
# 从scikit-learn库导入MultinomialNB,朴素贝叶斯分类器,用于处理文本分类任务

from sklearn.model_selection import train_test_split
# 从scikit-learn库导入train_test_split,用于将数据集划分为训练集和测试集

from sklearn.metrics import accuracy_score
# 从scikit-learn库导入accuracy_score,用于计算模型的准确率

# 样本数据
emails = [
    "Win money now!", "Limited offer, get a free trial today!",
    "Meeting at 10am tomorrow", "Your subscription is about to expire",
    "Congrats, you've won a prize!", "Please review the attached document"
]
# 创建一个包含电子邮件文本的列表,用作示例数据集

# 标签 (1表示垃圾邮件,0表示正常邮件)
labels = np.array([1, 1, 0, 0, 1, 0])
# 创建一个NumPy数组,包含每封邮件的标签,1表示垃圾邮件,0表示正常邮件

# 切分数据为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(emails, labels, test_size=0.3, random_state=42)
# 使用train_test_split将数据集划分为训练集和测试集,其中30%的数据用于测试,70%用于训练

2.特征提取:

CountVectorizer:将文本数据转换为数值特征向量。这是文本预处理的一个重要步骤,通常用于将原始文本数据转换为机器学习模型可以理解的形式。

# 初始化CountVectorizer
vectorizer = CountVectorizer()
# 创建CountVectorizer实例,用于将文本转换为特征向量

# 将训练集的文本数据转化为特征向量
X_train_vec = vectorizer.fit_transform(X_train)
# 使用fit_transform方法将训练集文本数据转化为特征向量,并学习文本中的词汇表

# 同样处理测试集
X_test_vec = vectorizer.transform(X_test)
# 使用transform方法将测试集文本数据转化为特征向量,保持与训练集一致的词汇表

3.模型训练:

MultinomialNB:朴素贝叶斯分类器,用于训练模型以区分垃圾邮件和正常邮件。它是处理文本分类任务的经典算法。

# 初始化分类器
classifier = MultinomialNB()
# 创建MultinomialNB实例,朴素贝叶斯分类器用于文本分类任务

# 训练模型
classifier.fit(X_train_vec, y_train)
# 使用训练集数据训练朴素贝叶斯分类器

4.模型评估:

准确率:模型性能的评估指标,衡量模型在测试数据上的预测准确度。

# 预测测试集的结果
y_pred = classifier.predict(X_test_vec)
# 使用训练好的模型对测试集进行预测

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
# 使用accuracy_score计算模型在测试集上的准确率

print(f"模型的准确率: {accuracy * 100:.2f}%")
# 输出模型的准确率,以百分比形式显示

5.应用模型:

预测新数据:使用训练好的模型对新的未标注数据进行预测,应用于实际问题中。

# 新邮件
new_emails = ["Congratulations! You have won a free ticket", "Let's schedule a meeting next week"]
# 创建一个新的邮件列表,用于测试训练好的模型

# 转化为特征向量
new_emails_vec = vectorizer.transform(new_emails)
# 将新邮件文本数据转化为特征向量,以便进行预测

# 预测
predictions = classifier.predict(new_emails_vec)
# 使用训练好的模型对新邮件进行预测

# 输出预测结果
for email, pred in zip(new_emails, predictions):
    label = "垃圾邮件" if pred == 1 else "正常邮件"
    print(f"'{email}' -> {label}")
# 输出每封新邮件的预测结果,判断是垃圾邮件还是正常邮件

三、视频的点击次数预测案例学习

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值