机器学习基础入门:AI平台、回归、KNN与K-means

26 阅读11分钟

欢迎来到机器学习(ML)的世界。如果你刚开始接触这个领域,可能会觉得概念很多,不知道从何入手。没关系,这篇博文就是为你准备的!我们将从宏观的“AI平台”聊起,然后深入到几个非常基础且重要的机器学习算法:线性回归、逻辑回归、KNN 和 K-means。

读完这篇博文,你将对以下内容有一个初步的认识:

  • 什么是AI平台以及它们的作用。
  • 回归问题是什么,以及两种常见的回归算法:线性回归和逻辑回归(别被名字骗了!)。
  • KNN(K近邻)分类算法的基本思想。
  • K-means 聚类算法的基本思想。

让我们开始吧!

AI平台

在开始学习具体的算法之前,我们先了解一下进行机器学习工作通常需要什么样的环境。想象一下,你要盖一座房子,你需要工具、材料、合适的场地,可能还需要合作的工人。在机器学习领域,这个“场地”和“工具箱”就是AI平台。

什么是AI平台?

AI平台(或ML平台)是一系列工具和服务的集合,旨在帮助数据科学家和开发者更高效地构建、训练、部署和管理机器学习模型。它们通常提供以下能力:

  • 数据管理: 方便数据的存储、清洗和预处理。
  • 模型构建: 提供代码编写环境(如Jupyter Notebook)、算法库(如TensorFlow, PyTorch, Scikit-learn)和模型训练所需的计算资源(CPU/GPU)。
  • 模型训练: 提供可伸缩的计算能力,让你可以在大量数据上训练复杂的模型。
  • 模型部署: 将训练好的模型轻松地部署到生产环境中,以便进行实际预测。
  • 模型管理与监控: 跟踪模型版本、性能,并在需要时进行更新。

为什么需要AI平台?

虽然你可以在自己的电脑上使用库来运行简单的机器学习代码,但对于实际的项目,AI平台能极大地提高效率:

  • 简化基础设施: 你无需自己搭建复杂的计算环境。
  • 强大的计算能力: 轻松获得强大的计算资源来处理大数据和复杂模型。
  • 协作与分享: 便于团队成员共同工作和分享成果。
  • 端到端解决方案: 从数据到部署的一站式服务。

常见的AI平台包括云服务提供商(如AWS SageMaker, Google Cloud AI Platform/Vertex AI, Azure ML Studio)以及一些企业内部或开源的平台。理解AI平台的作用,有助于你更好地规划和执行机器学习项目。

回归

回归是机器学习中一种非常重要的任务,它属于监督学习的范畴。

什么是回归?

回归的目标是预测一个连续的输出值。想象一下,你想要预测一套房子的价格、明天的气温、或者一个学生的考试分数。这些都是连续的数值,不是离散的类别。

监督学习意味着我们需要有“标签”的数据来训练模型。在回归问题中,这些标签就是我们想要预测的连续值。比如,训练数据包含了很多房子的信息(面积、位置、房间数等)以及它们实际的售价。

下面我们将介绍两种常见的“回归”算法,但请注意其中一个虽然叫回归,却是用来做分类的!

线性回归

线性回归是最简单也是最基础的回归算法之一。

基本思想:

线性回归试图找到一个输入特征(或多个特征)和一个连续输出之间最佳的线性关系。简单来说,就是找到一条(或一个超平面)最能拟合数据点的直线(或平面)。

用数学公式表示,最简单的线性回归是: y=ax+by = ax + b 其中,xx 是输入特征,yy 是我们想预测的输出,aabb 是模型需要从数据中学习的参数(斜率和截距)。对于多个输入特征,公式会变成: y=β0+β1x1+β2x2+...+βnxny = \beta_0 + \beta_1x_1 + \beta_2x_2 + ... + \beta_nx_n 模型训练的目标是找到最优的 β0,β1,...,βn\beta_0, \beta_1, ..., \beta_n,使得预测值与真实值之间的误差最小。

例子:

假设你想根据房屋的面积来预测房价。你收集了一些数据:

面积 (平方米)房价 (万元)
80100
100120
120140
150165

线性回归会尝试找到一条直线,通过这些数据点,使得直线到点的距离(误差)最小。找到这条直线后,如果你有一套110平方米的房子,你就可以用这条直线来预测它的价格。

代码示例 (Python / Scikit-learn):

