机器学习知识点梳理(回归模型、分类模型、聚类模型、评估方法)-思维导图
• 回归模型:线性回归、决策树、SVM(可以,效果差)
• 分类模型:逻辑回归、决策树、SVM、朴素贝叶斯(只能分类)
• 聚类模型:kmeans(基于原型)、DBSCAN(基于密度)、凝聚层次(基于层次)
• 评估方法:
◦ 回归问题:R2(综合指标)、均方误差(损失函数)
◦ 分类问题:查准率(评估误检)、召回率(评估漏检)、F1(综合评估前两者)
◦ 聚类问题:轮廓系数

═══════════════════════════════════════════════════════════════════
【一】回归问题 Regression
═══════════════════════════════════════════════════════════════════
回归 (Regression)
│
├─ 1. 线性回归 (Linear Regression)
│ ├─ 简单线性回归: y = wx + b
│ │ └─ API: lm.LinearRegression()
│ ├─ 多项式回归: y = w₀ + w₁x + w₂x² + ... + wₙxⁿ
│ │ └─ API: pl.make_pipeline(sp.PolynomialFeatures(n), lm.LinearRegression())
│ ├─ 岭回归 (Ridge): E = MSE + λ||w||₂²
│ │ └─ API: lm.Ridge(alpha=200, max_iter=1000)
│ └─ Lasso回归: E = MSE + λ||w||₁
│ └─ API: lm.Lasso(alpha=0.5, max_iter=1000)
│
├─ 2. 决策树回归 (Decision Tree Regressor)
│ ├─ 特点: 非线性,可解释性强
│ └─ API: st.DecisionTreeRegressor(max_depth=4)
│
├─ 3. SVM回归 (Support Vector Regression)
│ ├─ 特点: 效果较差,不推荐
│ └─ API: svm.SVR(kernel='rbf', C=1.0)
│
├─ 评估指标 📊
│ ├─ R² 决定系数 (主要): sm.r2_score(y_true, y_pred)
│ │ └─ 范围: [0, 1],越接近1越好
│ └─ 均方误差 MSE (辅助): sm.mean_squared_error(y_true, y_pred)
│ └─ 越小越好
│
└─ 核心概念
├─ 损失函数: E = (1/2)Σ(y - y')²
├─ 梯度下降: w = w - η * ∂E/∂w
├─ 学习率 η: 控制参数更新步长
├─ 过拟合: 训练集准确但测试集差 → 正则化、减少特征
└─ 欠拟合: 训练测试都差 → 增加特征、提高复杂度
═══════════════════════════════════════════════════════════════════
【二】分类问题 Classification
═══════════════════════════════════════════════════════════════════
分类 (Classification)
│
├─ 1. 逻辑回归 (Logistic Regression)
│ ├─ 特点: 二分类和多分类
│ ├─ Sigmoid函数: σ(z) = 1/(1+e⁻ᶻ)
│ └─ API: lm.LogisticRegression(solver='liblinear', C=1.0)
│
├─ 2. 决策树分类 (Decision Tree Classifier)
│ ├─ 划分标准:
│ │ ├─ 信息熵 (entropy)
│ │ └─ 基尼系数 (gini)
│ └─ API: st.DecisionTreeClassifier(max_depth=4, criterion='entropy')
│
├─ 3. 支持向量机 (SVM)
│ ├─ 核函数:
│ │ ├─ 线性核 (linear): kernel='linear'
│ │ ├─ 多项式核 (poly): kernel='poly', degree=3
│ │ └─ 径向基核 (rbf): kernel='rbf', gamma='auto' ⭐推荐
│ ├─ 参数:
│ │ ├─ C: 惩罚参数,控制误分类容忍度
│ │ └─ gamma: 核系数,影响决策边界复杂度
│ └─ API: svm.SVC(kernel='rbf', C=1.0, gamma='auto')
│
├─ 4. 朴素贝叶斯 (Naive Bayes) ⚠️ 只能分类
│ ├─ 基于贝叶斯定理
│ ├─ 假设特征独立
│ └─ API: nb.GaussianNB()
│
├─ 评估指标 📊
│ ├─ 混淆矩阵 (Confusion Matrix)
│ │ └─ sm.confusion_matrix(y_true, y_pred)
│ │ ┌──────┬──────┐
│ │ │ TN │ FP │
│ │ ├──────┼──────┤
│ │ │ FN │ TP │
│ │ └──────┴──────┘
│ │
│ ├─ 查准率 Precision (评估误检) ⭐
│ │ ├─ 公式: TP / (TP + FP)
│ │ └─ API: sm.precision_score(y_true, y_pred, average='macro')
│ │
│ ├─ 召回率 Recall (评估漏检) ⭐
│ │ ├─ 公式: TP / (TP + FN)
│ │ └─ API: sm.recall_score(y_true, y_pred, average='macro')
│ │
│ └─ F1得分 (综合评估) ⭐⭐⭐
│ ├─ 公式: 2 * P * R / (P + R)
│ └─ API: sm.f1_score(y_true, y_pred, average='macro')
│
└─ 数据集划分
└─ ms.train_test_split(X, y, test_size=0.25, random_state=7)
═══════════════════════════════════════════════════════════════════
【三】聚类问题 Clustering
═══════════════════════════════════════════════════════════════════
聚类 (Clustering) - 无监督学习
│
├─ 1. K-Means (基于原型聚类) ⭐最常用
│ ├─ 特点:
│ │ ├─ ✅ 简单高效,收敛快
│ │ ├─ ❌ 需要事先指定K值
│ │ ├─ ❌ 对初始中心敏感
│ │ └─ ❌ 对噪声敏感
│ ├─ 适用场景: 数据有明显中心,已知聚类数
│ ├─ API: sc.KMeans(n_clusters=4)
│ ├─ 获取结果:
│ │ ├─ 聚类标签: model.labels_
│ │ └─ 聚类中心: model.cluster_centers_
│ └─ 核心思想:
│ ├─ Step1: 随机选择K个中心
│ ├─ Step2: 计算每个样本到各中心的距离
│ ├─ Step3: 将样本分配到最近的中心
│ ├─ Step4: 重新计算各簇的几何中心
│ └─ Step5: 重复2-4直到收敛
│
├─ 2. DBSCAN (基于密度聚类)
│ ├─ 参数:
│ │ ├─ eps: 邻域半径
│ │ └─ min_samples: 核心点最小样本数
│ ├─ 样本分类:
│ │ ├─ 核心点 (Core): 邻域内样本数 >= min_samples
│ │ ├─ 边界点 (Border): 邻域不足但能归入某簇
│ │ └─ 噪声点 (Noise): 无法归入任何簇,标签为-1
│ ├─ 特点:
│ │ ├─ ✅ 不需要指定K值
│ │ ├─ ✅ 能处理噪声和异常点
│ │ ├─ ✅ 能识别任意形状的簇
│ │ └─ ❌ 对参数敏感
│ ├─ 适用场景: 数据稠密无明显中心,噪声多,未知K
│ ├─ API: sc.DBSCAN(eps=0.8, min_samples=5)
│ └─ 获取结果:
│ ├─ 聚类标签: model.labels_
│ └─ 核心样本索引: model.core_sample_indices_
│
├─ 3. 凝聚层次聚类 (Agglomerative)
│ ├─ 特点:
│ │ ├─ ✅ 无需初始中心
│ │ ├─ ✅ 对中心不明显的数据效果好
│ │ ├─ ❌ 需要指定聚类数
│ │ └─ ❌ 无法进行预测
│ ├─ 距离计算方式 (linkage):
│ │ ├─ ward: 方差最小化(默认)
│ │ ├─ average: 平均距离
│ │ └─ complete: 最大距离
│ ├─ 适用场景: 中心特征不明显
│ └─ API: sc.AgglomerativeClustering(n_clusters=4, linkage='ward')
│
├─ 评估指标 📊
│ └─ 轮廓系数 (Silhouette Score) ⭐⭐⭐
│ ├─ 公式: S(i) = (b(i) - a(i)) / max(b(i), a(i))
│ │ ├─ a(i): 样本i到同簇其他点的平均距离
│ │ └─ b(i): 样本i到最近其他簇所有点的平均距离
│ ├─ 范围: [-1, 1]
│ │ ├─ 接近 1: 聚类效果好(内密外疏)
│ │ ├─ 接近 0: 聚类有重叠
│ │ └─ 接近 -1: 聚类效果差
│ └─ API: sm.silhouette_score(X, labels, metric='euclidean')
│
└─ 距离度量
├─ 欧式距离: d = √Σ(xi - yi)²
├─ 曼哈顿距离: d = Σ|xi - yi|
└─ 闵可夫斯基距离: d = (Σ|xi - yi|ᵖ)^(1/p)
═══════════════════════════════════════════════════════════════════
【四】数据预处理 Data Preprocessing
═══════════════════════════════════════════════════════════════════
数据预处理
│
├─ 1. 标准化 (均值移除)
│ ├─ 目标: 均值=0, 标准差=1
│ ├─ 作用: 消除量纲影响
│ └─ API: sp.scale(data) 或 sp.StandardScaler()
│
├─ 2. 范围缩放
│ ├─ 目标: 缩放到指定范围 [0, 1]
│ └─ API: sp.MinMaxScaler(feature_range=(0, 1))
│
├─ 3. 归一化
│ ├─ L1归一化: 除以绝对值之和
│ ├─ L2归一化: 除以平方和的平方根
│ └─ API: sp.normalize(data, norm='l1' or 'l2')
│
├─ 4. 二值化
│ ├─ 根据阈值转换为0/1
│ └─ API: sp.Binarizer(threshold=60)
│
├─ 5. 独热编码 (可逆)
│ ├─ 将分类特征转为二进制向量
│ ├─ API: sp.OneHotEncoder(sparse=False, dtype='int32')
│ └─ 解码: encoder.inverse_transform(encoded_data)
│
└─ 6. 标签编码
├─ 将字符串标签转为数字
├─ API: sp.LabelEncoder()
└─ 解码: encoder.inverse_transform(encoded_data)
═══════════════════════════════════════════════════════════════════
【五】模型评估与优化
═══════════════════════════════════════════════════════════════════
模型评估与优化
│
├─ 1. 数据集划分
│ ├─ 训练集 vs 测试集
│ │ ├─ 常用比例: 9:1, 8:2, 7:3
│ │ └─ API: ms.train_test_split(X, y, test_size=0.25, random_state=7)
│ │
│ └─ 交叉验证 (Cross Validation) ⭐推荐
│ ├─ K折交叉验证: 将数据分为K份,轮流做测试集
│ ├─ 优点: 充分利用小数据集
│ └─ API: ms.cross_val_score(model, X, y, cv=5, scoring='f1_weighted')
│
├─ 2. 超参数优化
│ ├─ 网格搜索 (Grid Search) ⭐⭐⭐
│ │ ├─ 原理: 穷举所有参数组合
│ │ ├─ API: ms.GridSearchCV(model, params, cv=5)
│ │ ├─ 获取最优参数: model.best_params_
│ │ └─ 获取最优得分: model.best_score_
│ │
│ └─ 随机搜索 (Random Search)
│ └─ 原理: 在参数空间随机采样
│
├─ 3. 验证曲线 (Validation Curve)
│ ├─ 作用: 评估不同超参数值对模型的影响
│ └─ API: ms.validation_curve(model, X, y, 'param_name', param_range, cv=5)
│
├─ 4. 学习曲线 (Learning Curve)
│ ├─ 作用: 评估不同训练集大小对模型的影响
│ └─ API: ms.learning_curve(model, X, y, train_sizes=np.linspace(0.1, 1, 10), cv=5)
│
└─ 5. 常见问题诊断
├─ 过拟合 (Overfitting)
│ ├─ 表现: 训练集准确率高,测试集准确率低
│ ├─ 原因: 模型过于复杂,学习了噪声
│ └─ 解决:
│ ├─ 正则化 (L1/L2)
│ ├─ 减少特征
│ ├─ 降低模型复杂度
│ └─ 增加训练数据
│
└─ 欠拟合 (Underfitting)
├─ 表现: 训练集和测试集准确率都低
├─ 原因: 模型过于简单
└─ 解决:
├─ 增加特征
├─ 提高模型复杂度
└─ 增加训练数据
═══════════════════════════════════════════════════════════════════
【六】完整机器学习流程
═══════════════════════════════════════════════════════════════════
机器学习项目完整流程
│
├─ Step 1: 数据收集 📂
│ ├─ 手工采集
│ ├─ 设备自动采集
│ ├─ 爬虫获取
│ └─ 公开数据集
│
├─ Step 2: 数据清洗 🧹
│ ├─ 去除无效数据
│ ├─ 处理缺失值
│ ├─ 去除重复数据
│ └─ 数据格式统一
│
├─ Step 3: 数据预处理 🔧
│ ├─ 标准化/归一化
│ ├─ 特征编码
│ ├─ 特征选择
│ └─ 数据集划分
│
├─ Step 4: 选择模型 🎯
│ ├─ 根据问题类型选择
│ │ ├─ 回归 → LinearRegression, Ridge, Lasso
│ │ ├─ 分类 → SVM, DecisionTree, NaiveBayes
│ │ └─ 聚类 → KMeans, DBSCAN
│ └─ 考虑数据特点
│
├─ Step 5: 训练模型 🏋️
│ ├─ model.fit(train_x, train_y)
│ ├─ 调整超参数
│ └─ 防止过拟合/欠拟合
│
├─ Step 6: 模型评估 📊
│ ├─ 使用测试集评估
│ ├─ 交叉验证
│ └─ 根据评估指标判断
│ ├─ 回归: R², MSE
│ ├─ 分类: F1, Precision, Recall
│ └─ 聚类: Silhouette Score
│
├─ Step 7: 模型优化 ⚡
│ ├─ 网格搜索最优参数
│ ├─ 特征工程
│ └─ 模型融合
│
├─ Step 8: 模型保存 💾
│ └─ pickle.dump(model, file)
│
└─ Step 9: 模型部署与维护 🚀
├─ 加载模型: pickle.load(file)
├─ 实时预测
└─ 定期更新模型
═══════════════════════════════════════════════════════════════════
【七】快速查询手册
═══════════════════════════════════════════════════════════════════
┌────────────────────────────────────────────────────────────────┐
│ 问题类型选择指南 │
├────────────────────────────────────────────────────────────────┤
│ 预测连续值? → 回归问题 │
│ 预测离散类别? → 分类问题 │
│ 数据无标签分组? → 聚类问题 │
└────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────┐
│ 模型选择建议 │
├────────────────────────────────────────────────────────────────┤
│ 数据呈线性关系? → LinearRegression │
│ 数据呈非线性关系? → PolynomialFeatures + LR │
│ 需要可解释性? → DecisionTree │
│ 小数据集分类? → SVM │
│ 文本分类? → NaiveBayes │
│ 已知聚类数且有中心? → KMeans │
│ 噪声多形状不规则? → DBSCAN │
│ 中心不明显? → AgglomerativeClustering │
└────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────┐
│ 评估指标速查 │
├────────────────────────────────────────────────────────────────┤
│ 回归问题: │
│ R² 决定系数 [0,1] 越接近1越好 │
│ 均方误差 MSE 越小越好 │
│ │
│ 分类问题: │
│ 查准率 Precision 重视准确性(如推荐系统) │
│ 召回率 Recall 重视完整性(如逃犯检测) │
│ F1得分 综合评估 ⭐推荐 │
│ │
│ 聚类问题: │
│ 轮廓系数 [-1,1] 越接近1越好 │
└────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────┐
│ 常用代码模板 │
├────────────────────────────────────────────────────────────────┤
│ # 导入常用库 │
│ import numpy as np │
│ import sklearn.linear_model as lm │
│ import sklearn.metrics as sm │
│ import sklearn.model_selection as ms │
│ │
│ # 划分数据集 │
│ train_x, test_x, train_y, test_y = ms.train_test_split( │
│ X, y, test_size=0.25, random_state=7) │
│ │
│ # 训练模型 │
│ model = lm.LinearRegression() │
│ model.fit(train_x, train_y) │
│ │
│ # 预测评估 │
│ pred_y = model.predict(test_x) │
│ score = sm.r2_score(test_y, pred_y) │
└────────────────────────────────────────────────────────────────┘
═══════════════════════════════════════════════════════════════════
【八】重要概念速记卡
═══════════════════════════════════════════════════════════════════
📌 机器学习三要素:
├─ 模型 (Model): 数学函数 y = f(x)
├─ 策略 (Strategy): 损失函数最小化
└─ 算法 (Algorithm): 梯度下降等优化算法
📌 有监督 vs 无监督:
├─ 有监督: 数据有标签 (回归、分类)
└─ 无监督: 数据无标签 (聚类、降维)
📌 偏差-方差权衡:
├─ 高偏差 = 欠拟合 → 模型太简单
└─ 高方差 = 过拟合 → 模型太复杂
📌 L1 vs L2 正则化:
├─ L1: ||w||₁ = Σ|w| → 特征选择,产生稀疏解
└─ L2: ||w||₂ = √(Σw²) → 防止过拟合,权重衰减
📌 核函数作用:
└─ 将低维线性不可分数据映射到高维线性可分
📌 聚类数量选择:
├─ 肘部法则 (Elbow Method)
├─ 轮廓系数法
└─ 业务需求