机器学习基础

王树义

主要内容

  • 基础概念

  • 上手实践

基础概念

预热问题

  • 谁用过机器学习?

参考答案

  • 实际上,每天都在应用

一些例子

自动驾驶

  • 坐过吗?

  • 机器学习最容易被看见的应用之一

  • 现实里仍然是“监督式”高阶辅助驾驶

实际效果

  • Tesla Full Self-Driving (Supervised)

  • 停车场

  • 不是 autonomous

机器人

  • Physical AI

问题

  • 你觉得,未来哪些工作会被 AI 替代?

问题

  • 你觉得,程序员会不会被 AI 替代?

黄仁勋的看法

  • 工程师不会消失

  • 必须学会与 AI 协作

李彦宏的看法

  • 模型成本下降

  • 工具更成熟

  • 应用层价值更高

你怎么看?

问题

  • 什么叫机器学习?

定义

  • Machine learning (ML) is the study of algorithms and mathematical models that computer systems use to progressively improve their performance on a specific task.

白话版

  • 机器学习(ML)是研究算法和数学模型的学科,计算机系统利用它们来逐步提高执行特定任务的性能。

AI · ML · DL · 生成式 AI

这门课重点在传统 ML 基础

机器学习都包括哪些类别?

什么是监督学习?

  • 给算法提供有标签的训练数据

  • 让算法从数据中学习如何预测新的输入数据的标签

  • 让计算机学习如何根据已知的答案来预测新的答案

什么是非监督学习?

  • 给算法提供无标签的训练数据

  • 让算法从数据中学习如何发现数据之间的相似性和差异性

  • 让计算机从数据中自学如何发现数据的结构和规律

什么是增强学习?

  • 让算法在特定的环境中与环境互动

  • 学习如何采取行动以最大化某种奖励信号

  • 让计算机通过不断尝试和错误来学习如何在特定的环境中做出最佳的决策

监督学习

  • 分类

什么叫“分类”?

  • 定义

  • 从一个数据集到一组预先定义的、非交叠的类别的映射过程

分类的例子

  • 能否给我举一个你生活或学习中遇到的分类任务的例子?

概念辨析

  • 与「聚类」相区别

聚类

  • 把物体根据相似性聚合成不同群体

例子

练习

  • 如何对以下的动物聚类?

  • 鸡,金鱼,鹅,鸭子

可能的答案

  • {鸡} {鹅,鸭子,金鱼}

  • {鸡,鹅,鸭子} {金鱼}

练习

  • 如何对以下的动物分类?

  • 鸡,金鱼,鹅,鸭子

答案

  • 你不能做

  • 因为你没有「设定类别」

机器分类

  • 机器如何做分类任务?

两种方式

  • 规则系统

  • 机器学习

规则系统

  • 设定明确的规则

  • If then else …

  • 对物体检查,符合某规则,就放到指定对应的类别中

规则系统的优点是什么?

  • 简单明了

  • 机器执行起来最为简便

规则系统的缺点是什么?

  • 机器很傻

  • 人必须把规则设定得非常清晰明确

  • 如果规则不明确,或者规则有错

  • 后果很糟糕

规则与错误

  • 能否给我举一个人类定义规则不明确,产生错误的例子?

参考例子

  • 柏拉图提出了「人」的定义

人的定义是什么?

  • 两腿直立无毛动物(a featherless biped)

麻烦

  • 第欧根尼斯

  • 举了个反例

更糟糕的

  • 如果我们人类都不知道该如何定义规则

  • 那该怎么办?

巧妙解法

  • 让机器「上自习」

  • 机器学习

人负责什么?

  • 给机器示范

  • 标记

AI 原生岗位链条

  • 数据与标注

  • 评测与反馈

  • 工具编排

  • 应用落地

标注工作的例子

  • 一段视频

提问

  • 如果让你进入 AI 工作流,你更想负责哪一段?

分类问题对应着哪些模型?

  • 逻辑回归 Logistic Regression

  • K 近邻 K-Nearest Neighbors

  • 支持向量机 SVM

  • 朴素贝叶斯 Naive Bayes

  • 决策树 Decision Tree

  • 随机森林Random Forest

