机器学习 #3 搭建机器学习简易开发环境

1. 安装开发环境

对于机器学习初学者来说,只需要 Jupyter Notebook 即可:

  • Python: AI 开发最常见的编程语言;
  • Jupyter Notebook: 基于网页交互式计算环境,可以直接在网页上编写代码和运行代码,轻量级的机器学习项目 Jupyter Notebook 完全搞得定。如果需要处理比较复杂的深度学习,要构建深度网络处理大量数据时,可以使用 Kaggle 在线 Jupyter Notebook 平台、Google Colaboratory 或者阿里云天池实验室等在线资源。
  • Anaconda: 用于管理工具包和环境的图形用户界面,能够帮助管理众多的 Python 库,并支持 Jupyter Notebook、JupyterLab、Spyder 等工具,我们选择个人免费版本下载安装。

安装 Anaconda 后,选择启动 Jupyter Notebook,随后在默认浏览器中打开本机默认目录:

  • Visual Studio Code: 轻量级但功能强大的集成开发环境,首次运行 ipynb 文件会提示安装 Jupyter 扩展插件:

2. Jupyter Notebook 入门

  • 新建项目: 选择一个目录并新建 Notebook 笔记:
  • pip: 安装包
python 复制代码
pip install plotly #安装Plotly包
  • Import: 导包
python 复制代码
import plotly.express as px #导入Plotly.express工具
  • 单元格类型: Jupyter Notebook 有两种主要的单元格类型
    • Code 类型: 表示可执行的单元格;
    • Markdown 类型: 表示富文本类型的单元格,用于对代码添加说明文字。
  • In[2]: In 表示可执行单元,中括号中的数字表示执行顺序
  • 输入模式: 绿色框是编辑模式,蓝色框是命令模式
  • 案例代码:
python 复制代码
pip install plotly # 安装Plotly包
import plotly.express as px # 导入Plotly.express工具
import pandas as pd # 导入Pandas
# 建立数据
stages = ["访问数", "下载数", "注册数", "搜索数", "付款数"] # 漏斗的阶段
# 漏斗的数据
df_male = pd.DataFrame(dict(number=[30, 15, 10, 6, 1], stage=stages))
df_male['性别'] = '男'
df_female = pd.DataFrame(dict(number=[29, 17, 8, 3, 1], stage=stages))
df_female['性别'] = '女'
df = pd.concat([df_male, df_female], axis=0) # 把男生女生的数据连接至一个新的Dataframe对象df
fig = px.funnel(df, x='number', y='stage', color='性别') # 把df中的数据传进漏斗
#显示漏斗图
fig.show()

3. 微信软文浏览量线性回归教学案例

基本步骤: 定义问题 - 收集数据 - 预处理数据 - 选择算法和建模 - 评估模型和优化 - 部署模型。

3.1 定义问题:估计软文浏览量

  • 特征:点赞数、转发数、热度指数、文章评级
  • 标签:浏览量
  • 学习方式:输入数据是有标签的,所以是监督学习
  • 问题分类:浏览量是连续变量,所以是回归问题

3.2 收集数据

黄佳《零基础实战机器学习》代码仓库

3.3 预处理数据

1、数据可视化

读取原始数据集,并使用散点图、箱线图等工具猜测特征和标签可能存在的关系:

  • 散点图: 在二维平面上显示某一维度特征与标签的关系:
python 复制代码
plt.plot(df_ads['点赞数'],df_ads['浏览量'],'r.', label='Training data') # 用matplotlib.pyplot的plot方法显示散点图
plt.xlabel('点赞数') # x轴Label
plt.ylabel('浏览量') # y轴Label
plt.legend() # 显示图例
plt.show() # 显示绘图结果!
  • 箱线图: 箱线图是由五个数值点组成,在统计学上成为 "五数概括",能够展示数据的分布和离散程度;
    • 五数: 最小值、下四分位数 (Q1)、中位数、上四分位数(Q3)和最大值;
    • 最大值和最小值的含义: 箱线图中的最大值和最小值并不总是数据中的实际最大值和最小值。箱线图中的最大值是数据中小于或等于Q3+1.5IQR(IQR为四分位距,等于Q3-Q1)的最大值,而最小值是数据中大于或等于 Q1-1.5IQR 的最小值;
    • 离群点: 超出最大值和最小值范围的数据点。

2、数据清洗

处理缺失、重复、错误或不可用的数据,提高数据质量,为后续分析提供可靠的基础。这里我们删除数据集中的 NaN 数据,如果 NaN 数据过多,也说明数据集的数据质量不好:

python 复制代码
df_ads = df_ads.dropna() # 把出现了NaN的数据行删掉
df_ads.isna().sum() # NaN出现的次数

3、构建特征集和数据集

将原始数据集就被拆分为的特征集和标签集:

  • 特征集: 从数据集中删除 "浏览量" 标签生成特征集;
  • 标签集: 从原始数据集中保留 "浏览量" 标签生成标签集。

4、拆分训练集、验证集和测试集:

将特征数据集和标签数据集分别按照 2:8 的比例拆分验证集和训练集,由于本项目比较简单,所以验证集也承担测试集的功能:

  • 特征训练集(X_train)
  • 特征测试集(X_test)
  • 标签训练集(y_train)
  • 标签测试集(y_test)