# 假设 X 是面积列表,y 是房价列表
from sklearn.linear_model import LinearRegression
import numpy as np

X = np.array([80, 100, 120, 150]).reshape(-1, 1) # 特征需要是二维数组
y = np.array([100, 120, 140, 165])

model = LinearRegression()
model.fit(X, y) # 训练模型

# 预测一套110平方米的房子价格
price_pred = model.predict(np.array([[110]]))
print(f"预测的房价:{price_pred[0]} 万元")

逻辑回归

重要提示: 尽管名字里有“回归”,逻辑回归(Logistic Regression)是一种用于分类的算法,尤其常用于二元分类(预测两个可能的类别,如“是”或“否”,“垃圾邮件”或“非垃圾邮件”)。

基本思想:

逻辑回归不像线性回归那样直接预测一个连续值,而是预测一个事件发生的概率。它使用一个叫做 Sigmoid 函数(或逻辑函数)来将线性模型的输出映射到 0 到 1 之间,这个值可以被解释为属于某一类别的概率。

Sigmoid 函数的公式是: P(y=1x)=11+e(β0+β1x1+...+βnxn)P(y=1|x) = \frac{1}{1 + e^{-( \beta_0 + \beta_1x_1 + ... + \beta_nx_n )}} 如果计算出的概率大于某个阈值(通常是 0.5),我们就把样本分到类别 1;否则,分到类别 0。

例子:

你想根据一个学生的学习时长和平均分来预测他是否能通过考试(“通过”或“不通过”)。这是一个二元分类问题。

你收集了一些学生的数据:

学习时长 (小时)平均分是否通过考试
570不通过
1085通过
775不通过
1290通过

逻辑回归模型会学习一个函数,根据学习时长和平均分,输出一个学生通过考试的概率。如果概率很高(比如 > 0.5),就预测“通过”;如果概率很低(比如 <= 0.5),就预测“不通过”。

代码示例 (Python / Scikit-learn):

# 假设 X 是特征列表(学习时长,平均分),y 是标签列表(0=不通过,1=通过)
from sklearn.linear_model import LogisticRegression
import numpy as np

X = np.array([[5, 70], [10, 85], [7, 75], [12, 90]])
y = np.array([0, 1, 0, 1])

model = LogisticRegression()
model.fit(X, y) # 训练模型

# 预测一个学习11小时,平均分88的学生能否通过考试
student_features = np.array([[11, 88]])
prediction = model.predict(student_features)
probability = model.predict_proba(student_features) # 预测概率

print(f"预测类别 (0=不通过, 1=通过): {prediction[0]}")
print(f"预测概率 (不通过, 通过): {probability[0]}")

KNN (K-近邻算法)

KNN(K-Nearest Neighbors)是另一种简单但非常有效的机器学习算法,也可以用于分类回归,但通常更常用于分类。它也属于监督学习

基本思想:

KNN 是一种“懒惰学习”或“基于实例的学习”算法。它不像线性回归或逻辑回归那样学习一个显式的函数模型,而是在预测时才进行计算。

要预测一个新的数据点的类别,KNN 会执行以下步骤:

  1. 选择一个整数 K(通常比较小,比如 3 或 5)。
  2. 计算新数据点与所有训练数据点之间的距离(常用的距离度量是欧几里得距离)。
  3. 找到离新数据点最近的 K 个训练数据点。
  4. 查看这 K 个邻居的类别。
  5. 将新数据点分配到在这 K 个邻居中出现次数最多的类别。

例子 (用于分类):

假设你有一些水果的数据,包括它们的甜度(sweetness)和颜色深度(color_intensity),标签是“苹果”或“橘子”。你现在有一个新的水果,你想知道它是苹果还是橘子。

甜度颜色深度水果类型
85苹果
76苹果
38橘子
47橘子
84苹果

现在来了一个新水果,甜度是 6,颜色深度是 6。我们设置 K=3。

  1. 计算新水果 (6, 6) 与所有已知水果的距离。
  2. 找到距离最近的 3 个水果。假设这 3 个水果是:(7, 6) 苹果, (8, 5) 苹果, (4, 7) 橘子。
  3. 在这 3 个邻居中,“苹果”出现了 2 次,“橘子”出现了 1 次。
  4. 因此,我们预测新水果是“苹果”。

代码示例 (Python / Scikit-learn):

