一、引言:机器学习的时代意义
在人工智能浪潮席卷全球的今天,机器学习已成为推动技术革命的核心引擎。根据2025年Gartner技术成熟度曲线报告,机器学习平台已进入"生产力 plateau"阶段,成为企业数字化转型的基础设施。
1.1 机器学习的定义与发展
机器学习(Machine Learning)是人工智能的一个分支,它使计算机系统能够从数据中自动学习和改进,而无需显式编程。Arthur Samuel在1959年首次提出这个概念,定义为"让计算机在没有明确编程的情况下学习能力的研究领域"。
机器学习的发展经历了三个重要阶段:
- 符号主义时代(1950s-1980s):基于规则和逻辑推理
- 统计学习时代(1990s-2010s):基于概率统计和优化理论
- 深度学习时代(2010s-至今):基于神经网络和大数据
1.2 机器学习的核心价值
机器学习解决了传统编程无法处理的三类问题:
- 复杂模式识别:图像识别、语音识别、自然语言处理
- 预测性分析:销售预测、风险评估、股票预测
- 个性化推荐:电商推荐、内容推荐、广告投放
1.3 本文学习路线图
本文将按照以下结构展开:
- 理论基础:数学基础、核心算法原理
- 实践技能:数据预处理、模型训练、评估优化
- 框架应用:Scikit-learn、TensorFlow、PyTorch
- 工业案例:金融风控、医疗诊断、智能推荐
- 高级主题:深度学习、强化学习、AutoML
二、机器学习数学基础
2.1 线性代数
线性代数是机器学习的基石,主要用于数据表示和变换。
2.1.1 向量与矩阵运算
import numpy as np
# 向量创建与运算
vector_a = np.array([1, 2, 3])
vector_b = np.array([4, 5, 6])
# 点积(内积)
dot_product = np.dot(vector_a, vector_b) # 1*4 + 2*5 + 3*6 = 32
# 向量范数
l2_norm = np.linalg.norm(vector_a) # sqrt(1² + 2² + 3²) = sqrt(14)
# 矩阵创建与运算
matrix_A = np.array([[1, 2], [3, 4]])
matrix_B = np.array([[5, 6], [7, 8]])
# 矩阵乘法
matrix_product = np.dot(matrix_A, matrix_B)
# 矩阵转置
matrix_transpose = matrix_A.T
# 矩阵逆
matrix_inverse = np.linalg.inv(matrix_A)
# 特征值分解
eigenvalues, eigenvectors = np.linalg.eig(matrix_A)
2.1.2 特征值与特征向量
特征值分解在PCA(主成分分析)中至关重要:
def pca_from_scratch(X, n_components=2):
"""
从零实现PCA算法
:param X: 输入数据矩阵 (n_samples, n_features)
:param n_components: 保留的主成分数量
:return: 降维后的数据
"""
# 1. 数据标准化
X_mean = np.mean(X, axis=0)
X_std = np.std(X, axis=0)
X_normalized = (X - X_mean) / X_std
# 2. 计算协方差矩阵
cov_matrix = np.cov(X_normalized.T)
# 3. 特征值分解
eigenvalues, eigenvectors = np.linalg.eigh(cov_matrix)
# 4. 按特征值大小排序
idx = np.argsort(eigenvalues)[::-1]
eigenvectors = eigenvectors[:, idx]
# 5. 选择前n_components个特征向量
projection_matrix = eigenvectors[:, :n_components]
# 6. 投影到新空间
X_pca = np.dot(X_normalized, projection_matrix)
return X_pca, projection_matrix
# 使用示例
from sklearn.datasets import load_iris
iris = load_iris()
X_pca, proj_matrix = pca_from_scratch(iris.data, n_components=2)
print(f"PCA降维结果形状: {X_pca.shape}")
2.2 概率论与统计学
2.2.1 贝叶斯定理
贝叶斯定理是朴素贝叶斯分类器的理论基础:
P(A∣B)=P(B∣A)P(A)P(B)P(A∣B)=P(B)P(B∣A)P(A)
class NaiveBayesClassifier:
def __init__(self):
self.classes = None
self.class_priors = {}
self.feature_likelihoods = {}
def fit(self, X, y):
"""训练朴素贝叶斯分类器"""
self.classes = np.unique(y)
n_samples = len(y)
# 计算类先验概率
for class_val in self.classes:
class_samples = X[y == class_val]
self.class_priors[class_val] = len(class_samples) / n_samples
# 计算特征似然(假设高斯分布)
self.feature_likelihoods[class_val] = {
'mean': np.mean(class_samples, axis=0),
'std': np.std(class_samples, axis=0)
}
def _gaussian_probability(self, x, mean, std):
"""计算高斯概率密度"""
exponent = np.exp(-0.5 * ((x - mean) / std) ** 2)
return (1 / (np.sqrt(2 * np.pi) * std)) * exponent
def predict_proba(self, X):
"""预测概率"""
probabilities = []
for x in X:
class_probs = {}
for class_val in self.classes:
# 计算后验概率(忽略分母P(X))
prior = self.class_priors[class_val]
likelihood = np.prod(
self._gaussian_probability(
x,
self.feature_likelihoods[class_val]['mean'],
self.feature_likelihoods[class_val]['std']
)
)
posterior = prior * likelihood
class_probs[class_val] = posterior
# 归一化
total = sum(class_probs.values())
for class_val in class_probs:
class_probs[class_val] /= total
probabilities.append(class_probs)
return probabilities
def predict(self, X):
"""预测类别"""
probabilities = self.predict_proba(X)
predictions = []
for prob in probabilities:
predicted_class = max(prob, key=prob.get)
predictions.append(predicted_class)
return predictions
# 使用示例
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 生成数据
X, y = make_classification(n_samples=1000, n_features=4, n_classes=3, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
nb_classifier = NaiveBayesClassifier()
nb_classifier.fit(X_train, y_train)
# 预测
y_pred = nb_classifier.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"朴素贝叶斯准确率: {accuracy:.4f}")
2.2.2 最大似然估计
最大似然估计(MLE)用于参数估计:

最低0.47元/天 解锁文章
669

被折叠的 条评论
为什么被折叠?