深度学习补充

  • 神经网络 Neural Network

  • 卷积神经网络 Convolutional Neural Network

  • 循环神经网络 Recurrent Neural Network

  • Transformers

  • 这门课先把传统分类基础打牢

  • 更系统的内容后续再展开

基本原则

  • 寻找分类规则

  • 把数据点分到不同区域

二元分类

多类别分类

决策树

对决策树可视化

  • 提供可解释性

上手实践

Iris

  • 经典数据集

  • 鸢尾花

构成

  • 150 个样本

  • 每个样本有 4 个特征

  • 花萼长度

  • 花萼宽度

  • 花瓣长度

  • 花瓣宽度

  • 类别(setosa、versicolor 和 virginica)

特点

  • 特征之间相对独立,没有强相关性,因此可以使用基于线性模型的算法进行处理

  • 类别分布相对均衡,每个类别都有 50 个样本,避免了类别不平衡问题对模型的影响

数据读取


              from sklearn import datasets
              import matplotlib.pyplot as plt
              # Load the iris dataset
              iris = datasets.load_iris()
              

可视化

  • 散点图

  • 目前的数据集,可视化会有什么问题?

  • 4个特征,但是平面只有两个维度

降维

  • 选择两个维度

  • 花萼长度(sepal length)与花萼宽度(sepal width)

代码


              X = iris.data[:, :2]  # we only take the first two features (sepal length and sepal width)
              plt.figure(figsize=(8, 6))
              plt.scatter(X[:, 0], X[:, 1], c=iris.target, cmap=plt.cm.Set1, edgecolor='k')
              plt.xlabel('Sepal length')
              plt.ylabel('Sepal width')
              plt.title('Sepal Length vs Sepal Width')
              plt.show()
              

绘图结果

问题

  • 各种维度的组合,一共多少种?

答案

代码


              fig, axarr = plt.subplots(4, 4, figsize=(15, 15))
              plt.subplots_adjust(wspace=0.4, hspace=0.4)
              features = iris.feature_names
              for i in range(4):
                  for j in range(4):
                      if i == j:
                          axarr[i, j].text(0.5, 0.5, features[i], fontsize=12, ha='center')
                          axarr[i, j].axis('off')
                      else:
                          axarr[i, j].scatter(iris.data[:, j], iris.data[:, i], c=iris.target, cmap=plt.cm.Set1, edgecolor='k', s=20)
                          if i == 3:
                              axarr[i, j].set_xlabel(features[j])
                          if j == 0:
                              axarr[i, j].set_ylabel(features[i])
              plt.show()
              

手动分类


              def classify_iris(sample):
                  if sample[2] <= 2.45:
                      return 0
                  elif sample[2] > 2.45 and sample[3] <= 1.75:
                      if sample[1] <= 2.8:
                          return 1
                      else:
                          return 2
                  else:
                      if sample[0] <= 6.05:
                          return 1
                      else:
                          return 2
              

尝试

  • 手动分类方式

  • 分类之前,要做什么?

集合划分


              from sklearn.model_selection import train_test_split
              # Split the data into training and testing sets
              X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=42)
              

测试集

  • 推测分类

  • 与标记对比

  • 计算准确率 accuracy_score

  • 这是入门里最直观的指标

  • 真实任务里还要看 precision / recall 等指标

代码


              from sklearn.metrics import accuracy_score
              # Apply the classification function to the test set
              y_pred = [classify_iris(sample) for sample in X_test]
              # Calculate the accuracy
              accuracy = accuracy_score(y_test, y_pred)
              accuracy
              

尝试

  • 手动改进规则

  • 再次计算准确率

调用模型

LogisticRegression


                  from sklearn.linear_model import LogisticRegression
                  # Initialize the model
                  logreg = LogisticRegression(max_iter=200)
                  # Train the model on the training set
                  logreg.fit(X_train, y_train)
                  # Predict on the test set
                  y_pred_logreg = logreg.predict(X_test)
                  # Calculate the accuracy
                  accuracy_logreg = accuracy_score(y_test, y_pred_logreg)
                  accuracy_logreg
                  

决策树

另一种可视化

  • Dtreeviz

  • 可选:另一种可解释可视化风格

离场签到

  • 今天最让你意外的一个知识点是什么?

  • 你现在最困惑的一个问题是什么?