0 迭代法
迭代法不仅是机器学习、深度学习的核心,也是整个人工智能领域的重要概念,其对于算法的设计和实现至关重要
0.1 适合场景
对于不能一次搞定的问题,将其分成多步来解决,逐步逼近解决方案
0.2 典型应用
- KMeans 聚类算法:逐步调整聚类中心,直到满足某个条件
- 线性回归和逻辑回归:通过迭代优化算法(如梯度下降)逐步找到最佳模型参数
0.3 三个关键点
-
随机的开始
-
随机初始化:大多数迭代算法从一个随机点开始迭代
-
优点:避免陷入局部最优解,增加找到全局最优解的机会(随机-->普适性)
-
-
逐步变好的策略
-
优化:每一步都尝试改进当前解,使目标函数(如损失函数)值减小(每天进步一点点)
-
积累:通过调整参数,逐渐接近最优解(相信累积,相信长期主义)
-
-
退出条件
-
固定步数:达到预设的迭代次数时退出
-
误差限制:当前解和最优解之间的差距小于某个阈值时退出
-
1 KMeans算法
KMeans(K-Means Clustering,即:K-均值聚类)是使用最多、最简单易用的聚类算法,属于无监督学习的一种
KMeans的主要目的是将数据点分成 K 个预先指定的簇,使得簇内的方差尽可能小,簇间的方差尽可能大,算法的基本思想与KNN类似(物以类聚人以群分),具体做法是迭代地移动簇中心(称为质心),直到满足某个终止条件
1.1 基本概念
- 聚类:将数据点分成若干组,使得同一组内的数据点尽可能相似,不同组之间的数据点尽可能不同
- 无监督学习:数据没有标签,算法需要自行发现数据的结构(没有标签,只有特征,根据业务需求和样本特征来进行分类)
1.2 KMeans的内涵
- K:簇的数量(也就是分类数量,K个类)
- Means:每个簇的中心(质心),是该簇所有点的均值(mean代表均值,s代表多次)
1.3 算法步骤
-
随机初始化:选择 K 个数据点作为初始质心
-
分配步骤:将每个数据点分配给最近的质心,形成 K 个簇
-
更新步骤:计算每个簇的新质心
-
迭代:重复分配步骤和更新步骤,直到满足退出条件
1.4 随机出生点的影响
- 初始质心的选择:可能会影响最终的聚类结果
- 不稳定因素:不同的初始质心可能导致不同的局部最优解
- 多次运行:为了得到较好的结果,有时需要多次运行 KMeans 算法,选择最好的结果
1.5 算法实践
# 在sklearn.datasets中load_xxx是加载数据集,而make_xxx则是生成模拟数据集
# make_blobs生成模拟的数据集包含若干个分布在随机位置的簇(blobs),每个簇由中心点定义,并包含以高斯分布(正态分布)随机生成的样本点,非常适合KMeans算法的实践
# 因此,需要先引入make_blobs
from sklearn.datasets import make_blobs
# 使用make_blobs函数来生成包含特征和标签的数据集:
# (1)n_samples=1000:生成 1000 个样本点
# (2)n_features=2:每个样本点包含 2 个特征
# (3)centers=4:生成 4 个簇中心,数据将围绕这 4 个中心分布
# (4)cluster_std=0.5:设置簇中点分布的标准偏差为 0.5
# (标准偏差用来控制簇内样本点分布的离散程度,较小的标准偏差意味着样本点更紧密地围绕簇中心分布,而较大的标准偏差意味着样本点分布得更分散)
# (5)random_state=0:设置随机数生成器的种子为 0,这确保了每次生成的数据集都是一样的,保证结果的可重复性
X, y = make_blobs(n_samples=1000, n_features=2, centers=4, cluster_std=0.5, random_state=0)
# sklearn.cluster是 scikit-learn 中的一个子模块,它包含了多种用于执行聚类任务的算法,比如KMeans
# 所以这里需要对其进行引入
from sklearn.cluster import KMeans
# KMeans是一个类,所以应该用面向对象的思想对其进行使用(即:实例化对象)
# n_clusters=4,这告诉算法你想要将数据分为 4 个簇
# 此外,由于KMeams算法对于初始质心的选择是随机的,所以可以设置random_state随机数种子,确保结果的一致性
km = KMeans(n_clusters=4, random_state=0)
# 由于KMeans是无监督学习算法,所以训练时只需要传入X,通过特征来寻找标签
km.fit(X=X)
# 在训练完毕之后,可以得到两个非常关键的属性
# (1)cluster_centers_,表示质心
# (2)km.labels_,表示预测出来的簇标签
# 引入matplotlib的pyplot函数,画出质心和样本的关系图
from matplotlib import pyplot as plt
# 如果是用pycharm等后端工具绘图,需要指定图形用户界面工具包
# import matplotlib
# matplotlib.use('TkAgg') # 设置绘图后端为 TkAgg
# 由于我们在make_blobs函数中设定了生成的数据只有两个特征,所以我们可以将第一个特征作为横坐标、第二个特征作为纵坐标,绘制对应的散点图,查看样本之间的位置关系
# 将make_blobs函数生成的标签y赋值给c,表示每个簇都有不同的颜色
plt.scatter(x=X[:, 0], y=X[:, 1], c=y)
# 由于质心也是只有两个特征,所以我们可以将第一个特征作为横坐标、第二个特征作为纵坐标,用大小为100的红色五角星来绘制对应的散点图
plt.scatter(x=km.cluster_centers_[:, 0], y=km.cluster_centers_[:, 1], c="red",marker="*",s=100)
# 用show方法显示图表
plt.show()
# 查看每个点的簇标签
print(km.labels_)
2 线性回归
2.1 定义
线性回归(Linear Regression)是一种预测连续数值的监督学习算法,它试图找到特征和目标变量之间的线性关系,并通过线性关系进行模型的训练和预测
2.2 原理
类似于我们在中学时学习的一元一次方程:y = k*x + b,线性回归旨在通过最小化误差的平方和来寻找特征和目标值之间的关系,其模型的表达式通常为:(n元一次方程)
其中: 是权重(能代表特征的重要程度),
是特征,b 是偏置项,y 是目标值
方法: 使用训练数据,通过梯度下降或其他优化算法来调整权重和偏置,来最小化损失函数(通常是均方误差)
2.3 应用场景
线性回归主要用于预测连续数值,如房价、温度、销售额等
2.4 算法实践
以波士顿房价数据集为例,分别用线性回归算法、KNN算法和决策树算法进行回归预测
# 引入pandas,提供一些数据分析的方法
import pandas as pd
# 读取波士顿房价数据集文件
data = pd.read_csv(filepath_or_buffer="./boston_house_prices.csv", skiprows=1)
# 将总的数据集划分成X特征和y标签
# 先根据Attrition_Flag字段,取出y标签
y = data["MEDV"].to_numpy()
# 再把Attrition_Flag字段删除,将剩余字段均作为X特征
X = d