机器学习算法大全
分类 + 原理 + 公式 + 代码 + 场景 + 优缺点
(一页看全,5分钟入门,30分钟实战)
一、算法总览思维导图
graph TD
ML[机器学习算法] --> SUP[监督学习]
ML --> UNS[无监督学习]
ML --> ENS[集成学习]
ML --> DL[深度学习]
SUP --> REG[回归]
SUP --> CLA[分类]
REG --> LR[线性回归]
REG --> PR[多项式回归]
REG --> SVR[支持向量回归]
CLA --> LOG[逻辑回归]
CLA --> KNN[KNN]
CLA --> NB[朴素贝叶斯]
CLA --> DT[决策树]
CLA --> SVM[SVM]
UNS --> CLU[K-Means]
UNS --> HCA[层次聚类]
UNS --> DB[DBSCAN]
UNS --> PCA[PCA降维]
ENS --> BAG[Bagging<br>随机森林]
ENS --> BOOST[Boosting<br>XGBoost, LightGBM]
ENS --> STACK[Stacking]
DL --> NN[神经网络]
DL --> CNN[CNN]
DL --> RNN[RNN/LSTM]
DL --> TRANS[Transformer]
二、15 大核心算法(定义 + 公式 + 代码 + 场景)
| 算法 | 类型 | 核心思想 | 公式 | Python 代码 | 适用场景 | 优缺点 |
|---|---|---|---|---|---|---|
| 1. 线性回归 | 回归 | 拟合直线 | $ \hat{y} = wX + b $ | LinearRegression() | 房价预测 | 简单、可解释 不能非线性 |
| 2. 逻辑回归 | 分类 | Sigmoid 映射概率 | $ P(y=1) = \sigma(wX+b) $ | LogisticRegression() | 垃圾邮件、二分类 | 概率输出 仅线性可分 |
| 3. 决策树 | 分类/回归 | 问答式分裂 | 信息增益/基尼 | DecisionTreeClassifier() | 信用评估 | 可视化 易过拟合 |
| 4. 随机森林 | 集成 | 多树投票 | Bagging | RandomForestClassifier() | 推荐系统 | 抗过拟合 黑箱 |
| 5. XGBoost | 集成 | 梯度提升树 | 加权残差树 | XGBClassifier() | Kaggle 冠军 | 精度高 调参复杂 |
| 6. K-Means | 聚类 | 中心点迭代 | $ \min \sum |x – \mu_k|^2 $ | KMeans(n_clusters=3) | 客户分群 | 快速 需指定K |
| 7. PCA | 降维 | 主成分投影 | 协方差矩阵特征分解 | PCA(n_components=2) | 数据可视化 | 降噪 丢失解释性 |
| 8. KNN | 分类/回归 | 最近邻投票 | 距离度量 | KNeighborsClassifier(n=5) | 推荐系统 | 直观 计算慢 |
| 9. 朴素贝叶斯 | 分类 | 贝叶斯定理 + 独立假设 | $ P(y | x) \propto P(x | y)P(y) $ | GaussianNB() |
| 10. SVM | 分类 | 最大间隔超平面 | $ \min \frac{1}{2}|w|^2 + C\sum \xi $ | SVC(kernel='rbf') | 小样本分类 | 效果好 对噪声敏感 |
| 11. K-Means | 聚类 | 中心迭代 | 同上 | KMeans() | 图像分割 | 简单 球形簇 |
| 12. 神经网络 | 通用 | 多层感知机 | $ z = Wx + b, a = \sigma(z) $ | MLPClassifier() | 通用 | 强大 需大数据 |
| 13. CNN | 图像 | 卷积 + 池化 | $ (f * g)(i,j) $ | PyTorch/TensorFlow | 图像识别 | 自动提取特征 |
| 14. LSTM | 序列 | 记忆门控 | $ f_t, i_t, o_t $ | LSTM() | 文本生成、语音 | 处理时序 训练慢 |
| 15. Transformer | NLP | 自注意力 | $ \text{Attention}(Q,K,V) $ | Hugging Face | 翻译、聊天机器人 | SOTA 参数多 |
三、算法选择速查表(看问题选算法)
| 任务 | 数据量 | 推荐算法 |
|---|---|---|
| 预测连续值 | 小 | 线性回归 |
| 大 | 随机森林 / XGBoost | |
| 二分类 | 小 | 逻辑回归 / SVM |
| 大 | XGBoost / 神经网络 | |
| 多分类 | – | 随机森林 / 神经网络 |
| 文本分类 | – | 朴素贝叶斯 / BERT |
| 图像分类 | – | CNN / Vision Transformer |
| 客户分群 | – | K-Means / DBSCAN |
| 降维可视化 | – | PCA / t-SNE |
| 推荐系统 | – | 协同过滤 / 深度学习 |
四、实战代码模板(复制即用)
# ===== 通用机器学习模板 =====
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score, mean_squared_error
import pandas as pd
# 1. 加载数据
df = pd.read_csv('your_data.csv')
X = df.drop('target', axis=1)
y = df['target']
# 2. 预处理
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 3. 划分数据集
X_train, X_test, y_train, y_test = train_test_split(
X_scaled, y, test_size=0.2, random_state=42, stratify=y
)
# 4. 训练模型(替换你想要的算法)
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# 5. 预测与评估
pred = model.predict(X_test)
print("准确率:", accuracy_score(y_test, pred))
五、算法对比图(可视化记忆)
graph LR
A[简单] --> B[线性回归]
A --> C[逻辑回归]
A --> D[朴素贝叶斯]
M[中等] --> E[决策树]
M --> F[KNN]
M --> G[SVM]
H[复杂] --> I[随机森林]
H --> J[XGBoost]
H --> K[神经网络]
H --> L[深度学习]
style A fill:#f9f,stroke:#333
style M fill:#bbf,stroke:#333
style H fill:#fb9,stroke:#333
六、Kaggle 冠军算法套路
| 阶段 | 常用技巧 |
|---|---|
| 特征工程 | 缺失值填补、独热编码、特征交叉 |
| 模型融合 | Stacking(LR + RF + XGB) |
| 调参 | 贝叶斯优化、Optuna |
| 后处理 | 概率校准、投票 |
七、推荐学习路径(30天精通 10 大算法)
| 周 | 目标 | 算法 |
|---|---|---|
| 1 | 回归 | 线性回归、岭回归 |
| 2 | 分类 | 逻辑回归、KNN、朴素贝叶斯 |
| 3 | 树模型 | 决策树、随机森林、XGBoost |
| 4 | 聚类&降维 | K-Means、PCA、t-SNE |
八、你现在可以做什么?
# 立即运行:对比 6 大分类算法
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
X, y = make_classification(n_samples=1000, n_features=20, random_state=42)
models = {
'LR': LogisticRegression(),
'KNN': KNeighborsClassifier(),
'DT': DecisionTreeClassifier(),
'RF': RandomForestClassifier(),
'XGB': __import__('xgboost').XGBClassifier(use_label_encoder=False, eval_metric='logloss'),
'SVM': SVC()
}
for name, model in models.items():
scores = cross_val_score(model, X, y, cv=5)
print(f"{name}: {scores.mean():.3f} (±{scores.std():.3f})")
九、资源推荐
| 类型 | 链接 |
|---|---|
| 文档 | Scikit-learn 官方 |
| 比赛 | Kaggle |
| 书籍 | 《Hands-on ML with Scikit-Learn》 |
| 课程 | CS229 斯坦福 |
想立刻实战?选一个项目:
- 泰坦尼克生存预测(决策树 + 随机森林)
- 房价预测(XGBoost 回归)
- 手写数字识别(CNN)
- 客户分群(K-Means + PCA 可视化)
回复 1–4,我给你完整 Jupyter Notebook 代码!