
在动辄千亿参数的大模型席卷一切的今天,许多人误以为人工智能始于Transformer和Attention。但若将AI比作一座摩天大楼,经典AI算法便是深埋地下的钢筋混凝土地基。它们不依赖海量算力,不追求“大力出奇迹”,而是靠严谨的数学证明、清晰的几何直觉和优雅的逻辑推导,在数据匮乏的年代撑起了智能自动化的一片天。
时至今日,在金融风控、医疗诊断和工业控制等需要高可解释性和低算力成本的场景中,这些“老古董”依然是大数据杀器无法替代的黄金标准。
本文带你重温三大经典范式,并附上极简的代码骨骼,让你体会那种“四两拨千斤”的原始美感。
如果说AI有一条“血液”,那一定是梯度下降(Gradient Descent)。线性回归虽是统计学的产物,但它确立了现代机器学习最核心的逻辑:定义损失函数,求导,迭代更新。
其思想极其朴素:在杂乱的数据点中找一条最优直线,使得所有点到直线的垂直距离(残差)的平方和最小。当特征维度升高时,直线变超平面,但求解思路不变。
手写极简梯度下降(Python + NumPy)——不依赖任何高级框架:
import numpy as np
def gradient_descent(X, y, lr=0.01, epochs=1000):
m, n = X.shape
w = np.zeros(n) # 初始化权重
b = 0.0 # 初始化偏置
for _ in range(epochs):
y_pred = np.dot(X, w) + b
# 计算梯度 (均方误差的偏导)
dw = (2/m) * np.dot(X.T, (y_pred - y))
db = (2/m) * np.sum(y_pred - y)
# 同时更新参数
w -= lr * dw
b -= lr * db
return w, b
# 模拟数据:y = 3*x + 2 + 噪声
X = np.random.rand(100, 1) * 10
y = 3 * X.squeeze() + 2 + np.random.randn(100) * 0.5
w_final, b_final = gradient_descent(X, y)
print(f"拟合结果: w={w_final[0]:.3f}, b={b_final[0]:.3f}")
# 输出逼近: w≈3.000, b≈2.000这段代码仅用不到15行,却完整展示了“学习”的本质——没有黑盒,每一步迭代都有明确的数学指向。
与线性回归不同,K近邻(K-Nearest Neighbors) 属于非参数(Non-parametric)和懒惰学习(Lazy Learning)算法。它根本没有显式的训练过程,而是将全部训练数据“背”下来。当有新样本到来时,它计算该样本与所有已知样本的几何距离,投票选出最近的K个邻居的标签作为预测结果。
它的核心哲学是:“物以类聚,人以群分”。
手写KNN预测逻辑(纯Python):
from collections import Counter
import numpy as np
def knn_predict(X_train, y_train, x_test, k=3):
# 计算欧氏距离
distances = [np.linalg.norm(x - x_test) for x in X_train]
# 获取最近的k个索引
k_indices = np.argsort(distances)[:k]
# 取出对应的标签,进行少数服从多数投票
k_labels = [y_train[i] for i in k_indices]
most_common = Counter(k_labels).most_common(1)[0][0]
return most_common
# 极其简单的二维分类数据:[[0,0], [0,1]] 属于A类,[[10,10]]属于B类
X_train = np.array([[0, 0], [0, 1], [10, 10], [10, 11]])
y_train = np.array(['A', 'A', 'B', 'B'])
pred = knn_predict(X_train, y_train, np.array([1, 1]), k=3)
print(f"测试点 [1,1] 的预测类别: {pred}") # 输出 A它没有复杂的矩阵乘法,只有纯几何计算,结果高度透明——你永远能解释AI为什么会做出某个决定。
决策树模拟了人类做判断时的思维过程:“如果今天是晴天,就去打球;如果下雨且有风,就宅在家”。在构建树的过程中,最核心的问题是:先按哪个特征来划分?
经典算法 ID3 引入了信息熵(Entropy)和信息增益(Information Gain)。信息增益越大,说明按该特征划分后,数据的“不确定性”下降得最多。
计算信息熵的核心代码片段:
import numpy as np
def entropy(labels):
# 计算标签集合的混乱程度
_, counts = np.unique(labels, return_counts=True)
probs = counts / len(labels)
return -np.sum(probs * np.log2(probs))
# 假设一组标签: 9个“是”,5个“否”
labels = ['是']*9 + ['否']*5
print(f"初始熵: {entropy(labels):.3f} bits")
# 输出: 0.940 (接近最大混乱度1,说明极其不纯)构建决策树时,算法会遍历所有特征,计算划分后的加权熵,选择加权熵最小(即信息增益最大)的特征作为根节点。这种基于信息论的决策,让机器拥有了“逻辑推演”的能力。
在LLM(大语言模型)盛行的当下,重提这些经典算法并非怀旧,而是它们在特定维度的表现依然碾压神经网络:
经典AI算法的优雅之处在于,它们构建在严格的凸优化、概率论和几何学之上,而不是靠巨大的浮点数矩阵去“强行记忆”世界。对于初学者而言,理解这些算法是深入机器学习的必经之路——它们是你调试复杂模型时,心中那杆衡量“合理性”的标尺。
当你在PyTorch或TensorFlow中调包训练深度网络时,不妨偶尔回望:梯度下降的那一步更新,依然流淌着线性回归的血液;注意力机制中的加权求和,何尝不是对KNN“加权投票”的高维泛化?
大道至简,衍化至繁。 希望这篇文章能帮你拂去算力迷雾,看清人工智能最坚固的磐石。
下一步建议:在你的Jupyter Notebook中手动运行上述三段代码,改动其中的学习率或K值,观察结果的波动。你会直观地发现,经典算法虽然简单,却包含了调参、过拟合与欠拟合的全部哲学。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。