机器学习概述
机器学习
⭐⭐特点:
数据驱动
机器学习依赖于大量高质量的数据 : 数据质量直接影响模型性能 , 。
自动学习算法能够自动从数据中发现模式和规律 : 减少人工干预 , 。
泛化能力训练好的模型能够对未见过的数据做出准确预测 : 。
迭代优化模型可以通过更多数据和训练不断优化性能 : 。
适用广泛可应用于分类 : 回归 、 聚类 、 降维等多种任务场景 、 。
计算密集通常需要较强的计算资源 : 尤其是深度学习模型 , 。
黑盒特性部分复杂模型 : 如深度神经网络 ( 的可解释性较差 ) 。
持续演进随着新数据的到来 : 模型可以持续更新和改进 , 。
⭐⭐应用领域:
计算机视觉
图像分类 : 目标检测 、 人脸识别 、 医学影像分析等 、 。
自然语言处理文本分类 : 情感分析 、 机器翻译 、 智能问答等 、 。
推荐系统电商商品推荐 : 视频内容推荐 、 新闻资讯个性化推送等 、 。
金融风控信用评分 : 欺诈检测 、 股票预测 、 风险评估等 、 。
医疗健康疾病诊断 : 药物研发 、 基因分析 、 健康预测等 、 。
自动驾驶环境感知 : 路径规划 、 行为预测 、 决策控制等 、 。
语音识别语音转文字 : 声纹识别 、 智能助手 、 语音合成等 、 。
工业制造质量检测 : 故障预测 、 工艺优化 、 供应链管理等等 、 。
基本概念
💗💗 理解机器学习的基本术语和概念是入门的关键。
数据集划分
- 训练集
Training Set( ) 用于训练模型的数据集: 约占 60-80%, - 验证集
Validation Set( ) 用于调整超参数和选择模型: 约占 10-20%, - 测试集
Test Set( ) 用于最终评估模型性能: 约占 10-20%,
1 | from sklearn.model_selection import train_test_split |
特征与标签
- 特征
Features( ) 输入变量: 用于描述样本的属性, - 标签
Labels( ) 输出变量: 需要预测的目标值, - 样本
Samples( ) 单个数据实例: - 特征工程
从原始数据中提取有用特征的过程:
1 | import pandas as pd |
模型类型
💗💗 根据学习方式, 机器学习主要分为以下几类。
| 类型 | 描述 | 典型算法 |
|---|---|---|
| 监督学习 | 有标签数据 | 线性回归 |
| 无监督学习 | 无标签数据 | K-Means |
| 半监督学习 | 少量标注数据 + 大量未标注数据 | 自训练 |
| 强化学习 | 通过与环境交互学习最优策略 | Q-Learning |
工作流程
⭐⭐ 典型的机器学习项目包含以下步骤。
1. 问题定义
明确业务目标
1 | # 示例 |
2. 数据收集
从各种来源获取相关数据
1 | # 数据来源示例 |
3. 数据预处理
清洗和处理原始数据
1 | # 处理缺失值 |
4. 特征工程
提取
1 | from sklearn.preprocessing import StandardScaler, LabelEncoder |
5. 模型训练
选择合适的算法并训练模型
1 | from sklearn.ensemble import RandomForestClassifier |
6. 模型评估
使用合适的指标评估模型性能
1 | from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score |
7. 模型优化
调整超参数以提升模型性能
1 | from sklearn.model_selection import GridSearchCV |
8. 模型部署
将训练好的模型应用到生产环境
1 | import joblib |
监督学习
线性回归
线性回归是最基础的回归算法
1 | pip install scikit-learn |
1 | from sklearn.linear_model import LinearRegression |
逻辑回归
逻辑回归用于二分类问题
1 | from sklearn.linear_model import LogisticRegression |
决策树
决策树通过树形结构进行分类或回归
1 | from sklearn.tree import DecisionTreeClassifier, export_text |
支持向量机( SVM)
SVM 通过寻找最优超平面进行分类
1 | from sklearn.svm import SVC |
随机森林
随机森林是多个决策树的集成学习方法
1 | from sklearn.ensemble import RandomForestClassifier |
K近邻( KNN)
KNN 基于距离度量进行分类
1 | from sklearn.neighbors import KNeighborsClassifier |
无监督学习
K-Means 聚类
K-Means 将数据划分为 K 个簇
1 | from sklearn.cluster import KMeans |
层次聚类
层次聚类构建树状聚类结构
1 | from sklearn.cluster import AgglomerativeClustering |
DBSCAN
DBSCAN 基于密度的聚类算法
1 | from sklearn.cluster import DBSCAN |
PCA 降维
主成分分析用于降维和特征提取
1 | from sklearn.decomposition import PCA |
模型评估
分类指标
混淆矩阵
1 | from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay |
详细分类报告
1 | from sklearn.metrics import classification_report |
ROC 曲线和 AUC
1 | from sklearn.metrics import roc_curve, auc |
回归指标
1 | from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score |
交叉验证
1 | from sklearn.model_selection import cross_val_score, KFold |
特征工程
数据标准化
MinMaxScaler
1 | from sklearn.preprocessing import MinMaxScaler |
StandardScaler
1 | from sklearn.preprocessing import StandardScaler |
类别编码
One-Hot Encoding
1 | from sklearn.preprocessing import OneHotEncoder |
Label Encoding
1 | from sklearn.preprocessing import LabelEncoder |
特征选择
基于相关性的选择
1 | import seaborn as sns |
基于模型的选择
1 | from sklearn.feature_selection import SelectFromModel |
超参数调优
网格搜索
1 | from sklearn.model_selection import GridSearchCV |
随机搜索
1 | from sklearn.model_selection import RandomizedSearchCV |
Bayesian Optimization
1 | pip install scikit-optimize |
1 | from skopt import BayesSearchCV |
常用库介绍
Scikit-learn
Scikit-learn 是最流行的传统机器学习库
1 | pip install scikit-learn |
1 | import sklearn |
XGBoost
XGBoost 是高效的梯度提升库
1 | pip install xgboost |
1 | import xgboost as xgb |
LightGBM
LightGBM 是微软开发的快速梯度提升框架
1 | pip install lightgbm |
1 | import lightgbm as lgb |
CatBoost
CatBoost 是 Yandex 开发的处理类别特征的库
1 | pip install catboost |
1 | from catboost import CatBoostClassifier |
实践案例
鸢尾花分类
经典的分类问题示例
1 | from sklearn.datasets import load_iris |
波士顿房价预测
回归问题示例
1 | from sklearn.datasets import fetch_california_housing |
客户分群
聚类分析示例
1 | from sklearn.cluster import KMeans |
常见问题
过拟合与欠拟合
过拟合( Overfitting)
模型在训练集上表现很好
症状
- 训练准确率高
测试准确率低, - 训练损失低
测试损失高,
解决方案
1 | # 1. 增加正则化 |
欠拟合( Underfitting)
模型在训练集和测试集上都表现不好
症状
- 训练准确率和测试准确率都低
- 训练损失和测试损失都高
解决方案
1 | # 1. 增加模型复杂度 |
数据不平衡
SMOTE 过采样
1 | pip install imbalanced-learn |
1 | from imblearn.over_sampling import SMOTE |
类别权重
1 | from sklearn.utils.class_weight import compute_class_weight |
特征缩放的重要性
1 | from sklearn.preprocessing import StandardScaler, MinMaxScaler |
学习资源
视频
机器学习《 全套视频教程》 : https://www.bilibili.com/video/BV1Fzszz4Ek7
书籍
Pattern Recognition and Machine Learning《 - Christopher Bishop》 The Elements of Statistical Learning《 - Trevor Hastie》 Hands-On Machine Learning with Scikit-Learn《 - Aurélien Géron》 机器学习《 》 西瓜书( - 周志华) 统计学习方法《 - 李航》
实践平台
- Kaggle
数据科学竞赛和数据集平台: - UCI Machine Learning Repository
经典数据集仓库: - Google Colab
免费的 GPU 云端环境: - Papers with Code
最新论文和代码实现:
- Kaggle
社区与论坛
- Stack Overflow
技术问题问答: - Reddit - r/MachineLearning
机器学习讨论社区: - 知乎 - 机器学习话题
中文机器学习交流: - GitHub
开源项目和代码分享:
- Stack Overflow
博客与资讯
- Towards Data Science
Medium 上的数据科学专栏: - Machine Learning Mastery
Jason Brownlee 的博客: - Distill.pub
可视化的机器学习文章: - AI Conference Papers
NeurIPS, ICML, ICLR 等顶级会议:
- Towards Data Science