【机器学习】机器学习新手入门概述
目录
一、机器学习概念
1.1基本概念
1.2 主要类型
1.2.1 监督学习(Supervised Learning)
(1)基本介绍
(2)任务目标
(3)常见算法
(4)应用场景
1.2.2 无监督学习(Unsupervised Learning)
(1)基本概念
(2)应用任务
(3)常见算法
(4)应用场景
1.2.3 强化学习(Reinforcement Learning)
(1)基本概念
(2)经典方法
(3)应用场景
1.2.4 扩展类型
(1)半监督学习
(2)自监督学习
二、关于sklearn机器学习库
2.1 基本介绍
2.1.1 简单介绍
2.1.2 优点介绍
2.1.3 不足
2.2 主要模块
2.3 流程概述
2.3.1 获取数据阶段(Data Acquisition)
(1)sklearn玩具数据集
(2)sklearn现实世界数据集
(3)sklearn加载玩具数据集
2.3.2 数据预处理阶段(Data Preprocessing)
(1)MinMaxScaler 归一化
(2)normalize归一化
(3)StandardScaler 标准化
(4)相关注意补充
2.3.3 特征工程阶段(Feature Engineering)
(1)特征选择(Feature Selection)
(2)特征降维(Dimensionality Reduction)
2.3.4 模型构建阶段(Modeling / Training)
2.3.5 模型评估阶段(Evaluation)
(1)对于分类
(2)对于回归
2.3.6 模型优化阶段(Tuning)
(1)超参数调优(Hyperparameter Tuning)
(2)管道 (Pipeline)
(3)交叉验证(Cross Validation)
2.3.7 部署与应用阶段(deployment)
(1)模型保存与加载
(2)构建 API 接口(常用 Flask)
(3)打包发布的常见方式
三、文末总结
一、机器学习概念
1.1基本概念
机器学习(Machine Learning) 是人工智能的一个分支,主要研究让计算机从数据中自动学习规律,并根据学习到的规律进行预测或决策。简言之,它是“用数据训练模型,再用模型处理任务”。
机器学习的核心思想是让计算机通过数据 “自主学习” 规律,而非依赖人工编写的固定规则。传统编程是 “输入规则→输出结果”,而机器学习是 “输入数据和结果→输出规则”,再用学到的规则预测新数据。
1.2 主要类型
1.2.1 监督学习(Supervised Learning)
(1)基本介绍
- 模型在训练时使用带有标签的数据集,学习“输入 ➜ 输出”的映射关系。
- 目的是在给定新输入时预测对应的输出。
(2)任务目标
-
分类:输出是离散的类别标签
-
回归:输出是连续的数值
(3)常见算法
- 分类算法:KNN算法,决策树,支持向量机SVM,朴素贝叶斯
- 回归算法:线性回归,Lasso回归,支持向量回归 SVR,决策树回归
(4)应用场景
邮件分类,气温预测,图像识别,人脸识别等
1.2.2 无监督学习(Unsupervised Learning)
(1)基本概念
- 训练数据没有标签,算法通过分析数据的结构、自主发现隐藏模式或规律。
(2)应用任务
-
聚类:将数据自动分组
-
降维:压缩特征维度,保持信息
(3)常见算法
- 聚类算法:K-Means,DBSCAN,层次聚类
- 降维算法:主成分分析(PCA),t-SNE(非线性降维),自编码器(Autoencoder)
(4)应用场景
用户分群(电商客户画像),异常检测(信用卡欺诈),数据可视化
1.2.3 强化学习(Reinforcement Learning)
(1)基本概念
- 智能体(Agent)在环境中不断试错,通过“奖赏-惩罚”机制学习如何采取最优策略以最大化长期回报。
- 关键词:状态(State),动作(Action),奖励(Reward),策略(Policy)
(2)经典方法
-
Q-learning(离线强化学习)
-
深度强化学习(Deep Q Network, DDPG, PPO)
(3)应用场景
游戏 AI(下棋、打 Atari),自动驾驶,机器人控制,股票交易策略优化等
1.2.4 扩展类型
(1)半监督学习
- 半监督学习(Semi-Supervised):结合少量有标签数据 + 大量无标签数据
- 应用场景:医学影像(标签难获得)
(2)自监督学习
- 自行构造伪标签从数据中学习表示
- 应用场景:应用于自然语言处理、图像识别;如:BERT、SimCLR、GPT 等深度学习模型的预训练阶段
二、关于sklearn机器学习库
2.1 基本介绍
2.1.1 简单介绍
scikit-learn(简称
sklearn)
是 Python 中最流行的机器学习库之一,其对初学者友好、功能完整、工程可用,是学习与应用机器学习的常用工具。我们现在就从sklearn开始学习。
2.1.2 优点介绍
优点 | 说明 |
---|---|
丰富的算法库 | 包含常用的分类、回归、聚类、降维等算法(如 KNN、SVM、决策树、随机森林、KMeans、PCA) |
模块化设计 | 拆分为预处理、建模、调参、评估等步骤,接口统一 |
一致的 API 设计 | 所有模型都支持 .fit() 、.predict() 、.score() 等方法,学习成本低 |
集成交叉验证与调参工具 | 提供 GridSearchCV、cross_val_score 等方法简化模型选择 |
数据预处理与特征工程工具 | 如归一化(Scaler)、特征选择(SelectKBest)、降维(PCA)等 |
文档丰富,社区活跃 | 有详细文档和大量教程,便于学习与查错 |
兼容 NumPy / Pandas | 可与主流数据分析库无缝衔接 |
2.1.3 不足
- 不适合大数据量分布式训练(推荐用 PyTorch、TensorFlow、XGBoost 等工具搭配)
2.2 主要模块
模块 | 功能 |
---|---|
sklearn.datasets | 提供常用数据集,如 load_iris() 、load_digits() 等 |
sklearn.model_selection | 数据划分、交叉验证、网格搜索 |
sklearn.preprocessing | 数据预处理(标准化、归一化、编码等) |
sklearn.feature_selection | 特征选择工具 |
sklearn.decomposition | 降维算法,如 PCA |
sklearn.neighbors | KNN 相关算法 |
sklearn.tree | 决策树、随机森林 |
sklearn.linear_model | 线性回归、逻辑回归等 |
sklearn.svm | 支持向量机 |
sklearn.metrics | 模型评估指标,如准确率、混淆矩阵等 |
2.3 流程概述
本文将以基本讲解与代码示例相结合的方式为读者介绍,这里先简单介绍一下各个阶段:
2.3.1 获取数据阶段(Data Acquisition)
目标:获取结构化的数据,形成特征矩阵 X 和标签 y
(1)sklearn玩具数据集
- 数据量小,数据在sklearn库的本地,只要安装了sklearn,不用上网就可以获取
(2)sklearn现实世界数据集
- 数据量大,数据只能通过网络获取
(3)sklearn加载玩具数据集
1、以鸢尾花数据集为例:
from sklearn.datasets import load_iris
iris = load_iris()#鸢尾花数据
2、特征:
- 花萼长 sepal length
- 花萼宽sepal width
- 花瓣长 petal length
- 花瓣宽 petal width
3、分类:
- 0-Setosa山鸢尾
- 1-versicolor变色鸢尾
- 2-Virginica维吉尼亚鸢尾
4、相关代码介绍:
print(iris.data) #得到特征
print(iris.feature_names) #特征描述
print(iris.target) #目标形状
print(iris.target_names) #目标描述
print(iris.filename) #iris.csv 保存后的文件名
print(iris.DESCR) #数据集的描述
2.3.2 数据预处理阶段(Data Preprocessing)
目标:清洗数据,转化为算法能接受的形式
(1)数据清洗(Data Cleaning)
使用 Pandas清洗数据:
- 去除重复数据:数据集中的重复记录会影响模型的学习,可能导致过拟合。
- 处理异常值:例如,数值过大或过小的异常数据,这些值通常并不代表真实世界的情况。
- 数据类型转换:确保每一列的数据类型正确,如数值型变量不应是文本类型。
(2)数据集划分(Data Splitting)
使用 train_test_split
划分数据:
-
训练集:用于训练模型,让模型学习数据中的规律。
-
验证集:用于调整模型的超参数,避免过拟合。
-
测试集:用于评估最终模型的性能。
(3)缺失值处理(Handling Missing Values)
- 删除缺失值:对于缺失值较少的情况,可以直接删除。
- 填充缺失值:使用均值、中位数、众数或者通过模型预测来填充缺失值。
- 插补法:使用预测模型或插值方法填充缺失值。
(4)数据编码(Encoding Categorical Variables)
许多机器学习算法无法直接处理文本数据(如分类变量),需要将其转换为数值型数据。
- 标签编码(Label Encoding):将每个类别映射为一个唯一的数字,适用于有序类别。
- 独热编码(One-Hot Encoding):将每个类别转换为二进制列,适用于无序类别。
2.3.3 特征工程阶段(Feature Engineering)
目的:构造/选择/提取对模型有用的特征
(1)特征选择(Feature Selection)
进行特征提取,比如字典特征提取,文本特征提取
- 过滤法(Filter):
SelectKBest
,f_classif,
选择与目标变量最相关的 K 个特征 - 包裹法(Wrapper):RFE(递归特征消除)
- 嵌入法(Embedded):使用模型选择特征,如 Lasso、树模型
(2)特征转换(Feature Transformation)
目的:对现有特征进行转化,使其更适合用于训练机器学习模型,或者更易于理解。
- 对数变换(Log Transformation):当数据呈现高度偏态分布时,使用对数变换来使其更接近正态分布。
- 多项式特征(Polynomial Features):生成现有特征的多项式特征,扩展特征空间,适用于非线性模型。
- 交互特征(Interaction Features):通过将特征之间的交互(乘积、比值)作为新的特征添加。
(3)特征缩放(Feature Scaling)
目的:调整特征的数值范围,使其标准化或归一化,避免某些特征在模型训练中占主导地位。
- 归一化(Normalization):将特征缩放到固定范围(通常是 [0, 1]),适用于一些要求特征在同一尺度上的算法,如神经网络。
- 标准化(Standardization):将特征转换为均值为 0,标准差为 1 的分布,适用于大多数机器学习算法,尤其是基于距离的算法(如 KNN、SVM)
(4)特征构造(Feature Creation)
目的:基于现有的原始特征,创造新的、更具代表性的特征,提供给模型学习更多的模式。
(5)特征降维(Dimensionality Reduction)
目的:减少特征的数量,同时尽量保留原数据的信息,有助于减少计算复杂度和过拟合。
- 主成分分析 PCA:
sklearn.decomposition.PCA:
将数据从高维空间映射到低维空间,保留尽可能多的方差信息。 - 线性判别分析 LDA(带标签):一种有监督的降维方法,适用于分类任务,最大化类间差异,最小化类内差异。
- t-SNE(可视化用):一种常用于高维数据降维的算法,特别是在数据可视化中,它可以将高维数据映射到二维或三维空间。
2.3.4 模型构建阶段(Modeling / Training)
目标:使用算法对数据建模,寻找规律
经过上述的获取数据、数据处理、特征工程后,就可以交给预估器进行机器学习,流程和常用API如下:
1.实例化预估器(估计器)对象(estimator), 预估器对象很多,都是estimator的子类
(1)用于分类的预估器
sklearn.neighbors.KNeighborsClassifier k-近邻
sklearn.naive_bayes.MultinomialNB 贝叶斯
sklearn.linear_model.LogisticRegressioon 逻辑回归
sklearn.tree.DecisionTreeClassifier 决策树
sklearn.ensemble.RandomForestClassifier 随机森林
(2)用于回归的预估器
sklearn.linear_model.LinearRegression线性回归
sklearn.linear_model.Ridge岭回归
(3)用于无监督学习的预估器
sklearn.cluster.KMeans 聚类
2.进行训练,训练结束后生成模型
estimator.fit(x_train, y_train)
3.模型评估
(1)方式1,直接对比
y_predict = estimator.predict(x_test)
y_test == y_predict
(2)方式2, 计算准确率
accuracy = estimator.score(x_test, y_test)
4.使用模型(预测)
y_predict = estimator.predict(x_true)
2.3.5 模型评估阶段(Evaluation)
目标:验证模型的预测能力。
(1)对于分类
指标 | 意义 | sklearn 工具 |
---|
准确率(Accuracy) | 分类正确的样本数占比 | accuracy_score() |
精准率(Precision) | 正类中被预测对的比例 | precision_score() |
召回率(Recall) | 实际正类中被识别的比例 | recall_score() |
F1 值(F1-score) | 精准率和召回率的调和均值 | f1_score() |
混淆矩阵 | 预测对/错的具体分布 | confusion_matrix() |
ROC 曲线 / AUC | 综合评价分类器性能 | roc_curve() , roc_auc_score() |
(2)对于回归
指标 | 意义 | sklearn 工具 |
---|---|---|
均方误差(MSE) | 误差平方平均 | mean_squared_error() |
平均绝对误差(MAE) | 误差绝对值平均 | mean_absolute_error() |
决定系数 R² | 模型拟合程度 | r2_score() |
2.3.6 模型优化阶段(Tuning)
目的:进一步提升模型性能,提高泛化能力,防止过拟合、欠拟合
(1)超参数调优(Hyperparameter Tuning)
超参数(Hyperparameter) 是在模型训练之前手动设置的参数,用于控制模型的结构、训练过程或优化策略,其值无法通过训练数据自动学习得到,需要通过人工调试、网格搜索、随机搜索等方式确定。超参数是模型设计的核心,直接影响模型的性能。
1、方法:
- Grid Search(网格搜索):枚举所有参数组合
- Randomized Search(随机搜索):从参数分布中随机选择组合
- 贝叶斯优化等高级方法(用第三方库如
optuna
)
2、工具:
GridSearchCV
RandomizedSearchCV
3、示例代码:
这里以KNN算法作一个示例:在KNN算法中,k是一个可以人为设置的参数,所以就是一个超参数。使用网格搜索能自动的帮助我们找到最好的超参数值。
from sklearn.model_selection import GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_irisx,y = load_iris(return_X_y=True)knn = KNeighborsClassifier(n_neighbors=5)model = GridSearchCV(knn, param_grid={"n_neighbors": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}, cv=5)model.fit(x, y)print("参数:", model.best_params_)
print("分数:", model.best_score_)
print("最佳K:",model.best_index_)
print("模型:", model.best_estimator_)
# print("结果:", model.cv_results_)# 模型model即可进行预测
model.predict(x)
(2)管道 (Pipeline)
将多个步骤(预处理、特征选择、模型)串联起来自动执行,避免数据泄露。
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifierpipe = Pipeline([('scaler', StandardScaler()),('clf', RandomForestClassifier())
])
pipe.fit(X_train, y_train)
(3)交叉验证(Cross Validation)
- 交叉验证是一种评估模型泛化能力的核心方法,其核心目标是解决 “如何用有限数据更可靠地判断模型是否能在新数据上表现良好” 的问题。
-
保留交叉验证(HoldOut Cross-validation )
-
k 折交叉验证(k-fold Cross-Validation)
-
分层 k 折交叉验证(Stratified k-fold)
-
留一交叉验证(Leave-One-Out CV, LOOCV)
-
时间序列交叉验证(Time Series CV)
2.3.7 部署与应用阶段(deployment)
目标:将训练好的模型部署到生产环境中,比如放到 Web 页面、API 接口中使用。
(1)模型保存与加载
- 保存模型:
import joblib# 保存模型到指定路径
joblib.dump(model, "../src/modle/KNN.pkl")
# 保存转换器(可选)
joblib.dump(transfer, "../src/modle/transfer.pkl")
- 加载模型:
import joblibmodel = joblib.load("../src/modle/KNN.pkl")
transfer = joblib.load("../src/modle/transfer.pkl")
(2)构建 API 接口(常用 Flask)
简单举个例子:
from flask import Flask, request, jsonify
import joblibapp = Flask(__name__)
model = joblib.load('my_model.pkl')@app.route('/predict', methods=['POST'])
def predict():data = request.get_json()features = [data['feature1'], data['feature2']]result = model.predict([features])return jsonify({'prediction': int(result[0])})# 启动服务:flask run
(3)打包发布的常见方式
部署方式 | 说明 |
---|---|
Flask / FastAPI | 构建 RESTful API,适合原型与小项目 |
Web前端(React/Vue) | 调用 API 接口进行预测 |
Docker 容器化 | 封装成镜像部署在任意服务器 |
云部署(阿里云、AWS、GCP) | 在云端创建可访问服务 |
使用 Streamlit | 快速搭建交互式 Web 应用展示模型效果 |
三、文末总结
本篇文章的学习路线和标准流程的设计,旨在帮助初学者快速建立起一个知识架构,全面地理解机器学习项目的每个环节,并掌握从数据到部署的完整技术栈。每个阶段都对应了机器学习的核心技能和思维方式,进而培养独立解决实际问题的能力。从流程入手,逐个突破每个环节的核心技能,再通过完整项目串联,是掌握机器学习的高效路径。
在学习机器学习的过程中,需要注意几点核心原则:首先是理论与实践结合,在学习过程中我们会不断接触到高等数学的知识(线性代数、概率论等),要能够将数学基础与模型原理结合起来理解和学习,再通过具体项目进行实践;其次是以业务为导向,所有步骤都需围绕 “解决实际问题”,归根到底我们是要面向应用、服务于实际生产的,在之后文章中也会着重体现这一点;再有就是要具备迭代思维,机器学习是 “数据→模型→评估→优化” 的循环,没有 “完美模型”,只有 “更适合当前场景的模型”。暂时想到这么多。