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: 设备包
pip install plotly #设备Plotly包
- Import: 导包
import plotly.express as px #导入Plotly.express东西
-
单元格类型: Jupyter Notebook 有两种首要的单元格类型
- Code 类型: 标明可执行的单元格;
- Markdown 类型: 标明富文本类型的单元格,用于对代码添加阐明文字。
- In[2]: In 标明可执行单元,中括号中的数字标明执行次序
- 输入方式: 绿色框是编辑方式,蓝色框是指令方式
- 案例代码:
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、数据可视化
读取原始数据集,并运用散点图、箱线图等东西猜想特征和标签或许存在的联系:
- 散点图: 在二维平面上闪现某一维度特征与标签的联系:
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 数据过多,也阐明数据集的数据质量欠好:
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_1x_1 + w_2x_2 + w_3x_3 + w_4x_4 + b
关于机器学习来说,最常用的算法东西包是开源的 scikit-learn 机器学习库,sklearn 供给了很多用于数据发掘的机器学习东西,掩盖数据预处理、可视化、交叉验证和多种机器学习算法。这儿我们运用其间的 LinearRegression 建模:
from sklearn.linear_model import LinearRegression # 导入线性回归算法模型
linereg_model = LinearRegression() # 运用线性回归算法创建模型
调整外部参数:
from sklearn.linear_model import LinearRegression # 导入线性回归算法模型
linereg_model = LinearRegression(fit_intercept = True) # 运用线性回归算法创建模型,并指定外部参数 fit_intercept
3.5 操练模型
将特征操练集和标签操练集输入给模型,这儿我们只需求把数据传入到 fit 方法就可以。虽然操练模型是机器学习的中心环节,但由于有很多优异的机器学习库存在,我们只需求很少的代码技术结束强壮的学习功用。
linereg_model.fit(X_train, y_train) # 用操练集数据,操练机器,拟合函数,确认内部参数
3.6 点评模型和优化
在开始结束模型操练后,我们就可以运用模型在任何同类型的数据集上猜想真值,可以应用于验证集和检验集。假设猜想的效果欠好,我们就调整模型参数或更改模型,这是一个循环迭代优化的进程。
# 猜想
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 越大阐明模型拟合的效果:
print("线性回归猜想评分:", linereg_model.score(X_test, y_test)) # 输入特征检验集和标签检验集点评模型
线性回归猜想评分: 0.7085754407718876
输出政策函数参数信息:
print('其时模型的4个特征的权重别离是: ', linereg_model.coef_)
print('其时模型的截距(偏置)是: ', linereg_model.intercept_)
输出猜想值与真实值的散点图:
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 比照不同外部参数组合
上面我们已经运用默许参数操练出一种模型,现在比照不同外部参数操练出来的效果:
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))
参考资料
- 零基础实战机器学习 —— 黄佳 著
- 机器学习 40 讲 —— 王天一 著
- 人工智能基础课 —— 王天一 著
- 程序员的数学基础课 —— 黄申 著