3.4 选择算法和建模

在定义问题阶段,我们观察到数据集的标签是连续变量,这是一个回归问题。回归分析的算法有线性回归、多项式回归和贝叶斯回归等,在数据可视化阶段,我们观察到特征和标签之间存在近似线性的关系,因此我们使用线性回归算法来建模。既然我们有 4 个特征输入,那么我们的目标函数自然是:

y = w_1·x_1 + w_2·x_2 + w_3·x_3 + w_4·x_4 + b

对于机器学习来说,最常用的算法工具包是开源的 scikit-learn 机器学习库,sklearn 提供了大量用于数据挖掘的机器学习工具,覆盖数据预处理、可视化、交叉验证和多种机器学习算法。这里我们使用其中的 LinearRegression 建模:

python 复制代码
from sklearn.linear_model import LinearRegression # 导入线性回归算法模型
linereg_model = LinearRegression() # 使用线性回归算法创建模型

调整外部参数:

python 复制代码
from sklearn.linear_model import LinearRegression # 导入线性回归算法模型
linereg_model = LinearRegression(fit_intercept = True) # 使用线性回归算法创建模型,并指定外部参数 fit_intercept

3.5 训练模型

将特征训练集和标签训练集输入给模型,这里我们只需要把数据传入到 fit 方法就可以。虽然训练模型是机器学习的核心环节,但由于有很多优秀的机器学习库存在,我们只需要很少的代码技能实现强大的学习功能。

python 复制代码
linereg_model.fit(X_train, y_train) # 用训练集数据,训练机器,拟合函数,确定内部参数

3.6 评估模型和优化

在初步完成模型训练后,我们就可以使用模型在任何同类型的数据集上预测真值,可以应用于验证集和测试集。如果预测的效果不好,我们就调整模型参数或更改模型,这是一个循环迭代优化的过程。

python 复制代码
# 预测
y_pred = linereg_model.predict(X_test) #预测测试集的Y值
df_ads_pred = X_test.copy() # 测试集特征数据
df_ads_pred['浏览量真值'] = y_test # 测试集标签真值
df_ads_pred['浏览量预测值'] = y_pred # 测试集标签预测值
df_ads_pred #显示数据

在进行模型效果的评估时,我们最小化误差来实现外部参数的评估和优化。机器学习库都会提供常用的指标,例如 R^2 和 MSE 均方误差指标就可以评估回归分析模型的效果。scikit-learn 的 LinearRegression 模型的 score 方法使用的就是 R^2 分数指标。R^2 的取值在 0 ~ 1 之前,R^2 越大说明模型拟合的效果:

python 复制代码
print("线性回归预测评分:", linereg_model.score(X_test, y_test)) # 输入特征测试集和标签测试集评估模型
python 复制代码
线性回归预测评分: 0.7085754407718876

输出目标函数参数信息:

python 复制代码
print('当前模型的4个特征的权重分别是: ', linereg_model.coef_)
print('当前模型的截距(偏置)是: ', linereg_model.intercept_)

输出预测值与真实值的散点图:

python 复制代码
plt.scatter(y_test, y_pred, color='blue')
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], '--k')
plt.xlabel('真实值')
plt.ylabel('预测值')
plt.title('线性回归')
plt.show()

3.7 对比不同外部参数组合

上面我们已经使用默认参数训练出一种模型,现在对比不同外部参数训练出来的效果:

python 复制代码
fit_intercept_list = [True, False]
# normalize_list = [True, False]
for item in itertools.product(fit_intercept_list): # , normalize_list):
    fit_intercept = item[0]
#     normalize = item[1]
    # 训练模型
    linereg_model = LinearRegression(fit_intercept = fit_intercept)
    linereg_model.fit(X_train, y_train)
    # 预测测试集对的y值
    y_pred  = linereg_model.predict(X_test)
    # 给出模型评分
    print(f'参数组合: fit_intercept = {fit_intercept}','线性回归预测评分:', linereg_model.score(X_test, y_test))

参考资料

相关推荐
love530love7 分钟前
【笔记】Windows 下载并安装 ChromeDriver
人工智能·windows·笔记·python·深度学习
Fastcv8 分钟前
手把手教你上传安卓库到Central Portal
android·maven·jcenter
whysqwhw11 分钟前
安卓应用线程与架构问题
android
小鱼干coc11 分钟前
Android 轻松实现 增强版灵活的 滑动式表格视图
android
机器学习之心12 分钟前
Matlab实现LSTM-SVM回归预测,作者:机器学习之心
机器学习·matlab·lstm·lstm-svm
昨日之日200625 分钟前
SoloSpeech - 高质量语音处理模型,一键提取指定说话人音频并提升提取音频清晰度和质量 本地一键整合包下载
人工智能·音视频
Le_ee29 分钟前
dvwa6——Insecure CAPTCHA
android·安全·网络安全·靶场·dvwa
仙人掌_lz1 小时前
优化 Transformer 模型:基于知识蒸馏、量化技术及 ONNX
人工智能·深度学习·ai·语言模型·自然语言处理·llm·transformer
pen-ai1 小时前
【深度学习】12. VIT与GPT 模型与语言生成:从 GPT-1 到 GPT4
人工智能·gpt·深度学习
django-尿素1 小时前
django入门-orm数据库操作
android·数据库·django