# 假设 X 是特征列表(甜度,颜色深度),y 是标签列表('苹果', '橘子')
from sklearn.neighbors import KNeighborsClassifier
import numpy as np

X = np.array([[8, 5], [7, 6], [3, 8], [4, 7], [8, 4]])
y = np.array(['苹果', '苹果', '橘子', '橘子', '苹果'])

model = KNeighborsClassifier(n_neighbors=3) # 设置 K=3
model.fit(X, y) # 训练模型

# 预测一个甜度6,颜色深度6的水果类型
new_fruit = np.array([[6, 6]])
prediction = model.predict(new_fruit)

print(f"预测的水果类型:{prediction[0]}")

KNN 的性能受 K 的选择和距离度量的影响很大,并且对于高维数据和大数据集计算成本较高。

K-means (K-均值聚类)

K-means 是最著名的聚类算法之一,它属于无监督学习的范畴。

什么是聚类?

聚类是机器学习中另一种重要的任务,它的目标是将数据集中的样本分成若干个群组(簇),使得同一个簇内的样本彼此相似,而不同簇之间的样本差异较大。

无监督学习意味着我们用来训练的数据没有标签。我们只有数据点,希望算法能自动发现数据中的结构和分组。

基本思想:

K-means 算法试图将 NN 个数据点划分到预先设定的 KK 个簇中。它的核心思想是通过迭代找到 KK 个“中心点”(质心),并将每个数据点分配给离它最近的质心所代表的簇。

算法大致步骤:

  1. 初始化: 随机选择 K 个数据点作为初始的簇中心(质心)。
  2. 分配: 计算每个数据点到所有质心的距离,并将数据点分配给距离最近的质心所在的簇。
  3. 更新: 重新计算每个簇的质心,即该簇内所有数据点的平均值。
  4. 迭代: 重复步骤 2 和 3,直到质心不再发生显著变化,或达到最大迭代次数。

例子:

假设你是一家零售店,想根据顾客的年龄和年收入将他们分成几组,以便进行有针对性的营销。你收集了一些顾客数据:

年龄年收入 (万元)
2530
3035
4580
5090
2832
5585
3238

假设你决定将顾客分成 K=2 个簇。K-means 算法会找到两个最优的中心点,并将每个顾客分配到离他们最近的中心点所在的簇。最终,你可能会发现一个簇是“年轻低收入顾客”,另一个是“年长高收入顾客”。

代码示例 (Python / Scikit-learn):

# 假设 X 是特征列表(年龄,年收入)
from sklearn.cluster import KMeans
import numpy as np

X = np.array([[25, 30], [30, 35], [45, 80], [50, 90], [28, 32], [55, 85], [32, 38]])

# n_clusters 设置要分成簇的数量 K=2
model = KMeans(n_clusters=2, random_state=0, n_init=10) # n_init=10 helps avoid local optima
model.fit(X) # 训练模型

# 每个数据点被分配到的簇标签 (0 或 1)
labels = model.labels_
# 找到的簇中心
centroids = model.cluster_centers_

print(f"每个数据点所属的簇标签: {labels}")
print(f"找到的簇中心: {centroids}")

# 你也可以用 model.predict([[新的顾客年龄, 新的顾客收入]]) 来预测新顾客属于哪个簇

K-means 的结果依赖于初始质心的选择,可以通过多次运行并选择最优结果来缓解。它假设簇是球形的且大小相似,对于形状不规则或密度差异大的簇效果可能不好。

总结

恭喜你!你已经了解了机器学习领域的一些基本概念和重要的基础算法:

  • AI平台: 提供了构建、训练和部署ML模型的环境和工具。
  • 回归问题: 预测连续数值。
  • 线性回归: 找到特征与连续输出之间的线性关系。
  • 逻辑回归: 使用Sigmoid函数预测类别概率,用于分类(主要是二元分类)。
  • KNN: 基于邻居的投票(分类)或平均(回归)进行预测的惰性监督学习算法。
  • K-means: 通过迭代寻找簇中心,将数据划分为 K 个簇的无监督聚类算法。

这些算法是机器学习世界的基石。理解它们的工作原理和适用场景,将为你继续学习更高级的算法和技术打下坚实的基础。

机器学习之旅才刚刚开始,还有更多的算法(如决策树、支持向量机、神经网络等)和概念(如模型评估、特征工程、过拟合/欠拟合等)等待你去探索。

希望这篇博文对你有所帮助!祝你在机器学习的学习道路上一切顺利!